solr 远程命令执行 (CVE-2019-17558)漏洞复现
solr 远程命令执行 (CVE-2019-17558)漏洞复现
一、报告目的
1.1 报告对象
系统安全运维人员:该报告提供了 Apache Solr 中 CVE-2019-17558 漏洞的详细复现过程,可以帮助运维人员理解漏洞的特性,识别系统是否受到影响,并采取相应的安全加固措施。
渗透测试人员:报告展示了漏洞的利用方法和攻击特征,有助于渗透测试人员了解如何验证目标系统的漏洞是否存在,并模拟攻击进行漏洞评估。
开发团队:本报告详细分析了漏洞的根源和影响,开发团队可以借此了解如何在未来的开发过程中避免类似的安全问题,提升代码的安全性。
管理层人员:对于关注公司网络安全、IT架构安全的管理人员,本报告提供了该漏洞可能带来的安全风险评估和危害分析,帮助管理层做出安全决策。
1.2 报告目的
本报告的目的在于分析和复现 Apache Solr 中的远程代码执行漏洞(CVE-2019-17558)。报告通过漏洞复现过程展示漏洞存在的风险,提供相应的攻击方式和应对措施,为相关技术人员提供必要的修复建议。
1.3 报告评价
读者通过阅读本报告,应该能获得以下评价与收获:
安全意识提升: 读者将对 CVE-2019-17558 漏洞的性质有清晰的理解,能够认识到即使是看似不起眼的配置错误也可能导致严重的远程代码执行风险,从而提升日常开发和运维过程中的安全意识。
漏洞识别能力增强: 通过报告中的漏洞复现过程,读者能够掌握如何识别类似的漏洞并采取相应的防护措施,增强渗透测试和漏洞检测的能力。
实际操作经验: 渗透测试人员和安全运维人员能够通过报告中提供的实际攻击步骤和漏洞利用方法,获得实战操作经验,提升应对实际攻击的能力。
修复和防御措施指导: 通过具体的修复建议,读者能够在自己的系统中迅速定位问题并采取措施修复漏洞,防止类似漏洞的发生,提升系统的安全性。
二、实验原理
漏洞背景
- Apache Solr 是一个开源的搜索平台,广泛用于企业级搜索应用。
- Velocity 模板引擎 是一种用于在应用程序中生成动态内容的工具,Solr 使用它来处理一些请求和响应的渲染。
- 通过 Velocity 模板注入,攻击者可以在 Solr 请求中嵌入恶意模板,利用 Solr 系统中的执行环境来运行任意 Java 代码。
漏洞触发条件
- params.resource.loader.enabled 配置项默认为 false,但它可以被恶意请求修改为 true,这样 Solr 就允许外部加载资源文件。
- 通过构造带有恶意 Velocity 模板的请求,攻击者能够绕过系统的安全限制,执行任意的 Java 代码。
漏洞利用流程
- 攻击者首先需要访问 Solr 的某个特定端点,通常是 /select 或 /update,并且能够在请求中插入任意的查询参数。
- 在 CVE-2019-17558 中,攻击者利用 Solr 的 wt=velocity(Velocity 渲染模板)参数和恶意的模板参数来构造请求。
- 恶意模板注入:攻击者通过构造请求将恶意的 Velocity 模板注入到请求参数中,使得服务器在处理请求时执行这些模板,达到执行任意代码的目的。
三、漏洞详细情况说明
3.1 影响范围
受影响的版本:
此漏洞影响 Apache Solr 5.0.0 至 8.3.1 版本。只有在使用 Velocity Response Writer 的场景下,且相关配置项(例如 params.resource.loader.enabled 和 solr.resource.loader.enabled)被错误地启用时,漏洞才会被触发。
配置和部署条件:
仅在 Velocity 模板引擎被启用,并允许外部资源加载的情况下,攻击者才能利用该漏洞。因此,默认配置下风险较低,但许多用户为了扩展功能或调试时可能会手动修改配置,从而引入安全隐患。
可能受影响的系统:
- 搜索和数据索引系统: 依赖 Apache Solr 进行搜索和数据索引的企业应用。
- 企业级搜索解决方案: 部署在企业内部或面向公网的搜索平台。
- Web 应用和大数据平台: 集成 Solr 服务的 Web 应用或大数据处理系统,尤其是那些直接对外开放的服务。
潜在风险与后果:
漏洞可导致远程代码执行,使攻击者能够在受影响的服务器上执行任意命令,进而可能获取系统权限。
如果 Solr 实例部署在公共网络或缺乏有效访问控制,攻击者利用该漏洞可以轻易突破防御,造成数据泄露、服务中断或系统完全失控。
3.2 评分
CVE-2019-17558 漏洞的 CVSS v3.0 评分为 8.8,属于高风险漏洞,建议尽快修复该漏洞,特别是系统暴露在公共网络上时。
3.3 漏洞详情
CVE-2019-17558 是一个影响 Apache Solr 的远程代码执行漏洞,存在于 Velocity 模板引擎的配置中。攻击者通过构造恶意请求,利用未正确禁用的外部资源加载器,注入 Velocity 模板并执行任意 Java 代码。此漏洞影响 Apache Solr 版本 5.0.0 至 8.3.1,允许攻击者远程执行命令、获取敏感信息或完全控制受影响系统。修复方法是升级 Solr 至 8.4.0 及更高版本,并禁用外部资源加载器。
四、漏洞存在条件
Velocity 模板引擎启用:Solr 必须启用 Velocity 模板引擎来处理请求,特别是 wt=velocity(Velocity 响应类型)配置项被使用时。
外部资源加载器未禁用:Solr 配置中的 params.resource.loader.enabled 或 solr.resource.loader.enabled 设置为 true,允许加载外部资源文件。这使得攻击者能够通过构造恶意请求,加载并执行未经授权的 Velocity 模板。
使用的 Solr 版本:漏洞存在于 Apache Solr 版本 5.0.0 至 8.3.1 中。没有及时升级的系统容易受到该漏洞的影响。
五、实验工具
Windows攻击机(192.168.144.138)
Kali2024靶机(192.168.1144.140)
六、漏洞复现参考资料
七、操作过程
1.拉取CVE-2019-17558复现环境
在靶机对应的漏洞文件夹下运行docker compose up
运行docker ps可查看容器运行情况
由图可知,容器成功运行在本机8983端口
2.信息收集
在攻击机中利用fscan 运行命令:fscan.exe -h 192.168.144.140
发现靶机的开放了两个端口分别是8983和8834
接着用nmap扫描开放的端口的对应服务
发现8983端口的对应服务为apache solr,即可确定渗透注入点
用dirsearch运行命令: dirsearch -u http://192.168.144.140:8983,进行目录探测
在浏览器中进行访问,并没有发现明显漏洞注入点
3.漏洞利用
默认情况下params.resource.loader.enabled配置未打开,无法使用自定义模板。可以先通过如下API获取所有的核心
在vulhub中核心就是demo
通过下边API获取所有内核名称
http://118.193.36.37:8468/solr/admin/cores?indexInfo=false&wt=json
在url访问/solr/demo/config
发现状态码为400,即访问失败
启用配置 params.resource.loader.enabled 为true,在url访问/solr/demo/config,burpsuit抓包
改成POST然后修改启动配置,修改请求体
最后发现页面成功回显
成功将启用配置 params.resource.loader.enabled 为true
利用hackbar插件注入 Velocity 模板即可执行任意命令
最终成功执行ls命令,得到所有隐私目录
八、数据分析
8.1 流量分析
在利用攻击机进行攻击时,我打开wireshark抓包,并存储在csv文件中
通过对每一条数据包的分析,可以发现该攻击方式的流量特征:
- 目标端口固定
流量主要集中在源端口 50373、50376 与目的端口 8983 之间的通信,8983 端口通常是 Solr 服务的默认端口,这表明攻击者的目标明确指向 Solr 服务。
- 攻击请求特征
多次出现包含恶意参数的 HTTP GET 请求,请求路径为 /solr/demo/select,且带有 wt=velocity 和 v.template=custom 参数,这是利用 Solr 的 Velocity 模板注入漏洞(CVE - 2019 - 17558)的典型特征。请求中还包含通过反射调用 java.lang.Runtime 类并执行系统命令(如 ls)的代码
- 请求频率较高
在短时间内(如 1.055052 秒和 1.518454 秒)出现多次相同的攻击请求,这可能是攻击者在尝试不同的命令或者确认攻击是否成功,体现了攻击者试图利用漏洞的急切性
- 响应状态正常
针对攻击请求,服务器返回了 HTTP/1.1 200 OK 的响应,说明服务器正常处理了请求,但这并不意味着攻击未成功,有可能攻击代码已经在服务器端执行。
- 存在 TCP Keep - Alive 机制
在攻击过程中,存在大量的 TCP Keep - Alive 数据包,用于维持连接的有效性,这有助于攻击者在较长时间内持续进行攻击或者获取攻击结果。例如:
8.2 日志分析
我在靶机查看了docker的行为日志,并把日志保存在文件log.txt
日志特征
1.Velocity 模板注入痕迹
ERROR [qtp1947426831-24] o.a.s.s.SolrDispatchFilter handleException] org.apache.velocity.exception.MethodInvocationException: Invocation of method ‘exec’ in class ‘java.lang.Runtime’ failed
分析:攻击 Payload 通过v.template=custom参数注入 Velocity 代码,若执行失败(如命令语法错误),Solr 会记录 Velocity 引擎抛出的异常。
2.反射调用异常
Caused by: java.lang.NoSuchMethodException: java.lang.Runtime.exec([Ljava.lang.String;)java.lang.Process
分析:攻击 Payload 通过反射调用java.lang.Runtime.exec执行命令,若参数格式错误(如缺少数组括号),会触发NoSuchMethodException。
3.命令执行失败记录
java.io.IOException: Cannot run program “ls”: error=2, No such file or directory
分析:若攻击尝试执行不存在的命令(如ls拼写错误),会触发IOException。
4.高频率异常请求
WARN [qtp1947426831-24] o.a.s.s.SolrDispatchFilter handleException] org.apache.solr.common.SolrException: org.apache.velocity.exception.ParseErrorException: Encountered “
分析:攻击尝试多次发送含错误参数的请求,导致 Solr 记录高频异常。
8.3 漏洞利用行为总结
针对漏洞利用过程中的流量和服务器日志进行发现,总结漏洞利用过程中行为特征如下:
1.目标探测与配置确认
攻击者首先探测目标 Apache Solr 实例是否启用了 Velocity 模板响应功能,并确认是否存在错误配置(例如允许外部资源加载器)。
2.构造恶意请求
利用已知漏洞,攻击者构造包含恶意 Velocity 模板代码的 HTTP 请求,该请求中通常包含参数 wt=velocity 和 v.template.custom。通过这些参数,攻击者将恶意代码注入到模板中。
3.远程代码执行
当 Solr 服务器处理该请求时,Velocity 模板引擎解析并执行注入的恶意代码,从而实现任意 Java 代码的执行。此步骤使攻击者能够执行系统命令、读取敏感信息或完全接管服务器。
4.后续利用
成功利用漏洞后,攻击者可以进一步渗透系统,获取更多权限,甚至在服务器上部署后门,实现长时间的控制和数据窃取。
九、漏洞修复建议
1.升级 Apache Solr 版本:
最直接的修复方式是升级到 Apache Solr 8.4.0 或更高版本,因为这些版本已修复该漏洞,并加强了 Velocity 模板引擎的配置,阻止了外部资源加载和模板注入。
2.禁用 Velocity 模板功能:
如果不需要使用 Velocity 模板引擎,最好禁用相关功能,防止潜在的利用风险。可以通过修改 solrconfig.xml 文件,确保 wt=velocity 参数不被启用。
3.配置限制和访问控制:
限制访问:通过防火墙或访问控制列表(ACL)限制对 Solr 服务的访问,仅允许可信的内部或外部 IP 访问。避免公开暴露 Solr 服务,特别是在互联网环境中。
应用访问控制:确保只有授权的用户可以执行特定操作,防止未经授权的用户访问敏感功能。
4.安全配置审查:
定期检查 Solr 配置,确保所有安全选项已启用,并且没有过时的默认配置(如开启 Velocity 模板引擎)。
确保服务器的操作系统和 Java 环境也保持最新,以减少其他潜在的安全漏洞。
5.监控和日志审计:
开启日志记录功能,确保可以跟踪所有的请求和响应,特别是 HTTP 请求中包含 wt=velocity 或其他可疑参数时。
使用监控工具检测异常行为,及时识别并响应可能的攻击。
6.补丁管理和安全扫描:
及时应用所有官方发布的安全补丁,并使用安全扫描工具定期检查系统中是否存在已知漏洞。
关注 Apache Solr 项目的安全公告,确保及时跟进修复建议。
十、总结
本次实验复现了Solr远程代码执行漏洞。实验中启用模板构造恶意请求,实现远程命令执行。结果显示漏洞可窃取敏感信息并控制系统。验证提醒用户及时更新系统或关闭无用功能,强化防护,确保为漏洞修复提供充分依据。