音声文字起こし用Node.jsライブラリnodejs-whisperに、音声ファイル名を介してOSコマンドが実行され得るCRITICAL脆弱性がある。影響するのは0.4.0未満で、ユーザーが指定できるファイルパスを処理するアプリケーションが主な懸念対象。GitHubの審査済み勧告と修正版コードを照合した。
30秒でわかる / THE SIGNAL
音声文字起こし用Node.jsライブラリnodejs-whisperに、音声ファイル名を介してOSコマンドが実行され得るCRITICAL脆弱性がある。影響するのは0.4.0未満で、ユーザーが指定できるファイルパスを処理するアプリケーションが主な懸念対象。GitHubの審査済み勧告と修正版コードを照合した。
音声ファイルパスがシェルコマンドに組み込まれる
GitHub Advisory DatabaseのGHSA-2f48-3555-fpx6によると、nodejs-whisper 0.3.1以前の音声変換関数 `convertToWavType()` は、入力ファイルパスを `ffmpeg` コマンド文字列に埋め込み `shelljs.exec()` で実行していた。ユーザーが制御できるファイル名にシェルの特殊文字が含まれると、Node.jsプロセスの権限でOSコマンドが実行される恐れがある。開発元リポジトリの旧版 `src/utils.ts` でも該当する実装を確認した。CVSS v4ベーススコアは9.3(CRITICAL)。攻撃成立にはアプリケーションが攻撃者由来のファイルパスをそのままこの処理に渡す条件がある。
4.0の修正コードと利用側の確認点
GitHubの審査済み勧告は修正版を0.4.0と記載している。実際に開発元のv0.4.0タグの `src/utils.ts` と `src/process.ts` を読むと、`ffmpeg` は `spawn(command, args)` で引数配列として呼び出され、シェルコマンド文字列の連結がなくなっている。利用者は0.4.0以上へ更新し、外部からアップロードされた音声ファイル名の正規化・内部名への置換と、音声変換処理の権限分離を確認したい。