关键信息总结 漏洞类型 JDBC Connection Injection 描述 在 端点的 中,应用接收用户控制的 对象。 用户控制的 与 参数直接用于 建立数据库连接。 由于 JDBC URL 和驱动类名缺乏验证,攻击者可利用此漏洞: 1. 任意文件读取:指定 MySQL 驱动并连接至攻击者控制的“恶意 MySQL Server”,利用 MySQL 协议中的 功能,请求客户端读取和上传任意本地文件,例如 或 。 2. 远程代码执行 (RCE):如果 H2 数据库、SQLite 和易受反序列化攻击的 MySQL 驱动存在于 classpath 中,攻击者可构造特定的 JDBC URL (例如 H2 的 命令) 来执行系统命令。 影响 保密性损失:攻击者可读取敏感配置文件、源代码、系统文件和凭据文件,导致核心机密泄露。 完整性损失:H2、SQLite 和特定反序列化小工具链存在时,可升级至远程代码执行,修改文件系统、植入后门或篡改数据库记录。 可用性损失:通过 RCE 或多次恶意连接耗尽服务资源,攻击者可关闭服务或删除关键数据。 概念验证 需运行恶意 Python 脚本模拟 MySQL 服务器,命令受害者系统读取文件 。 HTTP POST 请求及 JSON 数据样本: 成功验证任意文件读取漏洞。 修复措施 禁止用户控制驱动类:不要接受用户输入的 ,在后端逻辑中硬编码允许的驱动类名。 移除完整 URL 控制:不用原始 字符串,取而代之的是分别接受 、 和 ,并在后端构造 JDBC URL。 参数白名单机制:构建 URL 时严格检查或移除危险参数(如 、 、 )。 最小权限原则:确保运行 Java 应用的系统用户没有访问敏感目录的文件系统权限。