SpEL表达式注入漏洞分析、检查与防御

本文深入探讨了Spring的SpEL表达式注入漏洞,包括CVE-2022-22963和CVE-2022-22980。详细介绍了这两个漏洞的攻击路径、影响及修复措施,并提出了检测与防御手段,强调了对用户输入的校验和使用安全的EvaluationContext的重要性。
摘要由CSDN通过智能技术生成

在安全角度来看外部来源的数据,均应视为不可信数据,对外部数据,其包含的所有信息都须经过校验或者过滤,再向下游服务进行传递。若无防护手段,攻击者可以通过构造恶意输入,对服务进行攻击。程序中如果使用未经校验的输入构造SpEL语句,就有可能造成SpEL表达式注入漏洞。部分SpEL表达式注入漏洞CVSS3.x 评分极高,nvd认定为高危漏洞,具有高致命性。

1 SpEL表达式介绍

Spring表达式语言(Spring Expression Language,SpEL)是 Spring Framework的核心技术之一,其支持在运行时查询和操作对象图。SpEL语法类似于Unified Expression Language,但提供了更加丰富的功能,最特别的是方法调用与字符串模板功能。SpEL主要支持以下功能:

    • 文字表达式

    • 布尔和关系运算符

    • 正则表达式

    • 类表达式

    • 访问 properties, arrays, lists, maps

    • 方法调用

    • 关系运算符

    • 参数

    • 调用构造函数

    • Bean引用

    • 构造Array

    • 内嵌lists

    • 内嵌maps

    • 三元运算符

    • 变量

    • 用户定义的函数

    • 集合投影

    • 集合筛选

    • 模板表达式

SpEL功能强大,可以操作类和方法。

    • 引用方法:dog.run()

    • 引用静态方法:T(java.lang.Math).PI

    • 类实例化:使用new实例化对象,类名必须是全限定名,java.lang包内的除外如Integer、String等

    • 变量定义及赋值引用

在解析SpEL之后,获取表达式结果时,可以指定表达式的上下文对象:EvaluationContext

    • (默认)StandardEvaluationContext:支持全套SpEL语言和功能配置选项,功能强大但存在隐患

    • SimpleEvaluationContext:仅支持SpEL语法的子集,不包括Java类型引用,构造函数和bean引用,功能相对简单但是安全

2 SpEL表达式注入漏洞

历史报告的大部分SpEL漏洞大多涉及不受信任的用户输入的情况,恶意攻击者可能利用SpEL实现任意代码执行、拒绝服务等攻击,与SpEL相关的部分CVE漏洞见表 1。

表 1 部分SpEL注入CVE漏洞

CVE ID

概述

评分cvss3.x

CVE-2022-22963

在Spring Cloud Function 相关版本,存在SpEL表达式注入。恶意攻击者无需认证可通过构造特定的 HTTP 请求头注入 SpEL 表达式,最终执行任意命令,获取服务器权限。

9.8

CVE-2022-22980

Spring Data for MongoDB是 Spring Data 项目的一部分,该项目旨在为新的数据存储提供熟悉和一致的基于Spring的编程模型ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值