加入收藏 | 设为首页 | 会员中心 | 我要投稿 泉州站长网 (https://www.0595zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

Java代码审计之SpEL表达式注入

发布时间:2019-03-17 05:46:29 所属栏目:策划 来源:Lateink
导读:副标题#e# 一、SpEL 表达式注入 Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言、用于在运行时查询和操作对象图;语法上类似于 Unified EL,但提供了更多的特性,特别是方法调用和基本字符串模板函数。SpEL 的诞生是为了给 Spring 社区提

再来看看这个 filterSubscriptions 函数在哪里调用。从函数的调用回溯追踪调用链如下:

  1. filterSubscriptions -> findSubscriptionsInternal -> findSubscriptions -> sendMessageToSubscribers 

2. sendMessageToSubscribers 即发送消息的功能

回顾一下整个流程,SpEL 表达式从 headers 中 selector 获取,即发送请求时添加 selector 到请求的 header 即可传入,然后生成 expression 对象传入 this.subscriptionRegistry,然后当发送消息的时候,最终会直接从 this.subscriptionRegistry 取出并调用 expression.getValue() 执行我们传入的 SpEL 表达式。

验证过程,在 expression.getValue() 这里打个断点,看看发送消息是否会拦截并查看调用链是否如上述分析一样。

Bingo!

简单总结一下 SpEL 表达式注入的分析思路,可以先全局搜索 org.springframework.expression.spel.standard, 或是 expression.getValue()、expression.setValue(),定位到具体漏洞代码,再分析传入的参数能不能利用,最后再追踪参数来源,看看是否可控。Spring Data Commons Remote Code Execution 的 SpEL 注入导致的代码执行同样可以用类似的思路分析。

五、漏洞修复

SimpleEvaluationContext、StandardEvaluationContext 是 SpEL 提供的两个 EvaluationContext:

  • SimpleEvaluationContext - 针对不需要 SpEL 语言语法的全部范围并且应该受到有意限制的表达式类别,公开 Spal 语言特性和配置选项的子集。
  • StandardEvaluationContext - 公开全套 SpEL 语言功能和配置选项。您可以使用它来指定默认的根对象并配置每个可用的评估相关策略。

SimpleEvaluationContext 旨在仅支持 SpEL 语言语法的一个子集。它不包括 Java 类型引用,构造函数和 bean 引用;所以最直接的修复方式是使用 SimpleEvaluationContext 替换 StandardEvaluationContext。

这是我个人学习代码审计过程中的小总结,可能逻辑性相对来说没那么严谨,但是个人觉得这是一个比较通俗易懂的分析方法,不喜勿喷。

【编辑推荐】

  1. WinRAR被曝严重安全漏洞 5亿用户受影响
  2. 警告:WinRAR关键漏洞影响过去19年发布的所有版本
  3. 4G/5G再曝新漏洞 攻击者可拦截电话和追踪用户位置
  4. 5G落地不能急 三个4G/5G新漏洞被曝出
  5. 任意URL跳转漏洞修复与JDK中getHost()方法之间的坑
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:泉州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读