Удивительно, что такие методы вообще работают в 2025-м
Уязвимость нашлась случайно — исследователь решил изменить собственный билет в Avelo Airlines и заметил, что сайт отправляет странный запрос к API.
Он попробовал подставить в URL свой шестизначный код бронирования, и сервер выдал полные данные рейса. А затем он подставил чужой код, оставив свою сессию — и снова получил доступ.
Оказалось, что система не проверяет фамилию пассажира и не ограничивает частоту запросов. Любой, у кого есть валидный cookie, мог перебором подставлять шестизначные PNR-коды.
Почему перебор был реальной угрозой
Код состоит из 6 символов (A–Z, 0–9), то есть ~2,18 млрд комбинаций. Без rate limiting такой диапазон перебирается быстро:
- при скорости в 100 000 запросов в секунду (такое возможно на базе маленького кластера за ~$500) на полный перебор уйдет около 6 часов;
- первые валидные брони начинают «падать» уже через несколько секунд.
Более того, API-ручка отдавала данные любого пассажира — авторизация была привязана к сессии, а не к самому бронированию.
Что именно утекало
Ответ сервера содержал полный объект бронирования, включая:
- ФИО, дату рождения, контактные данные;
- Known Traveler Number, паспортные данные;
- маршрут и статус перелета;
- частично скрытые данные карты (последние цифры + срок);
- биллинговые ZIP-коды, ваучеры и даже элементы TrackData.
Фактически это был беспрепятственный доступ ко всей истории перелетов миллионов людей.
Патч и раскрытие
Исследователь сообщил о проблеме 15 октября. Команда Avelo ответила в течение суток, признала критичность уязвимости и закрыла ее 13 ноября. Автор подтвердил исправления и опубликовал исследование.
