ORM インジェクション
ORM インジェクション とは何ですか?
ORM インジェクションORM を用いるアプリへのインジェクション攻撃。動的クエリ、Mass Assignment、生 SQL のエスケープ経路を悪用してデータ操作を行う。
ORM インジェクションは、Hibernate、Entity Framework、SQLAlchemy、ActiveRecord、Sequelize、Prisma、Django ORM などのクエリ構築 API に、攻撃者が制御できる入力が動的に入り込むときに発生します。脆弱なパターンとして、HQL/JPQL の文字列連結、ActiveRecord の where(string) への補間、Sequelize の Op.literal、SQLAlchemy のフォーマット文字列を含む text()、想定外属性への Mass Assignment、JSON API の安全でないソート/フィルタ引数などがあります。影響は古典的な SQL インジェクションから、ORM 層に認可ロジックがある場合の権限バイパスや昇格にまで及びます。対策はパラメータ化クエリビルダ、ソート/フィルタ可能列の厳格な許可リスト、明示的な strong parameters、信頼できない入力に対する生 SQL エスケープ経路の不使用です。
● 例
- 01
Rails アプリで User.where("name = '#{params[:q]}'") を呼び出して ORM 経由で SQL インジェクションが発生する。
- 02
Sequelize の端点が攻撃者制御の order パラメータを Op.literal に渡してしまう。
● よくある質問
ORM インジェクション とは何ですか?
ORM を用いるアプリへのインジェクション攻撃。動的クエリ、Mass Assignment、生 SQL のエスケープ経路を悪用してデータ操作を行う。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
ORM インジェクション とはどういう意味ですか?
ORM を用いるアプリへのインジェクション攻撃。動的クエリ、Mass Assignment、生 SQL のエスケープ経路を悪用してデータ操作を行う。
ORM インジェクション からどのように防御しますか?
ORM インジェクション に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
ORM インジェクション の別名は何ですか?
一般的な別名: HQL インジェクション, JPQL インジェクション。