概要
Elixir の PostgreSQL ドライバ Postgrex において、Notifications.listen/3 および Notifications.unlisten/3 関数のチャンネル名処理に SQL インジェクション脆弱性が存在します(CVSS: 7.8)。
チャンネル名が LISTEN/UNLISTEN SQL 文へ " 文字のエスケープなしで直接挿入されるため、攻撃者がチャンネル名を制御できる場合、引用符を使ってクォートを脱出し、任意の SQL コマンドを連鎖実行できます。PostgreSQL の simple query プロトコルが複数ステートメントを許容するため、DROP TABLE などの DDL コマンドも実行可能です。同様の問題は再接続時の handle_connect/1 内での LISTEN コマンド再生時にも発生します。
CVSS ベクトル
| 項目 | 値 |
|---|---|
| CVSS スコア | 7.8(High) |
| CWE | CWE-89(SQL Injection) |
| 攻撃経路 | ネットワーク / ローカル(チャンネル名制御が条件) |
影響を受けるソフトウェア
| 製品 | ベンダー | 脆弱なバージョン | 修正バージョン |
|---|---|---|---|
| postgrex (Hex/GitHub) | elixir-ecto | 0.16.0 以上 0.22.2 未満 | 0.22.2 |
修正バージョンと回避策
推奨対応: mix.exs で postgrex を >= 0.22.2 に更新し、mix deps.update postgrex を実行してください。
# mix.exs
defp deps do
[
{:postgrex, ">= 0.22.2"},
...
]
end
回避策として、Postgrex.Notifications.listen/3 に渡すチャンネル名に対してアプリケーション側でホワイトリスト検証を実施することで緩和できますが、根本的な対応はアップデートです。
関連リンク
データソース: NVD (NIST), GitHub Advisory Database
AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
