news 2026/6/21 0:53:04

别再让Solr 5.x-8.3.1成为突破口:手把手复现CVE-2019-17558并配置安全加固

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再让Solr 5.x-8.3.1成为突破口:手把手复现CVE-2019-17558并配置安全加固

Solr安全实战:从CVE-2019-17558漏洞验证到企业级防护体系构建

当企业搜索服务突然成为攻击者的跳板时,运维团队的每一秒都价值千金。2019年曝光的Velocity模板注入漏洞(CVE-2019-17558)至今仍在影响大量未升级的Solr实例,攻击者仅需发送特制请求就能在服务器上执行任意命令。本文将带您深入漏洞本质,不仅演示验证方法,更构建从应急响应到长效防护的完整解决方案。

1. 漏洞深度解析与技术验证

1.1 漏洞形成机制剖析

Velocity模板引擎原本是Solr用于动态生成响应内容的工具,但当params.resource.loader.enabled配置开启时,攻击者可以注入恶意模板代码。其本质是Java反射机制被滥用:

// 恶意模板中的关键代码片段 #set($rt=$x.class.forName('java.lang.Runtime')) #set($chr=$x.class.forName('java.lang.Character')) #set($ex=$rt.getRuntime().exec('whoami'))

影响版本范围

  • Apache Solr 5.0.0 至 8.3.1
  • 默认配置下需手动开启危险参数才可触发

1.2 企业环境验证方案

建议使用隔离的测试环境进行验证,以下是安全验证步骤:

  1. 核心发现(需替换实际地址):

    curl "http://solr-server:8983/solr/admin/cores?indexInfo=false&wt=json"
  2. 配置检查(以demo核心为例):

    GET /solr/demo/config HTTP/1.1 Host: solr-server:8983

    重点关注响应中的:

    { "queryResponseWriter": { "velocity": { "params.resource.loader.enabled": "false" } } }
  3. 无害化验证命令(推荐使用无害命令):

    GET /solr/demo/select?q=test&wt=velocity&v.template=custom&v.template.custom=%23set(...省略编码后的date命令...) HTTP/1.1

注意:实际验证时应使用date等无害命令替代原文中的hostname,避免生产环境影响

2. 紧急加固与配置优化

2.1 立即生效的防护措施

通过以下API即时关闭危险参数(示例使用curl):

curl -X POST -H "Content-Type: application/json" -d '{ "update-queryresponsewriter": { "name": "velocity", "params.resource.loader.enabled": "false" } }' http://solr-server:8983/solr/demo/config

关键参数对照表

参数名称安全值风险值作用
params.resource.loader.enabledfalsetrue禁用外部模板加载
solr.resource.loader.enabledfalsetrue禁用资源加载器
template.base.dir空或受控目录/限制模板目录

2.2 网络层防护策略

结合企业防火墙实施纵深防御:

  1. 访问控制列表

    # iptables示例(需根据实际调整) iptables -A INPUT -p tcp --dport 8983 -s 10.0.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 8983 -j DROP
  2. WAF规则示例(适用于ModSecurity):

    <SecRule REQUEST_URI "/solr/.*select.*wt=velocity" "phase:1,deny,id:10001" SecRule ARGS_GET:v.template.custom "@contains java.lang.Runtime"

3. 版本升级与迁移方案

3.1 升级路径规划

版本选择建议

  • 当前版本 ≤ 7.0 → 升级至 8.11.2+
  • 7.x/8.x → 升级至最新8.11.x或9.x

平滑升级步骤

  1. 备份关键数据:

    # 备份配置 tar -czvf solr_config_backup.tar.gz /opt/solr/server/solr/*/conf # 备份索引 curl "http://localhost:8983/solr/admin/collections?action=BACKUP&name=pre_upgrade"
  2. 使用Solr内置的滚动重启:

    bin/solr restart -c -z zoo1:2181 -p 8983

3.2 升级后验证清单

  1. 核心功能测试:

    # 索引测试 curl -X POST -H 'Content-Type: application/json' \ -d '[{"id":"test1","title":"upgrade test"}]' \ "http://localhost:8983/solr/gettingstarted/update?commit=true" # 查询测试 curl "http://localhost:8983/solr/gettingstarted/select?q=*:*"
  2. 安全配置复核:

    grep -r "params.resource.loader.enabled" /opt/solr/server/solr/

