История кражи переписки и контактов в iOS-приложениях mail.ru и myMail через XSS
Эта статья носит исключительно образовательный характер. Автор не несет ответственности за любые последствия ее прочтения.
Данная статья является переводом и ведется со слов автора. Оригинал тут.
В июне 2020 года я обнаружил Stored XSS, которая позволяет злоумышленнику украсть сообщения электронной почты и контакты пользователей в приложениях mail.ru и myMail на iOS (версия 12.2.1). Mail.ru - одна из крупнейших организаций в России, у которой зарегистрировано более 100 миллионов активных аккаунтов.
История ошибки
Ошибка возникает из-за отсутствия проверки в файле изображения SVG. Пример SVG XSS:
<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg"> <polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/> <script type="text/javascript"> alert("XSS"); </script> </svg>
Когда пользователь просматривает файл SVG выше, появляется всплывающее окно XSS, как показано ниже.
Поиск ценных файлов
Я ненавижу сообщать об ошибке, не показывая последствий уязвимости, к тому же XSS во вложении, скорее всего, закроют как информативную. Итак, я начал копаться в файловой структуре приложения.
Во-первых, я просто подумал о дампе /etc/passwd
как PoC, но в iPhone /etc/passwd
- это просто фича песочницы, поэтому мне нужно получить что-то еще. К счастью, у меня есть iPhone 5 с джейлбрейком, поэтому я могу просматривать все файлы и папки на iPhone. Данные приложения в файловой структуре iOS хранятся в /private/var/mobile/Containers/Shared/AppGroup/
после чего следует случайная папка, как показано ниже.
Я спросил себя, как узнать, в какой папке находятся данные приложения mail.ru. Имя папок не будет одинаковым на каждом iPhone (сама папка и некоторые файлы внутри этой папки останутся прежними), и я понял, что мне нужно получить путь к папке через XSS. Итак, я использовал alert(location.href);
в файле SVG и отправил себе письмо, после чего получил расположение папки.
Затем я перехожу к этой папке и вижу несколько файлов базы данных SQLite + несколько папок.
После загрузки и просмотра каждого файла в этой папке я понял, что файл mail_cache.sq3 содержит переписку по электронной почте, контакты, информацию об оплате и почти все остальное.
Итак, я решил получить эту базу данных SQLite на свой сервер. Если я смогу получить её, этого будет достаточно, чтобы показать влияние данной XSS уязвимости, и я могу сообщить о ней с помощью хорошего PoC на mail.ru. Я начинаю писать свой PoC-скрипт, просматривая созданный SVG-файл на своем iPhone (у которого нет джейлбрейка), и да, я могу проверить, существование файла через вывод содержимого во всплывающем окне.
Устранение ошибок и написание работающего PoC
Итак, я начал писать PoC, чтобы загрузить всю базу данных SQLite на свой сервер, но у меня было много ошибок, и на мой сервер отправлялись только небольшие части файла. После исправления ошибок в течение 4 часов, я могу загрузить весь файл базы данных SQLite на свой сервер с помощью файла SVG, представленного ниже.
Скрипт сначала определяет расположение папки mail.ru, читает папку mail_cache.sq3, а затем загружает весь файл на сервер, контролируемый злоумышленником. Затем я отправляю этот SVG-файл пользователю, который использует приложения mail.ru и my.com. Если пользователь просмотрит созданный злоумышленником файл SVG, его база данных SQLite (содержащая сообщения электронной почты, контакты и т. д.) будет отправлена злоумышленнику, и злоумышленник сможет просматривать сообщения электронной почты, контакты и т. д., как показано ниже.
Заключение
Я быстро сообщил об этой уязвимости в Mail.ru и получил 1000 долларов в качестве награды. Спасибо за вознаграждение :).
Менеджер программы сказал, что это не уязвимость Stored XSS, а ошибка - Cross application scripting (CAS). Насколько я понимаю, уязвимость, которая может выполнять JavaScript в iOS, называется XSS. Может я ошибся или ..
На этом все. Спасибо за просмотр.
Подпишись на канал - https://t.me/slivmens