※この記事で知り得たことを悪用することは禁止とします。
djangoの脆弱性を見かけましたので挙動を確認してみました。
目次
Django は変転の激しいニュースルーム環境で開発された経緯から、よくある Web 開発タスクを迅速かつ簡単化するように設計されました。ここでは Django による データベースを使った Web アプリケーション開発をざっと見てみましょう。
Django の概要 https://docs.djangoproject.com/ja/3.2/intro/overview/
python3.9.5と脆弱なdjangoを使用している場合、URLValidatorが改行文字をチェックしないためHTTP Header Injectionの可能性があります。
対象バージョン
修正方法は上記以上のバージョンに上げることです。
脆弱性情報は以下を参考にしています。
https://snyk.io/vuln/SNYK-PYTHON-DJANGO-1290072
※ローカル環境で再現しています。
検証用のコードです。
githubのテストコードを参考にしました。
https://github.com/django/django/commit/e1e81aa1c4427411e3c68facdd761229ffea6f6f
URLValidatorが使用できない文字列を検知した場合は例外が発生します。
検知しなかった場合はリダイレクト処理に移ります。
djangoが3.2.1であることを確認します。
pythonが3.9.5であることを確認します。
サーバを起動し、アクセスします。
改行のチェックが行われないため、チェックが素通りしてリダイレクトされています。
djangoを3.2.2にアップデートします。
再度サーバを起動します。
サーバへアクセスすると、ValidationErrorとなりました。
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での検証も進めたいところです。
サイバーセキュリティ情報共有コミュニティをやっています。
インシデント例や脆弱性情報などを取り扱っています。
毎週金曜日はボイスチャットにて雑談会を行っています。
ご興味ありましたらご参加いただけると嬉しいです!
参加はこちら!