Gather 逻辑中无限 HTTP 体的缓冲区溢出
作者: yhrscholar创建于 2025年6月15日更新于 2025年6月15日
说明
Japronto 的 HTTP 解析器 (cffiparser.py) 会接受任意大小的 Content-Length 或分块负载,将整个请求体复制到一个 Python 缓冲区中,然后一次性传递给 C 语言的 "聚集" 逻辑 (cprotocol.c)。该逻辑使用固定大小的分配 ( malloc(sizeof(PyBytesObject) + GATHER_MAX_LEN) ),但不限制输入长度。当体长度 (或解码后的分块长度) 超过 GATHER_MAX_LEN 时,后续的 memcpy 会溢出堆缓冲区,导致崩溃或潜在的任意写入。Python
内容来源: squeaky-pl/japronto