JetBrains は 10 月 9 日、Kotlin 向け ORM の Exposed 1.5.1 を公開しました。GitHub Advisory Database の CVE-2026-108474 (GHSA-cv5g-jv44-53r2) として CVSS v3.1 で 9.8 (Critical) が割り当てられている SQL インジェクション脆弱性の修正版で、CWE-89 に分類されています。認証なし・ユーザー操作なしでネットワーク越しに悪用でき、Exposed 利用アプリは早急な更新対象です。

主なポイント

  • 脆弱な実装では locate() concat() groupConcat() match() と JSON 系の extract() exists() contains() が文字列引数を SQL に直接埋め込んでいたため、入力値がそのままクエリに連結されていました (EXPOSED-1093)。
  • 1.5.1 ではこれらの引数をクエリパラメータとしてバインドする実装に変更し、DB 側が「データ」として扱うようにしています。Oracle の extract / exists の JSON パスや SQL Server の groupConcat セパレータなど、プレースホルダを許容しない位置ではシングルクォートをエスケープしたリテラル文字列として書き出します。
  • 併せて EXPOSED-909 として locate() に渡されるサブ文字列中のシングルクォートがエスケープされるよう修正されました。
  • アップグレード注意点: 独自に二重クォートなどで値をエスケープしていた既存コードでは、エスケープがそのまま DB に届いて二重エスケープで記録される可能性があります。手動エスケープを外して値をそのまま渡す形に変更する必要があります。
  • GitHub Advisory による公表は 10 月 10 日付。影響範囲は Exposed 1.5.1 未満で、1.5.1 以降への更新が修正版となります。

出典: Release 1.5.1 · JetBrains/Exposed