Оказывается, система штрафов работала через открытый API без авторизации. Райли Уолц просто первым догадался это использовать.

23-летний инженер Райли Уолц во вторник утром запустил сервис Find My Parking Cops — карту Сан-Франциско с геолокацией всех парковочных инспекторов города в реальном времени. К обеду того же дня муниципальная транспортная служба (SFMTA) закрыла доступ к данным, правда, ненадолго — через несколько часов Уолц нашёл обход препятствия.

Прикол в том, что Уолц ничего не взламывал. Он просто заметил, что на сайте оплаты штрафов SFMTA можно получить полную копию любого штрафа по его номеру — включая номер машины, место нарушения и даже личные заметки инспектора типа «Водитель назвал меня мудаком».

Так выглядит парковочный штраф при проверке через сайт SFMTA
Так выглядит парковочный штраф при проверке через сайт SFMTA

Номера штрафов идут последовательно (хоть и не подряд), так что парень написал скрипт, который предсказывает следующие номера и парсит данные в режиме реального времени.

Это потрясающе! Я вижу всё: марку машины, цвет, место, причину штрафа, номерной знак и даже инициалы офицера, выписавшего постановление. Мне бы очень хотелось иметь возможность просматривать КАЖДЫЙ штраф. Но я не знаю идентификаторов всех записей. СЕКУНДУ... Эти числа, похоже, идут почти по порядку. Текущие ID находятся где-то в районе 992 000 000, а у штрафов, выписанных пару месяцев назад, они были примерно в районе 988 000 000.

Я смотрел штраф с номером 984 946 605. Когда я набираю следующий, 984 946 606, система не находит ничего. Это логично — вряд ли было выписано почти миллиард штрафов. Но как же тогда формируются эти ID? Должна быть какая-то логика.

После долгих разбирательств я, кажется, понял. Похоже, каждый возможный номер следует определённой схеме: прибавляется 11, за исключением случаев, когда последняя цифра равна 6 — тогда прибавляется 4. Таким образом, ни один номер штрафа не может оканчиваться на 7, 8 или 9. То есть после 984 946 606 идёт 984 946 610, а затем 984 946 621. Почему так устроено, известно лишь Богу, но я предполагаю, что это пережиток какой-то старой системы.

На карте можно было видеть инициалы каждого инспектора и его последнее местоположение — интерфейс специально копировал Find My от Apple. А ещё там был рейтинг «самых продуктивных» копов: лидер недели офицер №0435 выписал штрафов на $16 722 за два дня. В нижней части таблицы копы с показателями около $3 000 — разница в производительности в пять раз, что намекает на интересные вопросы о мотивации сотрудников.

Кстати, о деньгах: средний штраф выходит около $105, но за парковку на месте для инвалидов можно отхватить до $866. Всего в городе работает около 300 инспекторов на смешных одноместных машинках, как кролик Джуди Хоппс из «Зверополиса», и они выписывают по одному штрафу каждые 24 секунды.

Кажется, неплохой бизнес для города, который гордится своей прогрессивностью? Но издание The San Francisco Standard подсчитало, что при таких темпах дефицит бюджета SFMTA в $320 миллионов они закроют через 132 года.

На появление сайта SFMTA отреагировала молниеносно — обычно муниципальные службы так быстро двигаются только когда речь идёт о потере денег. Официальная позиция: «Мы приветствуем креативное использование технологий для соблюдения парковочных правил, но должны защищать безопасность наших сотрудников». В переводе с бюрократического: водители начали уворачиваться от штрафов, используя карту, и это угрожало квартальным показателям.

У Уолца, кстати, есть история создания вирусных проектов. В прошлом году он запустил Bopspotter — микрофон на Mission Street, который распознавал песни, играющие на улице, и вёл их лог. До этого был Papers — архив первых полос газет, и Routeshuffle — генератор случайных маршрутов для пробежек. Парень явно понимает, как делать простые вещи, которые зацепят людей. При этом у самого Уолца машины нет — проект он сделал после того, как штраф получил его сосед.

