
Aiohttp =< 3.9.1 における LFI/パストラバーサル脆弱性の Proof-of-Concept
Aiohttp =< 3.9.1 における LFI/パストラバーサル脆弱性の Proof-of-Concept
[!IMPORTANT] このスクリプトは教育目的のみを意図しています。
不正利用は固く禁止されています。
$ git clone https://github.com/wizarddos/CVE-2024-23334
$ cd CVE-2024-23334
$ python3 exploit.py -u [url] -f [file] -d [static directory]
[!Note] URL と静的ディレクトリのスラッシュを一致させることを忘れないでください。
http://127.0.0.1/のように入力した場合は、ディレクトリをスラッシュなし(staticなど)で渡し、その逆も同様です(URL はスラッシュなし、ディレクトリはスラッシュ付き)。
脆弱性自体は、aiohttp が静的リソースへのリクエストを処理する方法にあります。
次のようなコードを書いた場合
app.router.add_routes([
web.static("/static", "static/", follow_symlinks=True)
])
follow_symlinks=True により、LFI に対して脆弱になります。
静的リソースを使用するには、そのルートディレクトリを指定する必要があります。
follow_symlinks オプションは、aiohttp にルートディレクトリの外にあるシンボリックリンクをたどるように指示しますが、リンク自体がルートディレクトリ内にあるかどうかはチェックしません。
つまり、その「symlink」がリンクですらない場合でも、aiohttp はそのファイルを読み取って値を返します。
出典 https://github.com/aio-libs/aiohttp/security/advisories/GHSA-5h86-8mv2-jq9f