You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复现CVE-2024-30251?求aiohttp DoS漏洞最小POC脚本

复现CVE-2024-30251 aiohttp DoS漏洞的问题

我正在尝试复现CVE-2024-30251——Python异步Web框架aiohttp在3.9.4版本前存在的拒绝服务(DoS)漏洞。根据安全公告,该漏洞可通过发送特制的multipart/form-data POST请求触发,使服务器进入无限循环并失去响应。

我已搭建最小化aiohttp服务器,分别测试了受影响的3.8.6版本和已修复的3.9.5版本,尝试了多种畸形multipart payload(如缺失闭合边界、大Content-Length头、嵌套multipart内容、突然关闭连接等),但两种版本均未出现挂起情况,反而一致返回Exception during upload handling: Reading after EOF或400 Bad Request等已处理的错误,从未进入无限循环或失去响应。

问题

  • 在aiohttp 3.8.6中,可靠触发CVE-2024-30251描述的无限循环/DoS所需的精确payload和连接行为是什么?
  • 是否存在环境特定因素(如操作系统、Python版本、缓冲设置)会影响漏洞触发?

是否有人已用最小化利用脚本复现该漏洞?若有,能否分享精确步骤和payload?

附:测试代码

server.py

from aiohttp import web

async def handle(request):
    # 解析POST表单数据,触发漏洞路径
    form = await request.post()
    return web.Response(text="Received form data")

app = web.Application()
app.add_routes([web.post('/', handle)])

if __name__ == '__main__':
    web.run_app(app, host='0.0.0.0', port=8080)

client.py

import socket

# 示例畸形请求尝试(未触发漏洞)
def send_malicious_request():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 8080))
    
    boundary = b"----Boundary123"
    request = (
        b"POST / HTTP/1.1\r\n"
        b"Host: localhost:8080\r\n"
        b"Content-Type: multipart/form-data; boundary=" + boundary + b"\r\n"
        b"Content-Length: 1000\r\n"
        b"\r\n"
        b"--" + boundary + b"\r\n"
        b"Content-Disposition: form-data; name=\"test\"\r\n"
        b"\r\n"
        # 未闭合边界,尝试触发漏洞
    )
    
    sock.sendall(request)
    # 尝试不关闭连接或发送部分数据
    # sock.close()
    
    response = sock.recv(4096)
    print(response.decode())
    sock.close()

if __name__ == '__main__':
    send_malicious_request()

内容的提问来源于stack exchange,提问作者ADITYA UDAY UBALE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:36:03