Про уязвимость в WinRAR

Вчера в дайджесте я упоминал про обнаруженную 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», «..\», и так далее. И жертва может сразу же заподозрить неладное. Причём при «открытии» архива без его полной распаковки – вредоносный файл так никуда и не вырвется.
7) Мои собственные эксперименты показали, что на разных версиях WinRar, ошибку обработки пути нужно обходить по-разному: в старых версиях достаточно просто прописать абсолютный путь («C:\Users\…»), а более новых версиях – как в инструкции статьи, «C:\C:\Users\…» (количество и расположение \ тоже может варьироваться). Поэтому, для общей атаки нужно предусмотреть и эти различия. Причём если WinRar получит неподходящий ему путь – информация об этом обязательно появится на экране («Диагностические сообщения»), где будет палиться ПОЛНЫЙ путь, по которому попыталась пройти атака. Тем не менее, распаковка не прерывается, и вирус всё ещё может попасть в цель (но однозначно вызовет подозрения).
8) Можно перезаписать любой файл, если попасть в путь к нему, например C:\WINDOWS\explorer.exe (плюс, его же копию в system32\dllcache). Но для системных файлов это сработает лишь когда у пользователя есть права на запись в системные папки (то есть, он под Администратором). Win>=7 скорее всего заблокирует доступ через UAC (если не сам WinRar почему-то запущен с повышенными привилегиями), а вот для XP успешность более вероятна (хотя те, кто ежедневно на XP с админ-правами – явно не «простые пользователи», и на распаковку подставного архива так просто не попадутся).
9) Попытка прямой записи в Автозагрузку или любую системную папку – может вызвать предупреждение антивируса или какой-либо другой программы, обеспечивающей безопасность системы (например, AnVir Task Manager). При этом главная фишка этого метода – скрытность – неизбежно нарушается. А тех, у кого нет подобных систем защиты – можно проще прошибить через «.rar.exe» а-ля троянский self-extracting и без всяких там RCE. Кстати, если мы распакуем чистейший вирус – то антивирус его поймает сразу же, как тот распакуется в целевую папку (а худшее, что может быть – перезапись пустышками каких-то важных программ или документов, но опять же – надо точно знать путь).
10) Адекватнее всего атака производится на «частную» систему, которая заранее изучена: известна точная версия WinRar в ней, точная Windows и её системная локаль (потому что успехов вам распаковывать в папку «\Startup\», если на самом деле она зовётся «\Автозагрузка\», и это не desktop.ini, а реальный путь). Известно, каким правами обладает учётная запись пользователя, какой установлен антивирус, и вообще у нас есть соображения, под что именно будем маскировать распакующийся троян. В противном случае даже частично слепая атака в лучшем для злоумышленника случае просто не приведёт к успеху, а в худшем – окажется немедленно раскрыта жертвой.

Мой вердикт: уязвимость не затронет «простых пользователей», под которых специально не затачивается конкретная атака. Напороться на удачно подошедший именно к вашей системе подменённый архив (и не заметить его) – куда менее вероятно, чем случайно подцепить вирус попроще (какой-нибудь там «.scr» с иконкой папки) по неосторожности.
Все новостные ленты раздувают это как «баг 19-летней давности, затрагивающий миллионы людей», но эффективно использовать его просто невозможно (например, в отличие от уязвимости в windows, которую использовал WannaCry; а она ведь была там тоже очень давно).

Более того, для защиты вам даже не обязательно обновлять WinRar: просто найдите и переименуйте все файлы «UNACEV2.DLL» на компьютере (эту библиотеку использует не только WinRar, но и, например, Total Commander), тогда никакие .ace архивы у вас не смогут распаковаться (тем более что этот формат, на мой взгляд, всё равно совершенно непопулярный в наши дни)
—————


Discover more from alexmak.net

Subscribe to get the latest posts sent to your email.

Leave a Reply