PHP <= 5.3.2 php_dechunk()...

- AV AC AU C I A
发布: 2025-04-13
修订: 2025-04-13

BUGTRAQ ID: 39877 PHP是广泛使用的通用目的脚本语言,特别适合于Web开发,可嵌入到HTML中。 PHP的ext/standard/filters.c文件中的php_dechunk()函数在处理HTTP流时存在符号错误,通过dechunk过滤器处理超大的HTTP块时可以触发内存破坏。 新的PHP dechunk过滤器中的状态机使用以下结构记忆当前的状态: typedef struct _php_chunked_filter_data { php_chunked_filter_state state; int chunk_size; int persistent; } php_chunked_filter_data; chunk_size存储为有符整形,由于使用了块大小解码器,这可能导致问题: case CHUNK_SIZE: while (p < end) { if (*p >= '0' && *p <= '9') { data->chunk_size = (data->chunk_size * 16) + (*p - '0'); } else if (*p >= 'A' && *p <= 'F') { data->chunk_size = (data->chunk_size * 16) + (*p - 'A' + 10); } else if (*p >= 'a' && *p <= 'f') { data->chunk_size = (data->chunk_size * 16) + (*p - 'a' + 10); } else if (data->state == CHUNK_SIZE_START) { data->state = CHUNK_ERROR; break; } else { data->state = CHUNK_SIZE_EXT_START; break; } data->state = CHUNK_SIZE; p++; } 块大小解码器没有防范整数溢出,正的32位块大小会导致在chunk_size状态变量中存储负整数,之后将块大小与剩余的缓冲区空间做比较时会触发溢出:...

0%
暂无可用Exp或PoC
当前有0条受影响产品信息