
PostgreSQLとDjangoにおけるSQLインジェクション脆弱性のPoC。Django 1.11(1.11.28未満)、2.2(2.2.10未満)、3.0(3.0.3未満)で発見されました。
Django 1.11(1.11.28以前)、2.2(2.2.10以前)、3.0(3.0.3以前)において、PostgreSQLとDjangoを使用した際のSQLインジェクション脆弱性のPoCです。
クラス django.contrib.postgres.aggregates.StringAgg は、PostgreSQLのSTRING_AGG関数を使用するために設計されていますが、初期化時にdelimiterパラメータに渡された値に任意のクエリを埋め込むことが可能なSQLインジェクション脆弱性が存在しました。
このDjangoアプリでは、フォームを介してクエリが注入されます。
SQLインジェクションに使用するクエリ: -') AS "mydefinedname" FROM "cve_src_example" GROUP BY "cve_src_example"."label" LIMIT 1 OFFSET 1 --