
このリポジトリには、CVE-2026-29786 の**概念実証(PoC)**が含まれています。これは tar npm パッケージの脆弱性であり、細工されたアーカイブによって、意図した展開ディレクトリの外を指すハードリンクを作成できるものです。
この問題は、tar アーカイブに C:../target.txt のようなドライブ相対リンクターゲットが含まれている場合に発生します。展開中にライブラリが検証とパス正規化を実行する順序が原因で、トラバーサル保護をバイパスできます。
正規化後、パスは ../target.txt となり、リンクターゲットが設定された展開ディレクトリの外に逃げることができます。
展開されたファイルに書き込みが行われると、両方のパスが同じハードリンクを参照しているため、外部ファイルが変更されます。
この脆弱性は、絶対パス(Unpack[STRIPABSOLUTEPATH])を処理する展開ロジックで発生します。
トラバーサル検出は、絶対パスの除去前に実行されます。
悪意のあるヘッダー値の例
linkpath: C:../target.txt
処理の動作:
パスはトラバーサル検出のためにセグメントに分割されます。
トラバーサルチェックは ".." セグメントを探します。
セグメントが "C:.." として表示されるため、チェックはトリガーされません。
その後、stripAbsolutePath() 関数がドライブプレフィックス(C:)を削除します。
結果のパスは次のようになります:
../target.txt
これにより、パスが意図した展開ルートの外に逃げることができます。
攻撃者は、展開を実行するプロセスの権限で、展開ディレクトリの外にあるファイルを上書きできます。
現実世界での潜在的なシナリオは次のとおりです:
• 信頼できない tar アーカイブを展開する CLI ツール • サードパーティのアーティファクトを処理するビルドパイプライン • ユーザー提供の tar ファイルをインポートするサービス • アーカイブを解凍するパッケージマネージャーやプラグインシステム
npm install [email protected]
node poc.cjs
このスクリプトは悪意のある tar アーカイブを生成し、展開されたファイルへの書き込みが、展開ディレクトリの外にあるファイルの上書きにつながることを実証します。