30秒で判断
対応すべき人:
- Sequelize 6.37.4 より前を使用している
- かつ
dialect: oracleで Oracle Database に接続している
対応不要な人:
- Sequelize 6.37.4 以降へアップグレード済み
- Oracle 以外のダイアレクト(MySQL, PostgreSQL, SQLite, MSSQL 等)を使用している
- Sequelize を使用していない
確認コマンド:
npm list sequelize
# ダイアレクト設定を確認
grep -R "dialect" --include=*.js --include=*.ts .
概要
Sequelize は Node.js の代表的なORMです。6.37.4 より前のバージョンでは、sql-string.js に定義されたエスケープ関数が、値が TO_TIMESTAMP または TO_DATE で始まる文字列の場合にシングルクォートをエスケープせず、その値をそのまま返してしまいます。
Oracle ダイアレクトにおいて、この経路に到達するアプリケーション値を通じて、攻撃者が 任意のSQL式を注入 できてしまいます(CWE-89 SQLインジェクション)。認証不要・ネットワーク経由で悪用可能なため、CVSS は 9.8 と評価されています。
なお、本問題は dialect が oracle に設定されている場合のみ 影響します。
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSSスコア | 9.8(Critical) |
| CWE | CWE-89(SQLインジェクション) |
| 攻撃元区分 (AV) | ネットワーク (N) |
| 攻撃条件の複雑さ (AC) | 低 (L) |
| 必要な特権 (PR) | なし (N) |
| ユーザーの関与 (UI) | 不要 (N) |
影響を受けるソフトウェア
| 製品 | 影響バージョン |
|---|---|
| sequelize(npm) | 6.37.4 より前(dialect: oracle 利用時のみ) |
修正バージョンと回避策
修正バージョン: Sequelize 6.37.4
npm install sequelize@6.37.4
# または
npm install sequelize@latest
暫定策として、ユーザー入力値が TO_TIMESTAMP / TO_DATE で始まる文字列としてクエリに渡らないよう入力検証・バインドパラメータの徹底も有効です。
関連リンク
データソース: NVD (NIST), GitHub Advisory Database AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
