1. C3P0 反序列化漏洞概述
C3P0 作为 Java 生态中广泛使用的 JDBC 连接池组件,其反序列化漏洞近年来在安全领域备受关注。这个漏洞的特殊之处在于,它允许攻击者在不出网(无需外部网络连接)的情况下,通过精心构造的 Hex 字节码实现远程代码执行。该漏洞在实际渗透测试中较为常见,发现它常与 Fastjson、Jackson 等流行框架组合出现,形成完整的攻击链。
漏洞的核心在于 WrapperConnectionPoolDataSource 类对 userOverridesAsString 属性的处理机制。当这个属性以"HexAsciiSerializedMap"开头时,C3P0 会将其后的十六进制字符串转换为字节数组并进行反序列化操作。这种设计原本是为了支持连接池配置的灵活存储,却意外成为了安全突破口。
2. Hex 字节码加载机制深度解析
2.1 漏洞触发流程分析
让我们通过一个真实案例来理解漏洞触发过程。去年在某次企业安全评估中,我发现一个使用 Fastjson 1.2.47 的 Web 服务,配合 C3P0 0.9.5.2 版本,形成了完美的攻击面。攻击者只需要发送如下 JSON 数据:
{ "a": { "@type": "java.lang.Class", "val": "com.mchange.v2.c3p0.WrapperConnectionPoolDataSource" }, "b": { "@type": "com.mchange.v2.c3p0.WrapperConnectionPoolDataSource", "userOverridesAsString": "HexAsciiSerializedMap:ACED0005..." } }
这个过程中关键步骤包括:
- Fastjson 通过 setter 方法设置 userOverridesAsString 属性
- C3P0ImplUtils.parseUserOverridesAsString() 处理 Hex 字符串

