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

23-летний инженер Райли Уолц во вторник утром запустил сервис Find My Parking Cops — карту Сан-Франциско с геолокацией всех парковочных инспекторов города в реальном времени. К обеду того же дня муниципальная транспортная служба (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)

shlmzl
24.09.2025 09:35Такая вот security through obscurity — пока никто не знает про уязвимость, её как бы и нет.
Это просто отсутствие security. "никто не знает" - стопятьсот человек знали, но были причины почему молчали. Или использовали втихаря, или просто были облико морале, или им было что терять и опасались что ловушка, отследят и накажут и т.д. и т.п.
"security through obscurity" - это когда нестандартная самопальная защита, большой брат не рекомендует ею пользоваться потому что ненадежная.

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

NikitchenkoSergey
24.09.2025 09:35"То есть после 984 946 606 идёт 984 946 610, а затем 984 946 621"
Последняя цифра для контроля целостности видимо
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
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

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

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

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

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

inkelyad
24.09.2025 09:35Ну вот у нас кассовые чеки можно дергать без авторизации. Там, конечно, ID-ы не последовательные целые, но заинтересованных лиц это не так чтобы останавливает, судя по всему.
Можно построить карту цен и расходов населения.
edogs
24.09.2025 09:35Так там не только ИД. ИД накопителя, номер чека, контрольная строка, дата, время, сумма - без всего этого не получишь подтверждения чека.

SystemOutPrintln
24.09.2025 09:35Так вот же, вбил ФН, ФД, ФП и готово. Ни даты, ни времени, ни суммы не требуется.
Правда, это лишь один из множества операторов фискальных данных. У кого-то придётся вводить полный комплект...

edogs
24.09.2025 09:35Правда, это лишь один из множества операторов фискальных данных
Дык о том и речь. На некоторых сервисах можно было вообще по e-mail получить список чеков одно время, даже без деталей чека.
А именно у налоговой https://kkt-online.nalog.ru/#check-bill требуются все данные.

Volodichev
24.09.2025 09:35А можно подробнее, как это сделать?

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

SystemOutPrintln
24.09.2025 09:35Вот сервис по поиску чека в одном из ОФД. Тут достаточно указать лишь ФН, ФД и ФП, а это целочисленные значения.
Чисто теоретически можно было бы в цикле пройтись по всему диапазону возможных значений и вытащить все существующие чеки...
Конечно, это лишь один из ОФДшек, и не везде требуется так мало данных для поиска чека (кое-где и дату заставят ввести, и сумму, и чёрт знает что ещё). Но тем не менее...

edogs
24.09.2025 09:35Чисто теоретически можно было бы в цикле пройтись по всему диапазону возможных значений и вытащить все существующие чеки...
Слишком больше число будет чтобы на практике реализовать это за разумные сроки, там только контрольная шифросумма 10 знаков, а еще номер чека и номер накопителя - 4 и 16 знаков.

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

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

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

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

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

randomsimplenumber
24.09.2025 09:35Наемному проще решать сканворд на парковке.

Old_paranoid
24.09.2025 09:35Конечно проще, но не дешевле :)

ColorPrint
24.09.2025 09:35Так платит же не он

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

