文章总结: 本文剖析SophosXG防火墙三个严重漏洞。CVE-2024-12729通过构造特殊JsonArray绕过补丁实现RCE;CVE-2024-12728因HA配置缺陷导致弱口令;CVE-2025-7382则是结合OTP与HA时的命令注入。文章复现了攻击路径并分析了官方修复方案。 综合评分: 95 文章分类: 漏洞分析,代码审计,漏洞POC
Sophos XG Firewall RCE漏洞深度剖析
原创
m4yfly
奇安信天工实验室
2025年9月24日 12:10 北京
目
录
一、前 言
二、历史漏洞
三、漏洞分析
四、总 结
一
前 言
Sophos XG Firewall 是一款知名的防火墙解决方案,本文针对该产品的三个较严重CVE漏洞进行了分析复现。
架构
该设备的Web服务架构简图如上所示,用户发起的Web请求经过Apache后流入Jetty中的Java应用,Java部分主要负责展示数据与后端csc应用的交互操作(对数据库只读),Java应用中对请求操作过滤后,将合法的操作封装为opcode通过299端口转发给本地的csc二进制去处理,而csc通过对自定义扩展的Perl的脚本进行调用以完成其主要业务逻辑。
所以大部分漏洞定位及补丁分析只需要关注Java及csc调用的代码即可。
二
历史漏洞
根据漏洞公告,Sohpos XG Firewall近年来只在2022年出现过两个无条件RCE漏洞,而本次复现的漏洞涉及到对相关漏洞的扩展,所以先简单回顾下相关漏洞。
01
CVE-2022-1040 认证前代码执行漏洞
该漏洞的根本原因是Java应用部分的Json的键中允许出现\u0000,而csc部分使用json-c的开源库解析Java传入的Json内容,解析时如上图示例,csc将key与key\u0000识别为相同的键,后方的恶意键值对将覆盖掉之前的经过Java部分检查的值,最终导致用户可以执行任意opcode,用户可通过伪造管理员登录等方式进行攻击并最终实现RCE效果。
如上方的poc中,攻击者通过覆盖mode参数,确保最终csc的响应值为200,实现在不知道正确密码的情况下成功登录admin账号。
02
CVE-2022-3236 认证前代码执行漏洞
CVE-2022-1040漏洞后java部分增加了json的key中的校验,但是未对json中的额外字段进行限制,在这些json传递给csc进行处理时,csc在进行检查时将触发以上perl代码逻辑,可以看到_discriminator字段中的某些值将直接被拼接到字符串中并被eval执行,最终导致认证前代码执行。
三
漏洞分析
01
CVE-2024-12729 认证后代码执行漏洞
根据官网漏洞描述,此漏洞可使普通用户在认证后实现远程代码执行效果。所以单看描述像是与CVE-2022-3236有关的补丁绕过。之前的两个RCE漏洞修复时主要是在RequestCheckFilter中增加了对json的多个检查,不允许出现unicode字符,不允许出现黑名单中的key。最终对RequestCheckFilter检查可以发现如下变化:
chain.doFilter的位置可知,如果try部分中出现Exception又不会影响业务中的数据处理,则这里的Exception将被静默处理,直接走到chain.doFilter绕过所有检查。
进一步分析try的代码块可知,如果在json字段传入非json数据将出现解析异常实现绕过,但后续业务因为无法解析json中的数据将失败。而深入分析isValidJson实现后可发现新的抛出异常的方法,关键代码如下所示:
isValidJson中通过深度优先的递归检查实现对之前RCE的补丁,可以看到在对JsonArray进行检查时,如果某个item为null,将抛出异常。因为恶意的JsonArray可以放在业务无关的键中,后续的业务逻辑只要不使用这个JsonArray仍然可以进行正常的业务处理,所以只要构造出符合条件的json即可绕过这里的补丁。 根据以下代码可知,只要jsonArray的字符串中出现连续两个, ,最终的jsonArray中将出现一个null对象。
{"123":[1,,3],"mode\u0000":"123",username":"admin"…}
最终构造的示例poc如上,构造的json开头出现一个恶意jsonArray将绕过补丁,所以又可以使用mode\u0000这样的payload来实现任意opcode调用。
同时在SessionCheckHelper的实现中可以发现也新增了部分补丁限制了认证前json中允许出现的key,结合之前的分析可以确定此漏洞点与CVE公告中的利用条件一致,最终需要普通用户认证后才能触发任意opcode并实现进一步利用。
02
CVE-2024-12728 弱口令漏洞
根据官方公告,如果服务器启用了HA(高可用性)集群配置,在HA建立连接以后,非随机的SSH登录密钥仍然有效,受此漏洞影响的设备可能导致攻击者从SSH登录成功。
所以很好理解,参考以上正常逻辑的简图,HA服务通过ssh交互并通讯,在最开始将使用相同的key初始化密码,该漏洞是因为在建立连接后没有正确清空SSH密钥。
如上图可以发现进行HA配置时,不同机器使用了相同的“随机”key作为初始化密钥。
根据以上代码可知配置时直接把base64_encode以后的passkey(上面的随机key)作为了密码。所以使用hauser进行登录,密码为Base64(‘X1+6L3V(gBrhnAFl’)可以直接登录成功。
03
CVE-2025-7382 认证前命令注入漏洞
根据漏洞信息可知,如果管理员用户启用了OTP身份验证与HA配置,则攻击者可通过HA的从设备实现认证前的代码执行能力。
通过漏洞描述中的多种配置要求可以很容易定位到以上代码,可以观察到在用户进行登录时,如果$otp_status=1(启用了OTP验证),且”$g_ha_ownstatus == $HA_AUX || $g_ha_ownstatus == $HA_FAULT”(为HA的从设备),则用户完全可控的$request->{password}参数将直接拼接入$login_req中,并最终传递给/bin/ssh -F /static/ha/hauser.conf $peerdedicatedip “opcode -s nosync login -t json -b $login_req” 进行执行,默认情况下ssh中指定的命令将在HA的另一台机器上执行(正是上一漏洞提到的HA同步逻辑)。所以只需要闭合单引号后即可嵌入新的命令。
通过对比新旧版本相关实现,可以观察到官方的补丁并不是直接在以上代码中进行修复,通过strace sshd进程可以发现,最后的漏洞触发点通过/bin/clsh执行。
补丁直接在/bin/clsh中进行了限制,下图正是/bin/clsh的diff结果。
可以观察到在执行opcode login命令时,不再直接通过/bin/sh执行,而是去执行do_login.sh,其内容如下:
#!/bin/shexec /scripts/auth/do_login.pl "$cmd"
最终通过do_login.pl执行$cmd参数,其内容如下:
用户传入的json字符串交给exec_opcode使用,避免了直接通过shell执行,修复了此漏洞。
四
总 结
本文深入分析并复现了 Sophos XG Firewall 近期的三个严重漏洞 (CVE-2024-12729, CVE-2024-12728,CVE-2025-7382)。文章从回顾历史漏洞 CVE-2022-1040 和 CVE-2022-3236出发,详细阐述了新漏洞如何通过巧妙的补丁绕过实现认证后远程代码执行。同时,本文还对HA集群配置下的认证绕过和命令注入漏洞进行了复现,并对官方的修复方案进行了深入剖析,旨在为安全研究人员提供有价值的参考。
五
参考链接
1. CVE-2022-3236: Sophos Firewall User Portal and Web Admin Code Injection
2. Resolved Multiple Vulnerabilities in Sophos Firewall
3. Resolved Multiple Vulnerabilities in Sophos Firewall
【版权说明】
【版权说明】
本作品著作权归m4yfly所有
未经作者同意,不得转载
m4yfly
天工实验室安全研究员
研究领域:代码审计、IOT安全
往期回顾
01
探索NEGOEX协议与相关攻击面
02
腾讯云RASP挑战赛绕过思路挖掘
03
ANTLR改进 — 像使用Tree-sitter一样使用ANTLR
04
利用binfmt_misc机制加快CGI调试
每周三更新一篇技术文章 点击关注我们吧!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:奇安信天工实验室 m4yfly《Sophos XG Firewall RCE漏洞深度剖析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论