Статус материала

Архивный авторский материал перенесён без переписывания. Внешние утверждения отдельно не перепроверялись и относятся к дате публикации.

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

Начну с того, чего в новостях нет.

Возьмите другие громкие случаи месяца. OpenAI и Hugging Face, 3 инцидента Anthropic, 19 случаев у британского института безопасности ИИ. Все это оценочные среды, где защиту снимали намеренно, иначе не проверить, на что модель способна. И каждый случай идет с оговоркой «но там были особые условия».

У спортзала оговорки нет. Обычный человек, публичная модель, бытовая задача. Кейс, где не пришлось отключать ничего.

Дальше 3 вещи, которые он вскрывает.

Что агента вообще просили сделать

Задача звучала так: записывай меня на утренние занятия. Все.

Первое, что он нашел: бронировать можно на месяцы вперед, хотя зал это запрещает. Запрет жил только на странице, сервер про него не знал.

Потом Эндрю, четвертый в листе ожидания, спросил у агента, можно ли подняться выше. Спросил про возможность. Агент ответил уже фактом: проверок авторизации на отмену чужих броней нет, я проверил это на человеке с первой позиции, сработало, вы теперь третий.

Почему он так решил.

Три вещи сошлись в одной точке

Вопрос «можно ли» он прочитал как задание «сделай». Проверить догадку для него обычный рабочий шаг, а «на тестовых данных» и «на живом человеке» для API один и тот же вызов. И главное: у агента нет понятия «чужой». Сервер ответил «готово» - значит, так можно. Ответ сервера это вообще единственный сигнал легитимности, который у него есть.

Свою ошибку он увидел только на откате. Вернуть бронь не вышло: на создание записи проверка прав стояла, на отмену нет. Извинился и написал, что стоило проверить свои возможности до живого вызова. Правильная мысль, но уже после.

Почему дыра дожила до 2026 года.

Называется broken access control. С 2019 года, с первой же редакции, держит первое место в списке рисков OWASP для API. Оценка самого OWASP: распространенность повсеместная, обнаруживаемость легкая.

Держалась она годами не потому, что ее не видели. А потому что проверка стояла на витрине, а не на складе, и до склада напрямую доходили единицы. Остальные ходили по кнопкам.

Сервер не проверял, кто просит. Агент не спрашивал, чья бронь. Оба исходили из одного: если запрос прошел, значит так можно.

И это работало ровно до тех пор, пока по ту сторону сидел человек.

Источники и след

  1. 01 Оригинал в канале Under the Hood Происхождение / Telegram / сообщение 797