Первая брешь — Path Traversal в BlobContentProvider. Android-декодер в SDK слишком доверчиво обращался с последовательностями вида %2F и ../. Достаточно было подменить путь в запросе, чтобы приложение вместо ожидаемого объекта заглянуло в чужой «сейф». Пример, который использовали исследователи, выглядел почти невинно, но на деле позволял прочитать org.thoughtcrime.securesms_preferences.xml прямо из каталога shared_prefs.
Вторая — недосмотр в ShareActivity. Signal умеет принимать файлы через интернет от других приложений, и в случае с одиночным вложением проверка жёсткая: ничего из /data/ не пропустит. Но если отправить несколько файлов, то сторож заснёт. Один файл — настоящий, для отвода глаз, другой — маскированный под .png, но с референсом на конфигурационный XML в системном каталоге. В итоге мессенджер считал его изображением и открывал доступ к конфиденциальным данным.
Чтобы превратить эти находки в рабочую атаку, Ostorlab объединила несколько трюков: обход FileUriExposedException через
file://system/../data/, MIME-маскировку с подложными расширениями, предсказание дескрипторов временных файлов и использование симлинков /proc/self/fd/... для доступа к реальным объектам.Добычей стали имена из ярлыков контактов, настройки приложения, Firebase-токены и метаданные конфигурации. Но вот база сообщений осталась закрыта: SQLCipher, Android Keystore и аппаратная защита ключей отрезали все пути. Пароли резервных копий и сами ключи шифрования злоумышленнику не достались.
В этом — главный урок. Баги есть везде, но архитектура с несколькими слоями защиты делает так, что даже успешная эксплуатация одного уровня не рушит всю оборону. Здесь сработали шифрование базы, защита ключей на уровне ОС и железа, плюс изоляция критичных данных.
Реакция Signal стала отдельной иллюстрацией правильного responsible disclosure: через три часа после отчёта пришло подтверждение, спустя несколько дней — готовый патч, а версия 7.44.2 закрыла обе уязвимости. Google же на вопрос про исправление в SDK лишь ответил, что «это ожидаемое поведение» и обратная совместимость важнее.
Вывод для пользователей прост: продолжать использовать Signal. Баги нашли и устранили, а сама история показала, что многоуровневая защита — не маркетинговая фраза, а реально работающий механизм, который не даёт одним уязвимостям обрушить весь замок.
P/S Автору будет приятно если вы накидаете 🔥
Hacker's TOYS
