
POC-Django JSONField/HStoreField SQLインジェクションの脆弱性 (CVE-2019-14234)
Djangoは2019年8月1日にセキュリティアップデートを公開しました。これはJSONFieldとHStoreFieldの2つのモデルフィールドにおけるSQLインジェクション脆弱性を修正するものです。
参考リンク:
https://www.djangoproject.com/weblog/2019/aug/01/security-releases/ https://www.leavesongs.com/PENETRATION/django-jsonfield-cve-2019-14234.html
この脆弱性は、開発者がJSONField/HStoreFieldを使用している必要があります。さらに、クエリセットのフィールド名が制御可能であることが条件です。Djangoの組み込みアプリケーションであるDjango-Adminが影響を受けるため、簡単に脆弱性を再現することができます。
以下のコマンドを実行して、脆弱性のあるDjango 2.2.3をコンパイルして起動します:
docker compose build
docker compose up -d
環境が起動したら、http://your-ip:8000 でDjangoのホームページを確認できます。
まず、ユーザー名 admin、パスワード a123123123 で Django-Admin http://your-ip:8000/admin/ にログインします。
次に、モデル Collection のリストビュー http://your-ip:8000/admin/vuln/collection/ に移動します。
GETパラメータに detail__a'b=123 を追加します。ここで detail はJSONFieldです:
シングルクォートが正常にインジェクションされ、SQLステートメントがエラーを報告していることが確認できます。