UX được thiết kế kém như thế nào trong bài kiểm tra coronavirus gần như khiến chúng tôi tự cô lập, nhưng một lỗ hổng bảo mật đã cứu chúng tôi

UX được thiết kế kém như thế nào trong bài kiểm tra coronavirus gần như khiến chúng tôi tự cô lập, nhưng một lỗ hổng bảo mật đã cứu chúng tôi
Это я, пишу скрипт по перебору параметров для POST запроса на gov.tr, сидя перед границей в Хорватию.

Làm thế nào nó tất cả bắt đầu

Мы с моей женой путешествуем по миру и работаем удаленно. Недавно переезжали из Турции в Хорватию (самая оптимальная точка, чтобы заехать в Европу). Чтобы не сесть на карантин в Хорватии, нужно иметь справку об отрицательном анализе на ковид, сделанном не позже 48 часов до въезда.

Выяснили, что относительно выгодно (2500 рублей) и быстро (всем результаты приходят в течение 5 часов) делают тест в аэропорту Стамбула, из которого мы как раз и вылетали.

В аэропорт приехали за 7 часов до вылета, нашли пункт сдачи теста. Делают все сумбурно: подходишь, даешь паспорт, платишь, получаешь 2 наклейки с barcode, идешь в мобильную лабораторию, там у тебя забирают одну из этих наклеек для идентификации твоего анализа. После выходишь, и тебе говорят: заходи на этот сайт: enabiz.gov.tr/PcrTestSonuc, вбивай свой баркод и последние 4 цифры паспорта, через какое-то время будет результат.

UX được thiết kế kém như thế nào trong bài kiểm tra coronavirus gần như khiến chúng tôi tự cô lập, nhưng một lỗ hổng bảo mật đã cứu chúng tôi

Но если вбивать данные сразу после сдачи анализа, страница выдает ошибку.

UX được thiết kế kém như thế nào trong bài kiểm tra coronavirus gần như khiến chúng tôi tự cô lập, nhưng một lỗ hổng bảo mật đã cứu chúng tôi
UX được thiết kế kém như thế nào trong bài kiểm tra coronavirus gần như khiến chúng tôi tự cô lập, nhưng một lỗ hổng bảo mật đã cứu chúng tôi

Уже тогда в мою голову закрались мысли о “прекрасном” UX, в котором при любой ошибке оператора, который вбивал паспортные данные, нет никакого способа узнать свой результат.

Trước khi khởi hành

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

UX được thiết kế kém như thế nào trong bài kiểm tra coronavirus gần như khiến chúng tôi tự cô lập, nhưng một lỗ hổng bảo mật đã cứu chúng tôi
UX được thiết kế kém như thế nào trong bài kiểm tra coronavirus gần như khiến chúng tôi tự cô lập, nhưng một lỗ hổng bảo mật đã cứu chúng tôi

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

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

Стоило мне зайти в самолет, как по моему коду появилась информация, что у меня тест отрицательный.

UX được thiết kế kém như thế nào trong bài kiểm tra coronavirus gần như khiến chúng tôi tự cô lập, nhưng một lỗ hổng bảo mật đã cứu chúng tôi

По прилету

И вот тут начинается веселье! Как только мы прилетели и подключились к местному WiFi, выяснилось, что запись моей жены так и не находится в базе. А на самой границе к документам подходили очень внимательно: пограничник брал тест на коронавирус и уносил в отдельную комнату на проверку его реальности. Мы решили, что расскажем нашу трустори как есть и узнаем, какие у нас есть варианты.

Пока мы стояли в очереди, я решил проверить на правильных (своих) и неправильных данных, как реагирует страница валидации.

Выяснилось, что она отправляет пост запрос на www.enabiz.gov.tr/PcrTestSonuc/GetPcrRaporVerifyWithKimlik, со следующими параметрами:

barkodNo=XX
kimlikNo=YY
kimlikTipi=2
đâu barkodNo – номер баркода, kimlikNo – номер паспорта, kimlikTipi – фиĸсированный параметр, равный 2 (если заполнять тольĸо первые два поля). Никаких токенов не было видно. На правильные параметры (мои данные) запрос отдавал 1, а на неправильные – 0.

Из постмана я попробовал перебрать 40 комбинаций (вдруг ошибка в один символ), но ничего не вышло.

В этот момент мы подошли к пограничнику, он выслушал нашу историю и предложил карантин. Но нам явно не хотелось сидеть 14 дней в квартире, поэтому мы попросились немного подождать в транзитной зоне, чтобы за пару часов попробовать разобраться с проблемой. Пограничник вошел в наше положение, сходил узнать, можно ли нам посидеть в белой зоне, и, с согласия руководителя, сказал: «okay, just couple of hours».

Я начал искать телефон тех, ĸто делал тест на ĸорону, и параллельно решил протестировать безумную гипотезу: если у этой системы такой ужасный UX, то и система безопасности не должна быть хорошей, хотя и домен gov.tr.

В итоге, сидя на звонках, я написал небольшой скрипт, который перебирал все числа от 0000 до 9999 в поле kimlikNo. barkodNo у нас был на наклейке, поэтому он не мог быть неверным.

Представляете мое удивление, когда даже после 500 непрерывных запросов я не был забанен, а скрипт продолжал бегать со скоростью 20 запросов в секунду с WiFi аэропорта.

Звонки большого успеха не дали: меня перенаправляли от одного департамента ĸ другому. Но очень скоро скрипт выдал заветное значение 6505, что было совсем не похоже на реальные 4 цифры паспорта.

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

UX được thiết kế kém như thế nào trong bài kiểm tra coronavirus gần như khiến chúng tôi tự cô lập, nhưng một lỗ hổng bảo mật đã cứu chúng tôi

Самое интересное, что баркоды тоже не являются случайными, а идут почти один за одним. Тем самым, в теории, я бы мог найти контакты, кому достался номер паспорта моей жены, да и в целом плавно выкачать приватные данные других людей.

Но было 9 утра и ночь без сна, я опаздывал на онлайн встречу и был рад, что нас пропустили без карантина, поэтому просто начал свой путь по Европе.

Nguồn: www.habr.com

Thêm một lời nhận xét