Объявляем неделю доисторических багов. Уязвимость в архиваторе WinRAR, обнаруженную и закрытую в конце января, подробно описали специалисты компании Check Point Software (новость, оригинальное исследование). В худшем случае брешь позволяет распаковать вредоносный файл в произвольное место на жестком диске, например в директорию автозапуска Windows.
Эта уязвимость заставляет задуматься по поводу использования труднопроверяемых сторонних библиотек в своем софте, но не только. Сегодня мы кратко расскажем о самой проблеме, о решении разработчиков WinRAR отказаться от библиотеки для распаковки архивов в формате ACE, а также поднимем тему обновления WinRAR на компьютерах пользователей. Забегая вперед: хотя новость и вызвала серьезный резонанс, это скорее история с хеппи-эндом. А вот на класс уязвимостей, связанных с обработкой любых прилетающих на ваш компьютер архивов, стоит обратить особое внимание.
В оригинальном отчете перед демонстрацией проблемы приводится много (интересных) деталей, но давайте сразу посмотрим на результат.
Подготовленный архив сохранен на рабочем столе, пользователь пробует распаковать его туда же, но вместо этого исполняемый файл записывается в директорию автозапуска. Как так вышло? Исследователи использовали технологию фаззинга, а именно — пакет WinAFL, поддерживаемый командой Google Project Zero и являющийся Windows-версией программы american fuzzy loop. Как и другие подобные инструменты, WinAFL позволяет исследовать защищенность (или стабильность) программного обеспечения, передавая приложению случайные (или не совсем) данные и сохраняя реакцию. Фаззеры можно считать своего рода «волшебной палочкой» исследователя по безопасности. Они помогают обнаруживать разнообразные сбои программы в тех местах, где их не должно быть.
Впрочем, отчет компании Check Point показывает, что не все так просто. Исследование WinRAR с помощью WinAFL помогло выявить несколько неожиданных падений приложения и вывело исследователей на библиотеку, обрабатывающую архивы в формате ACE — проприетарном архивном стандарте. Эта библиотека (unacev2.dll) последний раз обновлялась в 2006 году и не имела стандартных механизмов защиты (таких как ASLR или DEP). При этом она присутствовала во всех версиях WinRAR за последние 19 лет и, как позднее выяснилось, все это время была уязвима. На момент обнаружения бага у разработчиков WinRAR не было доступа к ее исходному коду. ACE вообще в свое время был коммерческим архиватором, библиотека распаковки была бесплатная, а вот легально создавать архивы в этом формате можно было только с помощью фирменной утилиты WinACE (обновлялась вплоть до 2007 года, сайт программы существовал до 2017 года; а теперь это явно заброшенный софт).
Найти простую уязвимость типа Path Traversal, когда архиватор распаковывает файл в произвольную директорию, не получилось, пришлось снова натравить утилиту для фаззинга, но в этот раз после изучения особенностей формата как с использованием оригинальной программы WinACE, так и с помощью свободно распространяемого кода для распаковки на Питоне. В очередном походе за рандомными глюками исследователи обнаружили файл, сохраненный вообще не туда, куда WinAFL должен был сохранять результат запуска библиотеки.
Дело в том, что архиватор ACE позволяет сохранять полный путь к запаковываемому файлу. В нормальной ситуации этот путь добавляется к выбранному при разархивировании пути распаковки. В ходе фаззинга получилось, что какой-то набор данных позволил сделать путь абсолютным, то есть распаковать файл не куда указал пользователь, а куда угодно, а это уже не очень хорошо. Дальше вроде бы просто — нужно применить тот же самый трюк при работе не с библиотекой напрямую, а с самим WinRAR, правильно? Не совсем: уязвимость не воспроизводилась. Не буду пересказывать всю историю поиска правильной комбинации параметров и обхода еще одного этапа валидации в самом WinRAR: программа проверяет и удаляет криминал из пути сохранения, чтобы избежать как раз таких вот ситуаций. Но проверяет, как выяснилось, не все возможные варианты.
Получилось вот что. Это скриншот анализа «подготовленного» архива с помощью упомянутого выше кода на Питоне. Двойное c:\ в начале пути обрабатывается библиотекой unacev2 и самим WinRAR так, что файл записывается в произвольный каталог. Вроде бы эксплойт готов? Опять нет, точнее не совсем. Попытка записи исполняемого файла в директорию автозапуска в такой конфигурации вызовет срабатывание защиты Windows. Но исследователям удалось найти способ обхода и этого ограничения, если файл сохраняется в директории пользователя, например в папку Downloads или на рабочий стол (что вполне вероятно). Как показано на видео в начале, подготовленный файл удалось сохранить в пользовательскую директорию автозапуска путем перехода на одну папку выше в пути файла.
Что в итоге получилось? В версии WinRAR 5.70 Beta 1 уязвимость исправили, полностью отказавшись от использования устаревшей библиотеки для работы с файлами ACE. Вряд ли кто-то по этому поводу серьезно расстроится. Кстати, совет, приведенный в статье на сайте ZDNet, —«не открывать подозрительные архивы в формате ACE» — немного неправильный. WinRAR не определяет файлы по разрешению, и эксплойт будет работать с уязвимой версией программы, даже если подготовленный архив ACE имеет расширение RAR (или любое другое). Не открывать подозрительные архивы — это хорошо, но вообще надо обновляться.
А теперь отвлекитесь на минуту от поста и посмотрите, какая версия WinRAR у вас установлена (если, конечно, вы этим архиватором пользуетесь). Для ориентировки: версия 5.50 выпущена в 2017 году, 5.00 — в 2012-м, 3.90 — в 2009-м. С некоторой вероятностью дата выпуска WinRAR будет примерно соответствовать дате первоначальной настройки системы, так как в этой программе до сих пор нет функции автоматического обновления. Как видно из твита компании — брокера уязвимостей Zerodium, спрос на работающие эксплойты в архиваторах имеется. Уязвимости, подобные обнаруженной в библиотеке для архивов ACE, могут использоваться для массовых либо целевых атак на компьютеры жертв. Надо отметить, что шансы на успешную эксплуатацию подобного бага далеки от стопроцентных. С высокой вероятностью зараженный архив будет заблокирован почтовой службой (верно, например, для GMail, там теперь не пропускаются запароленные архивы и архивы с исполняемыми файлами внутри) либо антивирусным ПО. Если, конечно, оно у вас есть.
Тем не менее все эти надоедливые напоминания о необходимости обновить одну из десятков установленных на компьютере программ — имеют смысл. Иначе легко пропустить серьезную уязвимость, которая сработает в самый неподходящий момент. Справедливости ради отметим, что серьезные проблемы именно в WinRAR появляются нечасто.
Disclaimer: Мнения, изложенные в этом дайджесте, могут не всегда совпадать с официальной позицией «Лаборатории Касперского». Дорогая редакция вообще рекомендует относиться к любым мнениям со здоровым скептицизмом.
Автор: Kaspersky_Lab