
Prova de conceito do exploit para CVE-2024-21542 que demonstra gravação arbitrária de arquivos via Zip Slip no gerenciador de pipelines Luigi. Gera arquivos maliciosos para sobrescrever arquivos fora do diretório de extração.
luigi é um pacote que ajuda você a construir pipelines complexos de jobs em lote. Ele lida com resolução de dependências, gerenciamento de workflow, visualização, tratamento de falhas, integração com linha de comando e muito mais.
As versões afetadas deste pacote são vulneráveis a Escrita Arbitrária de Arquivos via Extração de Arquivo (Zip Slip) devido a validação inadequada do caminho do arquivo de destino na função _extract_packages_archive.
É explorado usando um arquivo zip especialmente criado, que contém nomes de arquivos com path traversal. Quando explorado, um nome de arquivo em um arquivo malicioso é concatenado ao diretório de extração alvo, resultando no caminho final ficando fora da pasta alvo. Por exemplo, um zip pode conter um arquivo com localização "../../file.exe" e assim sair da pasta alvo. Se um executável ou um arquivo de configuração for sobrescrito com um arquivo contendo código malicioso, o problema pode se tornar facilmente uma questão de execução de código arbitrário.
A seguir está um exemplo de um arquivo zip com um arquivo benigno e um arquivo malicioso. A extração do arquivo malicioso resultará em sair da pasta alvo, terminando em /root/.ssh/ sobrescrevendo o arquivo authorized_keys:
+2018-04-15 22:04:29 ..... 19 19 good.txt
+2018-04-15 22:04:42 ..... 20 20 ../../../../../../root/.ssh/authorized_keys
Crie o packages.tar malicioso
python3 xpl.py
Passe como argumento para luigi/contrib/lsf_runner.py
Verifique seu /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