要点
zip2リポジトリのメンテナーは、Rust製zipクレートに存在する重大な脆弱性の技術的詳細と、動作する概念実証(PoC)エクスプロイトコードを公開しました。この脆弱性は「CVE-2026-115905」(CVSS v4.0:10.0)として追跡されています。「Zip Cloaking」と呼ばれるこの欠陥を悪用すると、攻撃者はセキュリティスキャナーを回避し、任意のファイルを上書きして、リモートからコードを実行できます。開発者は直ちに、依存関係をzipバージョン9.0.5へアップグレードする必要があります。
重要な理由
zipクレートはRustの標準的なアーカイブ処理ライブラリで、クラウドのマイクロサービスやバックエンドのワーカーを中心に、crates.ioで数億回ダウンロードされています。ただし、脆弱な本番環境がどれだけあるのか、正確な数はベンダーのアドバイザリに記載されていません。
脆弱性の詳細と自動化されたPoCエクスプロイトのテストが公開されたため、検査と展開を別々に行う取り込みパイプラインには、直ちにリスクが生じます。特に、アップロードされたファイルをセキュリティゲートウェイで検査した後、ストリーミングリーダーで展開する構成では、任意のファイルの上書きやサービスの破壊、リモートコード実行の被害を受けるおそれがあります。動作するPoCエクスプロイトは公開されていますが、実際の攻撃での悪用は確認されていません。
攻撃の仕組み
GitHubのセキュリティアドバイザリによると、このRust製zipクレートの脆弱性は、ランダムアクセス方式のリーダーとストリーミング方式のエクストラクター(展開処理)の間に生じる、アーキテクチャ上のパーサー差異(CWE-436)が原因です。
2つのヘッダーの不整合とゲートウェイ回避
PKWARE ZIP形式では、各ファイルエントリのメタデータが2か所に保存されます。ペイロードの直前にあるローカルファイルヘッダー(LFH)と、アーカイブ末尾にあるセントラルディレクトリファイルヘッダー(CDFH)です。影響を受けるバージョンのZipArchiveは、ファイル名をCDFHのテーブルからのみ読み取り、LFHを無視します。一方、ZipStreamReader::visitとZipStreamReader::extractはストリームを先頭から順に読み込み、検証されていないLFHのファイル名でディスクにファイルを書き込みます。さらに、ライブラリのshallow_copy_file APIは、このようなヘッダー不一致を直接生成してしまいます。
公開されたPoCエクスプロイトのシナリオでは、攻撃者はCDFHに無害なファイル名doc_report.pdfを、LFHにcron_worker.shを宣言したアーカイブを細工します。まず、ZipArchive経由でCDFHを検査する上流のアンチウイルススキャナーやWebアプリケーションファイアウォールは、このファイルを問題のないPDFとして通過させます。次に、バックエンドのワーカーがZipStreamReader::extractでアーカイブを展開すると、LFHを読み取り、サーバー上の正規のcron_worker.shスクリプトを悪意のあるペイロードで上書きします。
影響を受けるバージョン
このRust製zipクレートの脆弱性は、9.0.4までのzipパッケージのすべてのバージョンに影響します。バージョン9.0.5は影響を受けません。
パッチと緩和策
修正を担当した開発者のByGh00st氏とレビュアーのPr0methean氏が、zipバージョン9.0.5でCVE-2026-115905を解決しました。開発者はCargo.tomlのマニフェストを更新してバージョン9.0.5以降を要求し、影響を受けるRustバイナリをすべて直ちに再ビルドしてください。すぐにアップグレードできない場合は、信頼できないアーカイブにZipStreamReaderを使用しないでください。あわせて、セキュリティゲートウェイが展開前にローカルファイルヘッダーとセントラルディレクトリヘッダーの両方を検証するようにしてください。
翻訳元: https://meterpreter.org/rust-zip-crate-vulnerability-poc-disclosed/