Вчера в дайджесте я упоминал про обнаруженную 19-летнюю уязвимость в WinRAR. Сегодня пришло письмо от читателя (пожелавшего остаться анонимным), который разобрался чуть более детально в информации об уязвимости, и, мне кажется, это может быть интересно другим читателям ресурса.
——-
Если вам интересно: я тестировал эту уязвимость сразу, как только услышал о ней. Я внимательно прочитал оригинальную статью, и отделил зёрна от плевел:
1) Несмотря на то, что методом атаки на архиватор был fuzzing, в сущности уязвимость представляет из себя просто распаковку файла по абсолютному пути. Это не связано с memory-related багами архиватора (то есть это НЕ переполнение буфера памяти, НЕ исполнение произвольного кода в контекста процесса), которые обычно обнаруживаются фаззингом.
2) Для фактической эксплуатации уязвимости, нужно создать ACE архив стандартным способом, а потом просто бинарно изменить в нём прописанный путь к файлу. Чтобы после этого архив воспринимался как корректный, нужно пересчитать контрольную CRC сумму в заголовках. Автор статьи не показал прямой код пересчёта, но следуя комментариям в исходниках Python-библиотеки по ссылке – я разобрался и сам, подбором найдя подходящую инициализацию crc32, которая генерирует валидные хеши. В итоге, моя собственная программа для восстановления контрольной суммы оказалась весьма тривиальной.
Continue reading