Получаем список пассажиров рейсов крупнейшего авиаперевозчика Украины
Информационная безопасность#ПолныйПЭ
В данной статье речь пойдёт о том, как я обнаружил уязвимость, которая позволяла получить список пассажиров рейсов Международных Авиалиний Украины — самого крупного авиаперевозчика Украины, а также об отношении самой компании к факту наличия такой информации в публичном доступе.
Больше месяца назад я начал готовиться к отпуску и как раз пришло время бронировать авиабилеты. Так я оказался на сайте авиакомпании МАУ. В процессе выбора мест в самолёте, страница, которая должна была отображать схему мест, никак не хотела загружаться.
Я решил открыть в Google Chrome инструмент разработчика, чтобы попытаться понять, в чём проблема. Изучив запросы к серверу, я увидел, что данные о доступных местах сервером возвращаются.
Опробовав несколько разных браузеров, я так и не решил проблему, однако заметил, что запрос, который возвращает список доступных мест, выполнялся во всех браузерах успешно, не смотря на то, что сессионные куки были доступны только в Google Chrome.
Запрос выглядел следующим образом:
https://bookapi.flyuia.com/ancillary/seatmap?pnr=XXXXXX¤cy=USD&flyuiacountrycode=uk&flyuialanguagecode=ru&locale=RU
где XXXXXX — PNR или, так называемый, код бронирования.
Ответ же сервера имел следующий вид во всех браузерах:
[ { "paxDetails" : { "uniqueId" : "2", "firstName" : "IVANOV", "title" : "Г-жа (Ms.)", "lastName" : "IVAN", "paxType" : "Adult", "cartPaxId" : "b1da2ebf-4525-35bd-afc1-b1f448132ad3" }, "segmentDetails" : [ { "company" : "PS", "bookingClass" : "B", "flightNumber" : "1234", "departureAirport" : "KBP", "arrivalAirport" : "JFK", "departureDateTime" : "2018-02-01T00:05", "operatingAirline" : "PS" } ], "segmentId" : "1", "isAvailableForCheckIn" : true, "seat_rows" : [ { "seats" : [ { "id" : "aab4ca38-2c28-1f13-359d-4ad264d53a0e_1e80aae3-a68b-44de-ae14-aff839563612", "occupation" : "AVAILABLE", "letter" : "A", "rowNumber" : 4, "seatCharacteristics" : [ "W", "CH", "EK", "H", "for_infant" ], "price" : { "amount" : "16.00", "currency" : "USD" }, "class" : "ECONOMY", "seat_type" : "SEAT", "ticket_value" : "FD3A" },...]
А это означало то, что информация о пассажирах была доступна любому пользователю с любого устройства лишь по PNR коду. Следовательно, зная номер бронирования, любой пользователь мог получить такие данные о пассажире, как фамилия, имя, взрослый это или ребёнок, номер рейса, аэропорты отбытия и прибытия, время отбытия.
Мне стало интересно, какие ещё «сюрпризы» хранит данный сервис.
Продолжив оформление билетов, я выбрал пункт заказа места для багажа.
Автор : Vegan410