Skip to content

漏洞扫描工具扫出的一些漏洞 #329

Description

@ban-ling

漏洞概述

本次审计发现项目 Config配置模块、WebServer核心服务模块、http_connHTTP处理模块 存在多处安全漏洞与稳定性缺陷,包含栈缓冲区溢出、SQL注入、空指针解引用、并发连接丢失、参数无校验等问题,可导致服务器崩溃、数据泄露、服务不可用、非法入侵等风险。

受影响文件

  • config.cpp
  • webserver.cpp
  • http_conn.cpp

一、Config 配置解析模块(行:5、36、38、40、42)

  1. 端口号无合法范围校验,支持传入0/负数/超范围数值,导致端口绑定失败
  2. 局部变量opt未初始化,存在C++未定义行为
  3. 未处理getopt()错误返回值,非法参数静默解析失败无提示
  4. switch语句无default兜底分支,无法捕获异常参数
  5. 使用不安全atoi函数转换参数,无输入校验,非法值直接污染配置

二、WebServer 核心服务模块(行:9、10、80、111、135)

  1. 内存分配无异常捕获,内存不足时程序直接崩溃
  2. 固定大小栈数组存储路径,getcwd无长度校验,存在高危栈缓冲区溢出
  3. 栈上固定容量epoll事件数组,高并发场景下事件丢失
  4. LT模式下仅单次调用accept,高并发时新连接永久丢失
  5. 定时器指针无空指针校验,直接使用触发空指针解引用,服务器崩溃

三、http_conn HTTP连接处理模块(行:44、45、56、104、166)

  1. 数据库结果集mysql_store_result无空指针校验
  2. 直接使用空指针结果集mysql_num_fields,必现程序崩溃
  3. 使用strcpy无长度限制,存在高危栈缓冲区溢出
  4. HTTP请求行解析无边界校验,存在解析漏洞
  5. 固定大小数组解析POST参数无校验,存在栈缓冲区溢出 + 高危SQL注入漏洞

复现方式

  1. 传入非法/超长命令行参数,触发配置解析失败
  2. 程序部署在超长工作路径,触发栈溢出
  3. 高并发压测,复现连接/事件丢失
  4. 恶意构造POST请求,触发SQL注入、缓冲区溢出
  5. 客户端异常断开,触发定时器空指针崩溃
  6. 数据库查询失败,触发MySQL结果集空指针崩溃

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions