macOS APFS上のUnicode合字衝突によるnode-tarパス予約における競合状態
プラットフォーム
nodejs
コンポーネント
tar
修正バージョン
7.5.4
**TITLE**: macOS APFS上のUnicodeエスツェット(ß)衝突によるnode-tarパス予約における競合状態 **AUTHOR**: Tomás Illuminati ### 詳細 `node-tar` (v7.5.3) には、`path-reservations` システムにおける Unicode パスの衝突処理の不備に起因する競合状態の脆弱性が存在します。大文字小文字を区別しない、または正規化を区別しないファイルシステム (macOS APFSなど、テスト済み) では、ライブラリは衝突するパス (例: `ß` と `ss`) をロックできず、それらを並行して処理することを許可します。これにより、ライブラリの内部並行性保護が回避され、競合状態を介したシンボリックリンクポイズニング攻撃が可能になります。ライブラリは、同じパスに対するメタデータチェックとファイル操作がシリアル化されるように、`PathReservations` システムを使用します。これにより、あるエントリが別のエントリを同時に上書きする競合状態を防ぎます。 ```typescript // node-tar/src/path-reservations.ts (Lines 53-62) reserve(paths: string[], fn: Handler) { paths = isWindows ? ['win32 parallelization disabled'] : paths.map(p => { return stripTrailingSlashes( join(normalizeUnicode(p)), // <- MacOS FSの問題点 ).toLowerCase()
修正方法
公式パッチはありません。回避策を確認するか、アップデートを監視してください。