Проблема не в том, что Уолц «раскрыл» систему — а в том, что система изначально была дырявой. Любой мог получить эти данные, просто никто не догадался сделать удобную визуализацию, и из валяющихся под ногами данных (ещё и про копов) сделать вирусный проект. Такая вот security through obscurity — пока никто не знает про уязвимость, её как бы и нет.

Скрытый текст

Такие посты чаще выходят у меня в Telegram-канале, где в основном пишу про AI и его применение. Что? Сам раскрыл этот спойлер.

Комментарии (71)


  1. user-book
    24.09.2025 09:35

    мда

    Не говорим даже про короткоживущие ссылки - просто публичный адрес хэшировать с достаточной энтропией и хоть обсканируйся

    И я более чем уверен что как любая государственная система она проходила чертову дюжину сертификаций перед внедрением


    1. Niketas Автор
      24.09.2025 09:35

      С одной стороны да. А с другой — ну вот насколько реально является значимым нарушением приватных/персональных данных раскрытие информации о том, какой штраф получила такая-то машина с таким-то госномером? С точки зрения здравого смысла.


      1. xSVPx
        24.09.2025 09:35

        Ну как-бы не очень хорошо, если в рантайме их обновляют, т.е. ты теоретически можешь копов, которые этим заняты очень точно отслеживать.

        Тут скорее другой вопрос: что вообще "полезного" дает подобный публичный сервис ? Как с его помощью ухудшить эффективность копов и поставить их под удар можно фантазировать по-разному(а еще можно местоположение конкретных граждан узнавать, которых только что оштрафовали), но хорошее то что можно сделать ?


        1. Volodichev
          24.09.2025 09:35

          Можно же пойти другим путём и подумать, как с помощью этого сервиса УЛУЧШИТЬ эффективность "копов". Цель ведь не в собирании штрафов, а в обеспечении порядка.

          1. Убрать ID сотрудника в другую таблицу, закрытую от публичного доступа.
          2. Построить маршруты так, чтобы нельзя было предугадать маршрут.
          3. Ввести задержку публикации штрафов на рандомное время (до получаса, допустим).

          В итоге, увидел что в квартале от тебя оштрафовали другого водителя и срочно бежишь перепарковываться по правилам - чёрт его знает, где теперь инспектор.


          1. randomsimplenumber
            24.09.2025 09:35

            Цель ведь не в собирании штрафов, а в обеспечении порядка.

            Нужно больше парковок тогда.

            Построить маршруты так, чтобы нельзя было предугадать маршрут.

            Сложно.

            Ввести задержку публикации штрафов на рандомное время (до получаса, допустим).

            Публиковать в конце дня. И все проблемы решены ;)


            1. Groh
              24.09.2025 09:35

              "Публиковать в конце дня" - присылать бумажной почтой заказным письмом, когда сроки уплаты штрафа со скидкой вышли. Постойте-ка, где я это видел...?


              1. randomsimplenumber
                24.09.2025 09:35

                2 недели скидочного времени в конце дня не должно протухнуть.


            1. Ergistael
              24.09.2025 09:35

              Парковки - ограниченный ресурс в городе. Кроме того, есть эффект Джевонса.

              Цель же в том, чтобы парковок было достаточно для тех, кто согласен с некоторыми неудобствами (например, платить за них), а точнее, для кого удобства превышают недостатки. И чтобы не было "зайцев" (я не о Джуди Хопс).

              PS: а нафиг их вообще публиковать? (Русский метод.) Но если надо проверить свой штраф - то приделать к каждому штрафу секретный номер с рандомным числом.


              1. randomsimplenumber
                24.09.2025 09:35

                PS: а нафиг их вообще публиковать?

                Ну а доступ к электронной копии как сделать, без смс и регистрации?


                1. p07a1330
                  24.09.2025 09:35

                  По номеру авто и (например) вин-номеру
                  Или - по номеру СТС/водительского


                  1. randomsimplenumber
                    24.09.2025 09:35

                    Посмотрел на номер - и знаешь всю историю штрафов. Удобненько.

                    А номер удостоверения инспектор не спрашивает; квитанцию под дворник и досвидания.


                    1. p07a1330
                      24.09.2025 09:35

                      А зачем в этом апи оторбажать ввсе штрафы, а не только за последние N дней например?


                      1. randomsimplenumber
                        24.09.2025 09:35

                        Если через N дней квитанция недоступна - найдется человек-юрист, который через суд отменит штраф.


                    1. qyix7z
                      24.09.2025 09:35

                      Посмотрел на номер - и знаешь всю историю штрафов. Удобненько

                      Примерно так работает приложение Парковки.

                      Недавно мне прислало пуш, что "на одну из ваших машин пришел штраф, смотри госуслуги". Я смотрю свои, жена смотрит свои - пусто. Я догадываюсь заглянуть в само приложение и обнаруживаю, что там есть еще один автомобиль - я его просто занес по номеру несколько лет назад (не помню зачем).

                      Таким образом можно внести любой номер авто в приложение и получать информацию о его штрафах.


          1. K0styan
            24.09.2025 09:35

            Ввести задержку публикации штрафов на рандомное время

            Лучше как раз не рандомное, а достаточное для того, чтобы инспектор свой участок успел полностью объехать + запас где-нибудь на 30%. Этого вполне хватит, чтобы предсказуемость появления инспектора сломать.


          1. Wesha
            24.09.2025 09:35

            Цель ведь не в собирании штрафов, а в обеспечении порядка.

            Вот и остальные горожане так думают.


        1. y_u_h
          24.09.2025 09:35

          Не очевидно нисколько, что парковочный инспектор - это коп, а не муниципальный служащий, навроде московских коллег.


      1. ssv32
        24.09.2025 09:35

        - слежка за полицией получается (вдруг у кого то зуб на копа)

        - номера машин и места парковок, информация о том кто где находится, куда ездит в какое время

        - мб, для угонщиков какие машины какого цвета где ставят


        1. randomsimplenumber
          24.09.2025 09:35

          Просто поставить машину на полчаса, пока инспектор окучивает другой квартал.


          1. Byteler
            24.09.2025 09:35

            И сидя в ней с бурритос в зубах судорожно пытаться определить, куда ее можно успеть переставить...


            1. randomsimplenumber
              24.09.2025 09:35

              Приехал на полчаса. Поставил машину под знаком. Решил свой вопрос. Уехал без штрафа.


              1. Groh
                24.09.2025 09:35

                Интересно, если так можно, то почему там парковка запрещена?

                Может быть, это кому-то выгодно?


                1. randomsimplenumber
                  24.09.2025 09:35

                  Ну, как запрещена.. знак парковаться не мешает. Мешает призрак инспектора, который где то рядом. А если точно знаешь, что инспектор здесь уже всех обилетил, и вернется на 2 круг не скоро..


                1. Gutt
                  24.09.2025 09:35

                  Интересно, если так можно, то почему там парковка запрещена?

                  Она чаще всего не запрещена, но требует оплаты. Штрафуют за стоянку без оплаты.


              1. Byteler
                24.09.2025 09:35

                Приехал на полчаса. Поставил машину под знаком. Сел в такси и поехал куда надо -- ну очень быстро. Решил свой вопрос. И быстро обратно. Очень быстро - Фриско большой город! Потратил в разы больше, чем стоимость стоянки. Уехал без штрафа. Кукиш им всем, амерам!
                Можно, конечно, несколько часов подождать, пока выпадет нужная стоянка.
                Или дней. Если такой упрямый. Или нуб, пишущий 50 комментов в день - самое время на стоянке их пописать.


                1. randomsimplenumber
                  24.09.2025 09:35

                  Странный обычай ставить машину с нарушением и дальше ехать на такси. За такое нужно штрафовать;)


                  1. Byteler
                    24.09.2025 09:35

                    Не понятно? Вероятность того, что нужная вам стоянка вдруг окажется в нужный вам момент на полчаса вне досягаемости инспектора настолько мала, что оправдать ваши усилия в глазах общественности может только объяснение, что вам просто срочно нужно попасть на крышу в Батлере.


                    1. randomsimplenumber
                      24.09.2025 09:35

                      Уверен что в ближайший час инспектора не будет- паркуешься под знаком. Не уверен - едешь на платную ппарковку. Так можно в вашем Сан-Франциско?


          1. shlmzl
            24.09.2025 09:35

             пока инспектор окучивает другой квартал.

            Я так понимаю, инспектор не окучивает квартал за кварталом. Инспектор окучивает наиболее приоритетного нарушителя, к примеру ближайшего при прочих равных. Там тысячи камер установлены, особенно в проблемных местах. Наводку, я так понимаю, он (не обязательно все) получает автоматически. Все могут видеть, все могут фиксировать если захотят. Играться с ними на их поле - такое себе развлечение.


            1. randomsimplenumber
              24.09.2025 09:35

              Конечно. Вопрос был - как утечку можно использовать. Например, вот так.


      1. DrGluck07
        24.09.2025 09:35

        Насколько важной является информация, что такая-то машина точно стояла в определенной точке в точное время? Ну даже не знаю, тут можно много кейсов придумать, вплоть до "в это время она не стояла возле дома, значит хозяина нет, можно грабить". Причём это точное время могло быть минуту назад.


      1. MisterClever
        24.09.2025 09:35

        Добрый день, вы владелец такой-то машины и были там-то в такое то время? Мы ошибочно выписали вам штраф, и хотим досудебно урегулировать вопрос. На вашу карту отравлена сумма в размере: "сумма штрафа умноженная на три", для получения введите код из СМС


        1. randomsimplenumber
          24.09.2025 09:35

          Или оплатите со скидкой, вот реквизиты


      1. muxa_ru
        24.09.2025 09:35

        А с другой — ну вот насколько реально является значимым нарушением приватных/персональных данных раскрытие информации о том, какой штраф получила такая-то машина с таким-то госномером? С точки зрения здравого смысла.

        Любая сволочь может узнать куда Вы ездите.


    1. Gutt
      24.09.2025 09:35

      И я более чем уверен что как любая государственная система

      Я думаю, что это мунициальная система.


  1. shlmzl
    24.09.2025 09:35

    Такая вот security through obscurity — пока никто не знает про уязвимость, её как бы и нет.

    Это просто отсутствие security. "никто не знает" - стопятьсот человек знали, но были причины почему молчали. Или использовали втихаря, или просто были облико морале, или им было что терять и опасались что ловушка, отследят и накажут и т.д. и т.п.

    "security through obscurity" - это когда нестандартная самопальная защита, большой брат не рекомендует ею пользоваться потому что ненадежная.


    1. SquareRootOfZero
      24.09.2025 09:35

      Да просто пофигу всем, наверное, в основном. Ну вот, допустим, я, обычный сан-францисский обыватель, узнал, что можно смотреть все эти штрафы - и что? Даже если бы не нужно было бы сканировать скриптом по всем номерам штрафов, а прямо посмотреть по номеру интересующего авто - всё равно, и что? Даже если я не простой обыватель, а, к примеру, киллер или грабитель, пасущий клиента, с целью поудобнее убить/ограбить - а его всё не штрафуют, сегодня не штрафуют, завтра не штрафуют, неделю не штрафуют, месяц не штрафуют, и что? Это "security through неуловимый джоity".


  1. Astus
    24.09.2025 09:35

    Papers — архив первых полос газет

    Классный проект, залип и добавил в закладки.


    1. Wesha
      24.09.2025 09:35

      Бэрримор, но как???...



  1. NikitchenkoSergey
    24.09.2025 09:35

    "То есть после 984 946 606 идёт 984 946 610, а затем 984 946 621"
    Последняя цифра для контроля целостности видимо


    1. Rsa97
      24.09.2025 09:35

      А судя по отсутствию 7, 8 и 9 - это что-то по модулю 7.
      Ну и, раз всё идёт линейно, то, скорее всего, просто сумма цифр плюс какая-то дельта, взятая по модулю.
      9+8+4+9+4+6+6+0 = 46 => 6
      9+8+4+9+4+6+6+1 = 47 => 0
      9+8+4+9+4+6+6+2 = 48 => 1
      Взяв дельту 2 получим
      (46 + 2) mod 7 = 6
      (47 + 2) mod 7 = 0
      (48 + 2) mod 7 = 1


      1. edyapd
        24.09.2025 09:35

        Или просто

        984 946 606 -> (984 946 60 +1) % 7 -> 6

        984 946 610 -> (984 946 61 + 1) % 7 -> 0

        984 946 621 -> (984 946 62 + 1) % 7 -> 1


        1. Rsa97
          24.09.2025 09:35

          Тоже может быть. Тут надо более полный набор идентификаторов.


        1. kukovik
          24.09.2025 09:35

          Для последовательности из миллиона чисел, начинающейся с числа 98494660 при применении вашей гипотезы действительно сохраняется следование правилу "11 и 4". Вот табличка последних цифр результирующего числа, разницы со следующим за ним числом и их количества:
          0 11 142857
          1 11 142857
          2 11 142857
          3 11 142857
          4 11 142857
          5 11 142857
          6 4 142858


      1. n0isy
        24.09.2025 09:35

        Мне кажется последняя цифра это просто EAN-13 CRC или что то подобное. Вероятно это штука как раз сканером штрих-кода должна сканироваться. И номер - это штрихкод.



      1. S0010
        24.09.2025 09:35

        Добрый вечер, если я правильно понимаю, тут даже более глубокая и не такая бесполезная суть про использование 11ти. Есть канал математиков с видосиком про то, где объясняют эту систему на примере обычного диска, в котором можно даже дыру (небольшую) просверлить, но он будет читаться без ошибок


        1. Wesha
          24.09.2025 09:35

          «Дыру просвелить и будет читаться без ошибок» потому, что соседние биты в байте на самом деле на диске пространственно разнесены где‑то на сантиметр. Кстати, для балансировки лучше было не сверлить, а просто чернилами капнуть.


  1. inkelyad
    24.09.2025 09:35

    Ну вот у нас кассовые чеки можно дергать без авторизации. Там, конечно, ID-ы не последовательные целые, но заинтересованных лиц это не так чтобы останавливает, судя по всему.
    Можно построить карту цен и расходов населения.


    1. ddr5
      24.09.2025 09:35

      Разве не нужна авторизация по паролю от кабинета ФНС?


    1. edogs
      24.09.2025 09:35

      Так там не только ИД. ИД накопителя, номер чека, контрольная строка, дата, время, сумма - без всего этого не получишь подтверждения чека.


      1. SystemOutPrintln
        24.09.2025 09:35

        Так вот же, вбил ФН, ФД, ФП и готово. Ни даты, ни времени, ни суммы не требуется.

        Правда, это лишь один из множества операторов фискальных данных. У кого-то придётся вводить полный комплект...


        1. edogs
          24.09.2025 09:35

          Правда, это лишь один из множества операторов фискальных данных

          Дык о том и речь. На некоторых сервисах можно было вообще по e-mail получить список чеков одно время, даже без деталей чека.

          А именно у налоговой https://kkt-online.nalog.ru/#check-bill требуются все данные.


    1. Volodichev
      24.09.2025 09:35

      А можно подробнее, как это сделать?


      1. Groh
        24.09.2025 09:35

        Использовать данные с бумажного чека, например. Но это не совсем чтобы "без авторизации"


      1. SystemOutPrintln
        24.09.2025 09:35

        Вот сервис по поиску чека в одном из ОФД. Тут достаточно указать лишь ФН, ФД и ФП, а это целочисленные значения.

        Чисто теоретически можно было бы в цикле пройтись по всему диапазону возможных значений и вытащить все существующие чеки...

        Конечно, это лишь один из ОФДшек, и не везде требуется так мало данных для поиска чека (кое-где и дату заставят ввести, и сумму, и чёрт знает что ещё). Но тем не менее...


        1. edogs
          24.09.2025 09:35

          Чисто теоретически можно было бы в цикле пройтись по всему диапазону возможных значений и вытащить все существующие чеки...

          Слишком больше число будет чтобы на практике реализовать это за разумные сроки, там только контрольная шифросумма 10 знаков, а еще номер чека и номер накопителя - 4 и 16 знаков.


        1. igorrev
          24.09.2025 09:35

          А вы пробовали юзать это в массовом порядке и с помощью перебора кодов? Пробовали, не работает. Банят очень быстро. Для разовых запросов подходит, для промышленного применения нет.


    1. Kassatsier
      24.09.2025 09:35

      А кому это может быть нужно? Данные, которые покрываются чеками, и так можно найти в открытом доступе. А по товарам и услугам в серой и черной зоне чеки не выдают.


      1. freeExec
        24.09.2025 09:35

        А можно ссылку где скачать, раз уж в открытом доступе всё лежит?


        1. MechanicZelenyy
          24.09.2025 09:35


  1. AfterMe_ru
    24.09.2025 09:35

    В свое время когда только появились платные парковки в Москве и время ожидания оплаты было 15 минут, хотел сделать сервис, который будет автоматически "перепарковывать" машины каждые 20-25 минут, с оплатой по 5-7 минут, т.е. получалось около 20 минут за фактический час парковки, как надстройку над "парковкой москвы", т.е. паркинг бы обходился в 3 раза дешевле и без нарушений. Но так и не сделал) Там тоже были варианты по контролю маршрутов инспекторов и синхронизацией оплат.


    1. Soarerru
      24.09.2025 09:35

      Это так не работает, а работает не так ))

      Машину надо было физически переставлять, потому что эти минуты считались не до/после оплаты, а относительно фиксации машины парконом. Сфотали через N минут после начала парковки и ещё через 15 минут - если машина стоит, а оплаты за данный момент нет, то штраф. Т.е. вероятность ситуации, что парковка вашим приложением началась и закончилась между началом и концом этого 15-минутного интервала - весьма ненулевая. Не, ну там чуть сложнее был алгоритм, ещё давалось время на отъезд, но не суть. А на длительном промежутке времени ситуация, что парковка то оплачена, то нет, а машина после этого никуда не уезжает - приводила к 100% штрафу. Как говорится, скажите спасибо, что хоть разрешили корректировать сроки парковки пост-фактум, а то сколько раз было - не смог уложиться в минуты при продлении парковки - и привет, 2500. Хотя 90-95% парковочного времени было честно оплачено.

      С перестановкой машины да, возможность обдурить систему была, и наёмные водители этим пользовались: пока босс на встрече, они каждые 20-25-30 минут переставляют машину, оплачивая по чуть-чуть. Но это только когда совсем заняться нечем, и парковочных мест много. В центре Москвы урвать место за любые деньги - везуха.


      1. Old_paranoid
        24.09.2025 09:35

        Наемному водителю в центре Москвы дешевле на машине вокруг квартала кататься, создавая трафик и пробки, так как на 450 рублей (вроде так сейчас за час в центре дерут) можно залить ~6,5 литров бензина, чего хватит минимум на два часа езды на небольшой скорости.


        1. randomsimplenumber
          24.09.2025 09:35

          Наемному проще решать сканворд на парковке.


          1. Old_paranoid
            24.09.2025 09:35

            Конечно проще, но не дешевле :)


            1. ColorPrint
              24.09.2025 09:35

              Так платит же не он


              1. randomsimplenumber
                24.09.2025 09:35

                Вряд ли наниматель сам решает вопросы с парковкой, бензином и штрафами. Но как то тупо будет, если наниматель приходит на парковку, а водитель где то в пробке застрял. Или таксует, чтобы время зря не тратить.


  1. Akon32
    24.09.2025 09:35

    UUID7 бы использовать, но нет же,

    Похоже, каждый возможный номер следует определённой схеме: прибавляется 11, за исключением случаев, когда последняя цифра равна 6 — тогда прибавляется 4.


    1. inkelyad
      24.09.2025 09:35

      UUID7 бы использовать, но нет же,

      Так его этот номер не просто идентификатор в базе данных, но, судя по всему, и кто-то где-то набирает руками - об этом говорит контрольная цифра. Их обычно против ошибок набора используют.
      А UUID любого вида для такого малопригоден.