
CVE-2024-21542 の概念実証エクスプロイト。Luigi パイプラインマネージャーにおける Zip Slip を介した任意のファイル書き込みを実証する。展開ディレクトリ外のファイルを上書きする悪意のあるアーカイブを生成する。
luigi は、バッチジョブの複雑なパイプラインを構築するためのパッケージです。依存関係の解決、ワークフロー管理、可視化、障害処理、コマンドライン統合など、さまざまな機能を提供します。
影響を受けるバージョンは、_extract_packages_archive 関数における不適切な宛先ファイルパスの検証により、アーカイブ抽出(Zip Slip)を介した任意のファイル書き込みに対して脆弱です。
この脆弱性は、パストラバーサルを含むファイル名を持つ特別に細工された zip アーカイブを使用して悪用されます。悪用されると、悪意のあるアーカイブ内のファイル名が対象の抽出ディレクトリに連結され、結果として最終的なパスが対象フォルダの外に出てしまいます。例えば、zip に ../../file.exe という場所のファイルが含まれていると、対象フォルダから抜け出します。実行ファイルや設定ファイルが悪意のあるコードを含むファイルで上書きされると、問題は容易に任意のコード実行に発展する可能性があります。
以下は、1つの良性ファイルと1つの悪意のあるファイルを含む 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