
Эксплойт доказательства концепции для CVE-2024-21542, демонстрирующий произвольную запись файлов через Zip Slip в менеджере конвейеров Luigi. Создает вредоносные архивы для перезаписи файлов за пределами каталога извлечения.
luigi — это пакет, который помогает создавать сложные конвейеры пакетных заданий. Он обрабатывает разрешение зависимостей, управление рабочими процессами, визуализацию, обработку ошибок, интеграцию с командной строкой и многое другое.
Уязвимые версии этого пакета подвержены произвольной записи файлов через извлечение архива (Zip Slip) из-за некорректной проверки пути к целевому файлу в функции _extract_packages_archive.
Эксплойт использует специально созданный ZIP-архив, содержащий имена файлов с обходом каталогов. При эксплуатации имя файла из вредоносного архива конкатенируется с целевым каталогом извлечения, в результате чего конечный путь оказывается за пределами целевой папки. Например, ZIP-архив может содержать файл с расположением ../../file.exe, что позволяет выйти за пределы целевой папки. Если исполняемый файл или конфигурационный файл будет перезаписан файлом, содержащим вредоносный код, проблема может легко превратиться в выполнение произвольного кода.
Ниже приведён пример ZIP-архива с одним безвредным и одним вредоносным файлом. Извлечение вредоносного файла приведёт к выходу за пределы целевой папки и перезаписи файла /root/.ssh/authorized_keys:
+2018-04-15 22:04:29 ..... 19 19 good.txt
+2018-04-15 22:04:42 ..... 20 20 ../../../../../../root/.ssh/authorized_keys
Создайте вредоносный packages.tar
python3 xpl.py
Передайте его в качестве аргумента для luigi/contrib/lsf_runner.py
Проверьте /tmp/fodac :)
https://security.snyk.io/vuln/SNYK-PYTHON-LUIGI-7830489
https://github.com/spotify/luigi/commit/b5d1b965ead7d9f777a3216369b5baf23ec08999
https://github.com/spotify/luigi/issues/3301