Rust製zipクレートの重大な脆弱性、概念実証(PoC)エクスプロイトが公開

要点

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/

本記事は meterpreter.org の記事を翻訳・要約したものです。