Apache Axis这个老古董,远程最近又被人翻出来折腾了。命令一个远程命令执行漏洞,执行CVE-2023-51441,漏洞直接把那些还在用Axis 1.x的远程企业架在火上烤。说白了,命令攻击者只要往特定接口塞一段精心构造的执行序列化数据,就能在服务器上执行任意命令。漏洞不是远程吓唬你,这玩意儿利用门槛低得离谱,命令一个HTTP请求的执行事。
我见过不少老系统,漏洞银行、远程保险、命令电信,执行后台还挂着Axis跑核心接口。他们不是不想升级,是真不敢动。那些业务逻辑耦合在Axis的SOAP处理链上,动一处崩一片。于是漏洞公告出来几个月,补丁打了,但很多人压根没重启服务——补丁没生效,等于裸奔。
漏洞根子出在Axis的ServiceAdmin组件上。它允许通过WSI(Web Service Invocation)框架动态部署服务,但没做严格的类过滤。攻击者可以构造一个恶意的javax.xml.transform.TransformerFactory实现类,利用JNDI注入或者反序列化链,直接打进JVM。你看,又是反序列化,Java世界的老朋友了。
实际利用起来有多简单?我拿测试环境试过,用ysoserial生成一个CommonsCollections的payload,post到/axis/services/AdminService,再带上正确的SOAPAction头,服务器直接弹了个计算器。整个过程不到十秒,不需要任何认证。真实攻击里,谁会弹计算器?人家直接写webshell,或者反弹shell到内网。
更恶心的是,这个漏洞不光影响Axis本身。很多中间件和框架,比如老版本的WebSphere、JBoss,默认集成Axis。你觉得自己用的是WebSphere,结果底层还是那个漏洞。排查的时候,光找Axis的jar包就够你喝一壶,它可能藏在某个ear包的lib目录里,也可能被其他组件间接引用。
修复方案倒是明确:升级到Axis 1.4.3以上,或者干脆迁移到Axis2/CXF。但现实里,我见过一家公司,他们的系统是2008年写的,业务方说“能用就行”,运维说“重启要审批”,安全说“我们发了通告”。三个月过去,漏洞还晾在那。直到某天安全扫描扫出异常流量,才发现已经被入侵了。日志里全是POST请求,源IP来自国外,数据早就被拖走了。
说句难听的,这种老漏洞就是给那些“技术债”还不上的人准备的。你欠下的每一次“以后再说”,最后都会变成攻击者的提款机。别指望防火墙能拦住,攻击流量伪装得和正常SOAP请求一模一样。也别指望WAF能识别,payload可能分片传输,绕过规则。
如果你还在维护Axis系统,现在就去查版本号。打开axis.jar的MANIFEST.MF,看看Implementation-Version。低于1.4.3的,赶紧打补丁,然后强制重启。别嫌麻烦,比起事后被勒索病毒加密整个数据库,这点重启时间真不算什么。要是连版本号都查不到,那更危险——你可能压根不知道自己的系统里藏着什么。