
Aiohttp =< 3.9.1의 LFI/경로 순회 취약점에 대한 개념 증명(PoC)
Aiohttp =< 3.9.1의 LFI/Path Traversal 취약점에 대한 개념 증명(PoC)
[!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과 static 디렉터리의 슬래시를 일치시키는 것을 잊지 마세요.
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에게 루트 디렉터리 외부의 심볼릭 링크를 따르도록 지시하지만, 링크 자체가 루트 디렉터리 안에 있는지 여부는 확인하지 않습니다.
그래서 해당 '심볼릭 링크'가 실제로 링크가 아니더라도 aiohttp는 파일을 읽고 그 값을 반환합니다.
출처 https://github.com/aio-libs/aiohttp/security/advisories/GHSA-5h86-8mv2-jq9f