※この記事で知り得たことを悪用することは禁止とします。
djangoの脆弱性を見かけましたので挙動を確認してみました。
django概要
Django は変転の激しいニュースルーム環境で開発された経緯から、よくある Web 開発タスクを迅速かつ簡単化するように設計されました。ここでは Django による データベースを使った Web アプリケーション開発をざっと見てみましょう。
Django の概要 https://docs.djangoproject.com/ja/3.2/intro/overview/
脆弱性概要
python3.9.5と脆弱なdjangoを使用している場合、URLValidatorが改行文字をチェックしないためHTTP Header Injectionの可能性があります。
対象バージョン
- 3.2.2未満
- 3.1.10未満
- 2.2.22未満
修正方法は上記以上のバージョンに上げることです。
脆弱性情報は以下を参考にしています。

動作検証
※ローカル環境で再現しています。
検証用のコードです。
githubのテストコードを参考にしました。

URLValidatorが使用できない文字列を検知した場合は例外が発生します。
検知しなかった場合はリダイレクト処理に移ります。
python3.9.5 + django3.2.1(脆弱)
djangoが3.2.1であることを確認します。

pythonが3.9.5であることを確認します。

サーバを起動し、アクセスします。
改行のチェックが行われないため、チェックが素通りしてリダイレクトされています。

python3.9.5 + django3.2.2(脆弱ではない)
djangoを3.2.2にアップデートします。

再度サーバを起動します。
サーバへアクセスすると、ValidationErrorとなりました。


python3.6.9 + django3.2.1(脆弱ではない)
pythonは3.6.9を使用します。

djangoは3.2.1を使用します。

再度サーバを起動してアクセスします。
「python3.9.5 + django3.2.2」の時と同様にValidationErrorとなりました。

個人的な不明点なぐり書き
python3.9.5で改行文字の扱いが変わった理由がよくわからなかったです。
改行文字を含むとどうなるかの検証は出来ましたが、改行文字を含んだURLをどう扱うとHTTPヘッダインジェクションになるかがわかりませんでした。
思いついたのはリダイレクトでしたが、リダイレクトはURLエンコードされてヘッダインジェクションっぽくはなりませんでした。
終わりに
django脆弱性の修正点確認でした。
これの環境構築をすることで簡単なdjangoアプリケーション作成を学ぶことが出来ました。
あまりdjangoで作られているアプリケーションを見かけませんが、それを見かけた場合は手元で検証できるようになったので助かりました。
よく見かけるjavaやASP.netでの検証も進めたいところです。
【PR】コミュニティの紹介
サイバーセキュリティ情報共有コミュニティをやっています。
インシデント例や脆弱性情報などを取り扱っています。
毎週金曜日はボイスチャットにて雑談会を行っています。
ご興味ありましたらご参加いただけると嬉しいです!
参加はこちら!
コメント