Вчера в дайджесте я
упоминал про обнаруженную 19-летнюю уязвимость в WinRAR. Сегодня пришло письмо от читателя, который разобрался чуть более детально в информации об уязвимости, и, мне кажется, это может быть интересно другим читателям ресурса.
-------
Если вам интересно: я тестировал эту уязвимость сразу, как только услышал о ней. Я внимательно прочитал оригинальную статью, и отделил зёрна от плевел:
1) Несмотря на то, что методом атаки на архиватор был fuzzing, в сущности уязвимость представляет из себя просто распаковку файла по абсолютному пути. Это не связано с memory-related багами архиватора (то есть это НЕ переполнение буфера памяти, НЕ исполнение произвольного кода в контекста процесса), которые обычно обнаруживаются фаззингом.
2) Для фактической эксплуатации уязвимости, нужно создать ACE архив стандартным способом, а потом просто бинарно изменить в нём прописанный путь к файлу. Чтобы после этого архив воспринимался как корректный, нужно пересчитать контрольную CRC сумму в заголовках. Автор статьи не показал прямой код пересчёта, но следуя комментариям в исходниках Python-библиотеки по ссылке – я разобрался и сам, подбором найдя подходящую инициализацию crc32, которая генерирует валидные хеши. В итоге, моя собственная программа для восстановления контрольной суммы оказалась весьма тривиальной.
3) Сущность атаки как раз в выборе пути к payload-файлу в архиве. На самом деле я бы с большой натяжкой стал называть эту уязвимость RCE (то есть «удалённое выполнение кода»), потому что всё что произойдёт при успешной атаке – WinRar распакует файл не в указанную папку, а по заранее заданному в архиве абсолютному пути. И _если_ этот файл попадёт в Автозагрузку или ещё куда-то, где сможет быть запущен системой – то тогда, и только тогда это приведёт к выполнению произвольного кода.
4) Автор статьи предлагает также способ с «относительным» путём, начинающимся от Рабочего стола или Домашней папки пользователя, чтобы было проще попасть в директорию локальной автозагрузки. Но это сработает, _только_ если архив будет распакован через контекстное меню, да и вообще – начальная «текущая директория» WinRar может отличаться на разных системах и версиях.
5) Чтобы гарантированно попасть в нужную папку, автор статьи предлагает поместить в архив сразу несколько файлов, целящихся на разные локации, чуть ли не до брутфорса. Но во-первых, совершенно «общий» payload в таком случае будет чрезмерно велик (например, Windows не всегда установлена на диск C:\; полный путь к автозагрузке для XP и для Win7 будет абсолютно разным; ещё можно пытаться угадать имя пользователя – «User/Administrator/Администратор/» и дополнительно бить по «All Users»), потому что по каждому пути придётся поместить новую копию вредоносного файла. А во-вторых, распаковка такого архива буквально заспамит систему (например, создаст вам кучу лишних папок наподобие «\Documents and Settings\» где попало), и с куда большей вероятностью подобная атака не останется незамеченной.
6) Да, в архив кроме вируса как такового, можно поместить и «нормальные» файлы для отвода глаз, которые распакуются куда ожидает жертва. Но если архив будет ОТКРЫТ, а не распакован – то WinRar счастливо покажет в списке файлов архива очень подозрительные вхождения наподобие «C:», «C:\», «Documents and Settings», «WINDOWS», «..\», и так далее. И жертва может сразу же заподозрить неладное. Причём при «открытии» архива без его полной распаковки – вредоносный файл так никуда и не вырвется.