4. 构建企业级Solr安全体系

4.1 安全监控方案

日志监控关键指标

  • 异常的Velocity模板请求
  • 频繁的config API调用
  • 非常规的Java类加载

Prometheus监控示例

scrape_configs: - job_name: 'solr' metrics_path: '/solr/admin/metrics' static_configs: - targets: ['solr-server:8983']

4.2 长效安全机制

  1. 定期安全审计脚本

    import requests from urllib.parse import quote def check_solr_vulnerability(url): test_cmd = quote("#set($x='')...省略编码后的date命令...") try: resp = requests.get(f"{url}/select?q=test&wt=velocity&v.template.custom={test_cmd}") return "Dec 2023" not in resp.text # 检查无害命令响应 except: return False
  2. 安全配置基线

    <!-- solrconfig.xml安全片段 --> <queryResponseWriter name="velocity" class="solr.VelocityResponseWriter"> <str name="template.base.dir">${solr.install.dir:}/restricted_templates</str> <bool name="params.resource.loader.enabled">false</bool> <bool name="solr.resource.loader.enabled">false</bool> </queryResponseWriter>

在电商平台的实际运维中,我们曾通过自动化监控发现某业务线Solr集群每小时遭受超过200次漏洞探测请求。通过及时关闭危险参数并升级版本,成功在攻击者得手前完成防护。建议企业建立季度性的搜索服务安全评审机制,将配置检查纳入持续交付流水线。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/21 0:53:04

基于LPC54114与NxH3670的USB蓝牙音频Dongle设计与实现

1. 项目概述在无线音频的世界里&#xff0c;如何让一台传统的、只有有线接口的PC&#xff0c;也能享受到高品质、低延迟的蓝牙音频体验&#xff1f;这背后需要一个“翻译官”和“搬运工”。这个角色&#xff0c;就是今天要深入拆解的USB音频Dongle。它一端通过USB与PC相连&…

作者头像 李华
网站建设 2026/6/17 15:26:02

嵌入式电容触摸技术:uSAFA算法与TSI硬件配置实战解析

1. 项目概述&#xff1a;从硬件到算法的嵌入式触控实现在嵌入式人机交互领域&#xff0c;电容式触摸感应技术因其美观、耐用和低成本&#xff0c;已经全面取代了传统的机械按键。无论是你家里的智能空调面板&#xff0c;还是工厂产线上的操作终端&#xff0c;背后很可能都有一颗…

作者头像 李华
网站建设 2026/6/21 0:52:39

像训练神经网络一样优化AI技能 SkillOpt

像训练神经网络一样训练Agent技能 目录 像训练神经网络一样训练Agent技能 为什么我们需要SkillOpt? SkillOpt的核心洞察:技能是Agent的"外部权重" SkillOpt是如何工作的?一个完整的例子 第一步:初始化 第二步:Rollout(前向传播) 第三步:Reflect(反向传播) 第四…

作者头像 李华
网站建设 2026/6/17 12:28:21

高中生用TF-IDF+逻辑回归识别社交文本中的抑郁信号

1. 项目概述&#xff1a;当高中生用NLP解码社交平台上的抑郁情绪信号 你有没有刷到过这样一条动态&#xff1a;“今天又熬到凌晨三点&#xff0c;明明很累却睡不着&#xff0c;窗外下雨的声音像在敲打我的太阳穴。”——它没写“我抑郁了”&#xff0c;但字里行间透出的疲惫、失…

作者头像 李华
网站建设 2026/6/15 20:25:54

N皇后问题的遗传算法Python实战:从编码到早停的工程化实现

1. 这不是教科书&#xff0c;而是一次真实的GA项目复盘&#xff1a;从Matlab到Python的N皇后实战手记 你点开这篇文章&#xff0c;大概率不是为了背诵“遗传算法是模拟生物进化过程的优化方法”这种定义。你真正想搞清楚的是&#xff1a;当一个真实项目摆在面前——比如用遗传算…

作者头像 李华