Мой первый взлом
Недавно познакомился с фаундером одного мобильного приложения.
Из соображений безопасности и этики, не буду называть ни его, ни приложение, ни какие-либо конкретные данные.
Так вот, оказалось, что он читает мой канал.
Почему-то он решил, что если я пишу про уязвимости, — я и сам умею их искать)
И предложил мне поискать их в его приложении.
А я решил попробовать это сделать - вдруг моих базовых знаний о том, как это работает + кучи разобранных примеров хватит, чтобы что-то найти?
Что важно знать о приложении: в нем есть чат с AI.
Спустя 5 часов я нашел критическую уязвимость в приложении, которая позволяет:
- получить персональные данные всех пользователей
- отправлять любые сообщения не только в чат с AI, но и другим пользователями
Как я это сделал?
1. Для начала, я поставил Charles Proxy - приложение, которое позволяет создать локальный прокси-сервер и пропускать трафик с любого устройства в локальной сети сквозь него.
Помимо этого, у Charles Proxy есть собственный SSL-сертификат - если установить его на Iphone (или любое другое устройство, которое мы хотим подслушать), - можно расшифровать подслушанный HTTPS трафик.
Хотя оказалось, что это было не нужно)
2. Включил Charles Proxy, настроил проксирование трафика с iphone, и пошел бродить по приложению.
Оказалось, что часть запросов на backend-сервер приложения отправляется просто по HTTP, - то есть, трафик не зашифрован, и видно настоящий ip-адрес сервера. Уже это — очень плохой знак. Не делайте так)
3. Я скопировал несколько сырых запросов и запустил Burp Suite - помимо кучи других фичей, он позволяет воспроизводить запросы с разными переменными.
4. Дальше я открыл GPT и попросил его подсказать мне, что можно сделать. Сам я бы ковырялся в 5 раз дольше.
GPT посоветовал мне попробовать видоизменить запросы, внося изменения в разные поля, - например, попробовать передавать XSS-текст в теле запроса.
Все получилось!
Я обнаружил серьезную проблему: некоторые поля вообще никак не валидируются и не “карантинятся” - к примеру, я могу отправить ссылку на скачивание .exe файла любого приложения - и она без проблем отправится и запишется в соответствующее поле.
Но все это было +- безвредно: за несколько часов я смог вывести уведомления, ссылки и сырой XSS в своем инстансе приложения (в моем профиле), но на этом все. SQL и JSON инъекции, которые я также пробовал сделать, не дали никаких результатов.
5. Тогда я решил еще раз посмотреть на все запросы, которые отправляло приложение, и повнимательнее изучить ответы.
Один эндпоинт показался мне интересным:
POST /api/v1/chat/ainame/ - эндпоинт, на который отправляется сообщение пользователя в AI-чат в приложении.
В ответе на запрос я с удивлением обнаружил поля user_from и user_to с такими данными (оставил только самые интересные):
"user_from":{
"id”:1234, // видимо, это мой id пользователя
"name":"Tim",
"email”:”тут был мой емейл, который я использовал при регистрации!”,
"registered_at”:”и моя дата регистрации”,}
"user_to":{"id":0},
Вот и первая существенная уязвимость: мои персональные данные (почта) передаются в нешифрованном HTTP-сообщении, которое можно подслушать, - например, включив Wireshark или tcpdump, находясь в моей WiFi сети.
Продолжение в следующем посте →
Недавно познакомился с фаундером одного мобильного приложения.
Из соображений безопасности и этики, не буду называть ни его, ни приложение, ни какие-либо конкретные данные.
Так вот, оказалось, что он читает мой канал.
Почему-то он решил, что если я пишу про уязвимости, — я и сам умею их искать)
И предложил мне поискать их в его приложении.
А я решил попробовать это сделать - вдруг моих базовых знаний о том, как это работает + кучи разобранных примеров хватит, чтобы что-то найти?
Что важно знать о приложении: в нем есть чат с AI.
Спустя 5 часов я нашел критическую уязвимость в приложении, которая позволяет:
- получить персональные данные всех пользователей
- отправлять любые сообщения не только в чат с AI, но и другим пользователями
Как я это сделал?
1. Для начала, я поставил Charles Proxy - приложение, которое позволяет создать локальный прокси-сервер и пропускать трафик с любого устройства в локальной сети сквозь него.
Помимо этого, у Charles Proxy есть собственный SSL-сертификат - если установить его на Iphone (или любое другое устройство, которое мы хотим подслушать), - можно расшифровать подслушанный HTTPS трафик.
Хотя оказалось, что это было не нужно)
2. Включил Charles Proxy, настроил проксирование трафика с iphone, и пошел бродить по приложению.
Оказалось, что часть запросов на backend-сервер приложения отправляется просто по HTTP, - то есть, трафик не зашифрован, и видно настоящий ip-адрес сервера. Уже это — очень плохой знак. Не делайте так)
3. Я скопировал несколько сырых запросов и запустил Burp Suite - помимо кучи других фичей, он позволяет воспроизводить запросы с разными переменными.
4. Дальше я открыл GPT и попросил его подсказать мне, что можно сделать. Сам я бы ковырялся в 5 раз дольше.
GPT посоветовал мне попробовать видоизменить запросы, внося изменения в разные поля, - например, попробовать передавать XSS-текст в теле запроса.
Все получилось!
Я обнаружил серьезную проблему: некоторые поля вообще никак не валидируются и не “карантинятся” - к примеру, я могу отправить ссылку на скачивание .exe файла любого приложения - и она без проблем отправится и запишется в соответствующее поле.
Но все это было +- безвредно: за несколько часов я смог вывести уведомления, ссылки и сырой XSS в своем инстансе приложения (в моем профиле), но на этом все. SQL и JSON инъекции, которые я также пробовал сделать, не дали никаких результатов.
5. Тогда я решил еще раз посмотреть на все запросы, которые отправляло приложение, и повнимательнее изучить ответы.
Один эндпоинт показался мне интересным:
POST /api/v1/chat/ainame/ - эндпоинт, на который отправляется сообщение пользователя в AI-чат в приложении.
В ответе на запрос я с удивлением обнаружил поля user_from и user_to с такими данными (оставил только самые интересные):
"user_from":{
"id”:1234, // видимо, это мой id пользователя
"name":"Tim",
"email”:”тут был мой емейл, который я использовал при регистрации!”,
"registered_at”:”и моя дата регистрации”,}
"user_to":{"id":0},
Вот и первая существенная уязвимость: мои персональные данные (почта) передаются в нешифрованном HTTP-сообщении, которое можно подслушать, - например, включив Wireshark или tcpdump, находясь в моей WiFi сети.
Продолжение в следующем посте →