概要
npm パッケージ node-tesseract-ocr(Tesseract OCR の Node.js ラッパー)の全バージョン(2.2.1 以下)に、OS コマンドインジェクション脆弱性が存在します。
src/index.js 内の recognize() 関数において、file パスパラメーターがサニタイズされずにシェルコマンド文字列に連結され、child_process.exec() に渡されます。攻撃者がファイルパス引数を制御できる場合、任意の OS コマンドを実行できます。
この脆弱性は以下のような状況で悪用される可能性があります:
- ユーザーがアップロードしたファイルをそのまま
recognize()に渡している場合 - 外部からのリクエストパラメーターをファイルパスとして使用している場合
- Webアプリケーションで OCR 処理を提供しているサービス
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSS バージョン | 4.0 |
| ベクトル | AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H |
| 攻撃経路(AV) | ネットワーク |
| 攻撃の複雑さ(AC) | 低 |
| 攻撃要件(AT) | あり(ファイルパス制御が必要) |
| 必要な権限(PR) | 不要 |
| ユーザーインタラクション(UI) | あり |
| 機密性への影響(VC) | 高 |
| 完全性への影響(VI) | 高 |
| 可用性への影響(VA) | 高 |
影響を受けるソフトウェア
| 製品 | ベンダー | 影響バージョン |
|---|---|---|
| node-tesseract-ocr | zapolnoch | ≤ 2.2.1(全バージョン) |
修正バージョンと回避策
修正バージョン: 現時点で修正バージョンは公開されていません。
回避策:
- ユーザー入力や外部データをファイルパスとして
recognize()に渡さない - ファイルパスを使用する前に厳密な許可リストベースの検証を実施する
- 代替の OCR ライブラリ(
tesseract.js等)への移行を検討する
// NG: ユーザー入力を直接渡す
const result = await tesseract.recognize(req.body.filePath);
// OK: 固定パスまたは厳密に検証されたパスのみ使用
const safePath = path.join('/safe/uploads/', path.basename(req.body.filename));
const result = await tesseract.recognize(safePath);
関連リンク
データソース: NVD (NIST), GitHub Advisory Database AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