user-book
мда
Не говорим даже про короткоживущие ссылки - просто публичный адрес хэшировать с достаточной энтропией и хоть обсканируйся
И я более чем уверен что как любая государственная система она проходила чертову дюжину сертификаций перед внедрением
Niketas Автор
С одной стороны да. А с другой — ну вот насколько реально является значимым нарушением приватных/персональных данных раскрытие информации о том, какой штраф получила такая-то машина с таким-то госномером? С точки зрения здравого смысла.
xSVPx
Ну как-бы не очень хорошо, если в рантайме их обновляют, т.е. ты теоретически можешь копов, которые этим заняты очень точно отслеживать.
Тут скорее другой вопрос: что вообще "полезного" дает подобный публичный сервис ? Как с его помощью ухудшить эффективность копов и поставить их под удар можно фантазировать по-разному(а еще можно местоположение конкретных граждан узнавать, которых только что оштрафовали), но хорошее то что можно сделать ?
Volodichev
Можно же пойти другим путём и подумать, как с помощью этого сервиса УЛУЧШИТЬ эффективность "копов". Цель ведь не в собирании штрафов, а в обеспечении порядка.
1. Убрать ID сотрудника в другую таблицу, закрытую от публичного доступа.
2. Построить маршруты так, чтобы нельзя было предугадать маршрут.
3. Ввести задержку публикации штрафов на рандомное время (до получаса, допустим).
В итоге, увидел что в квартале от тебя оштрафовали другого водителя и срочно бежишь перепарковываться по правилам - чёрт его знает, где теперь инспектор.
randomsimplenumber
Нужно больше парковок тогда.
Сложно.
Публиковать в конце дня. И все проблемы решены ;)
Groh
"Публиковать в конце дня" - присылать бумажной почтой заказным письмом, когда сроки уплаты штрафа со скидкой вышли. Постойте-ка, где я это видел...?
randomsimplenumber
2 недели скидочного времени в конце дня не должно протухнуть.
Ergistael
Парковки - ограниченный ресурс в городе. Кроме того, есть эффект Джевонса.
Цель же в том, чтобы парковок было достаточно для тех, кто согласен с некоторыми неудобствами (например, платить за них), а точнее, для кого удобства превышают недостатки. И чтобы не было "зайцев" (я не о Джуди Хопс).
PS: а нафиг их вообще публиковать? (Русский метод.) Но если надо проверить свой штраф - то приделать к каждому штрафу секретный номер с рандомным числом.
randomsimplenumber
Ну а доступ к электронной копии как сделать, без смс и регистрации?
p07a1330
По номеру авто и (например) вин-номеру
Или - по номеру СТС/водительского
randomsimplenumber
Посмотрел на номер - и знаешь всю историю штрафов. Удобненько.
А номер удостоверения инспектор не спрашивает; квитанцию под дворник и досвидания.
p07a1330
А зачем в этом апи оторбажать ввсе штрафы, а не только за последние N дней например?
randomsimplenumber
Если через N дней квитанция недоступна - найдется человек-юрист, который через суд отменит штраф.
qyix7z
Примерно так работает приложение Парковки.
Недавно мне прислало пуш, что "на одну из ваших машин пришел штраф, смотри госуслуги". Я смотрю свои, жена смотрит свои - пусто. Я догадываюсь заглянуть в само приложение и обнаруживаю, что там есть еще один автомобиль - я его просто занес по номеру несколько лет назад (не помню зачем).
Таким образом можно внести любой номер авто в приложение и получать информацию о его штрафах.
K0styan
Лучше как раз не рандомное, а достаточное для того, чтобы инспектор свой участок успел полностью объехать + запас где-нибудь на 30%. Этого вполне хватит, чтобы предсказуемость появления инспектора сломать.
Wesha
Вот и остальные горожане так думают.
y_u_h
Не очевидно нисколько, что парковочный инспектор - это коп, а не муниципальный служащий, навроде московских коллег.
ssv32
- слежка за полицией получается (вдруг у кого то зуб на копа)
- номера машин и места парковок, информация о том кто где находится, куда ездит в какое время
- мб, для угонщиков какие машины какого цвета где ставят
randomsimplenumber
Просто поставить машину на полчаса, пока инспектор окучивает другой квартал.
Byteler
И сидя в ней с бурритос в зубах судорожно пытаться определить, куда ее можно успеть переставить...
randomsimplenumber
Приехал на полчаса. Поставил машину под знаком. Решил свой вопрос. Уехал без штрафа.
Groh
Интересно, если так можно, то почему там парковка запрещена?
Может быть, это кому-то выгодно?
randomsimplenumber
Ну, как запрещена.. знак парковаться не мешает. Мешает призрак инспектора, который где то рядом. А если точно знаешь, что инспектор здесь уже всех обилетил, и вернется на 2 круг не скоро..
Gutt
Она чаще всего не запрещена, но требует оплаты. Штрафуют за стоянку без оплаты.
Byteler
Приехал на полчаса. Поставил машину под знаком. Сел в такси и поехал куда надо -- ну очень быстро. Решил свой вопрос. И быстро обратно. Очень быстро - Фриско большой город! Потратил в разы больше, чем стоимость стоянки. Уехал без штрафа. Кукиш им всем, амерам!
Можно, конечно, несколько часов подождать, пока выпадет нужная стоянка.
Или дней. Если такой упрямый. Или нуб, пишущий 50 комментов в день - самое время на стоянке их пописать.
randomsimplenumber
Странный обычай ставить машину с нарушением и дальше ехать на такси. За такое нужно штрафовать;)
Byteler
Не понятно? Вероятность того, что нужная вам стоянка вдруг окажется в нужный вам момент на полчаса вне досягаемости инспектора настолько мала, что оправдать ваши усилия в глазах общественности может только объяснение, что вам просто срочно нужно попасть на крышу в Батлере.
randomsimplenumber
Уверен что в ближайший час инспектора не будет- паркуешься под знаком. Не уверен - едешь на платную ппарковку. Так можно в вашем Сан-Франциско?
shlmzl
Я так понимаю, инспектор не окучивает квартал за кварталом. Инспектор окучивает наиболее приоритетного нарушителя, к примеру ближайшего при прочих равных. Там тысячи камер установлены, особенно в проблемных местах. Наводку, я так понимаю, он (не обязательно все) получает автоматически. Все могут видеть, все могут фиксировать если захотят. Играться с ними на их поле - такое себе развлечение.
randomsimplenumber
Конечно. Вопрос был - как утечку можно использовать. Например, вот так.
DrGluck07
Насколько важной является информация, что такая-то машина точно стояла в определенной точке в точное время? Ну даже не знаю, тут можно много кейсов придумать, вплоть до "в это время она не стояла возле дома, значит хозяина нет, можно грабить". Причём это точное время могло быть минуту назад.
MisterClever
Добрый день, вы владелец такой-то машины и были там-то в такое то время? Мы ошибочно выписали вам штраф, и хотим досудебно урегулировать вопрос. На вашу карту отравлена сумма в размере: "сумма штрафа умноженная на три", для получения введите код из СМС
randomsimplenumber
Или оплатите со скидкой, вот реквизиты
muxa_ru
Любая сволочь может узнать куда Вы ездите.
Gutt
Я думаю, что это мунициальная система.