Одно из главных отличий между успешными и не очень успешными багхантерами заключается в том, что последние не видят закономерности в приложении.
Пример: ты находишь багу, а затем начинаешь размышлять о ней и замечать закономерности в разработке этого конкретного приложения. Суть в том, что выбранный стиль разработки может привести к другим багам.
Mathias Karlsson представил инструмент Archive Alchemist, чтобы автоматизировать работу, связанную с уязвимостями архивов. Он возник после частых встреч с ошибками в архивах, которые требовали создания кастомных архивов и глубокого погружения в документацию.
💡 Три основных вектора атак:
▪️ Path Traversal (классический zip slip), позволяющий извлекать файлы за пределы целевых директорий с помощью путей вроде
../;▪️ Link-Based Overwrites, где символические или жесткие ссылки могут привести к размещению файлов за пределами путей извлечения, что может привести к RCE;
▪️ Parser Differential Bugs, когда различия в парсерах позволяют обходить проверки безопасности.
Archive Alchemist автоматизирует и упростит эксплуатацию основных уязвимостей 👇
🤔 Несоответствия имен файлов в ZIP
Различия в Central Directory Header, Local File Header и Unicode Path создают возможности для атак. Проверка может использовать Central Directory Header, показывающий
file.json, в то время как извлечение полагается на поле Unicode Path с содержимым ../../../../etc/passwd.Дополнительные векторы атак включают проблемы с UTF-16, несоответствия CRC и ошибки обработки NULL-байтов, а также скрытие слэшей в многобайтовых последовательностях.
🏃 Усечение длины пути
В Linux максимальная длина пути — 4096 символов. При превышении этого лимита ошибки могут быть проигнорированы, что позволяет создавать архивы с длинными фальшивыми путями, оставляющими вредоносные файлы.
Эту технику можно использовать для утечки информации, постепенно раскрывая структуру директорий сервера.
🤕 Фингерпринт системы
Загрузка файлов с именами CON, NUL или <> помогает выявить Windows-системы. Также можно определить операционную систему по длине пути: 4096 символов — это Linux, 260 — Windows.
Тестирование симлинков в свою очередь помогает определить поддержку симлинков системой и проверить их на чувствительные пути.
