记一次Apache下一个网关项目的RCE漏洞挖掘

admin 2025年4月8日13:50:47评论10 views字数 2075阅读6分55秒阅读模式

免责声明:文章中内容来源于互联网,涉及的所有内容仅供安全研究与教学之用,读者将其信息做其他用途而造成的任何直接或者间接的后果及损失由用户承担全部法律及连带责任文章作者不承担任何法律及连带责任!如有侵权烦请告知,我们会立即删除整改并向您致以歉意。

0x00.介绍

哈喽大家好我是island,好久都没有水文章了,前段时间有一些事情让我突然想起来之前23年挖过的一个漏洞本着水文章的目的,下面让我来回顾一下。

0x01.正文

首先让我们先来介绍一下java中的SPEL表达式

SpEL(Spring Expression Language)是 Spring 框架提供的一种功能强大的表达式语言,常用于配置文件、注解、Spring Bean 的属性赋值等场景。

SpEL 是 Spring 的一部分,可以和 Spring Bean 管理、注解等功能深度集成。默认支持在 @Value@Scheduled@Cacheable@PreAuthorize 等注解中使用。使用 EvaluationContext 和 ExpressionParser 也可以在代码中手动执行 SpEL 表达式。

接下来从安全的方面再来说一下SPEL表达式

SPEL表达式分别可以通过两个类

StandardEvaluationContext

SimpleEvaluationContext

parseExpression方法来执行表达式的内容。

两个类的全路径分别如下

org.springframework.expression.spel.support.StandardEvaluationContext;org.springframework.expression.spel.support.SimpleEvaluationContext;
其中通过StandardEvaluationContext类在进行SPEL表达式执行时,它允许执行任意 Java 类、静态方法、反射操作和命令执行,如果不加限制,用户输入的 SpEL 表达式可能导致远程代码执行(RCE)等严重漏洞。
经典的漏洞可参考CVE-2022-22963
记一次Apache下一个网关项目的RCE漏洞挖掘
漏洞代码如下,在直接使用StandardEvaluationContext类进行处理SPEL表达式的情况下,并且表达式内容用户可控则会产生spel表达式注入
String input = request.getParameter("exp");ExpressionParser parser = new SpelExpressionParser();Expression exp = parser.parseExpression(input);Object result = exp.getValue(); // ⚠️ 直接执行用户输入的表达式
0x02.漏洞详情
拿到代码后首先对整个请求的路由和逻辑进行查看,然后发现该系统使用了SPEL表达式,并且是通过StandardEvaluationContext类进行执行的,故存在漏洞
记一次Apache下一个网关项目的RCE漏洞挖掘

在该系统2.5.1 版本中,添加了Mock插件,并支持SPEL表达式功能,这会造成安全问题,使攻 击者能够通过SEPL表达式执行任意系统命令

记一次Apache下一个网关项目的RCE漏洞挖掘
根据功能的浏览以及路由查看定位到大致流程如下
1.本地搭建并登录apacheshenyu,默认端口9095
记一次Apache下一个网关项目的RCE漏洞挖掘
2.在点击此处启用mock插件
记一次Apache下一个网关项目的RCE漏洞挖掘
3.点击此处对mock插件进行设置
记一次Apache下一个网关项目的RCE漏洞挖掘
4.点击此处新增一个选择器
记一次Apache下一个网关项目的RCE漏洞挖掘
5.将 type 改成full,并填入自定义参数
记一次Apache下一个网关项目的RCE漏洞挖掘
6.点击此处创建一个规则
记一次Apache下一个网关项目的RCE漏洞挖掘
7.创建一个新的对应规则,并写入参数name处写入自己想设置的路径 并在此处输入一个恶意的SPEL表达式,其内容为
${expression|T(java.lang.Runtime).getRuntime().exec ("calc. exe")}
记一次Apache下一个网关项目的RCE漏洞挖掘
8.点击保存
记一次Apache下一个网关项目的RCE漏洞挖掘
9.点击确认按钮,访问相应的路径后,就会执行spel表达式中的内容,默认端口为9195
10.对9195端口和自定义规则的url进行访问,可以看到spel表达式执行成功,计算器已
经成功弹出。
记一次Apache下一个网关项目的RCE漏洞挖掘
记一次Apache下一个网关项目的RCE漏洞挖掘
综上所述攻击者可以去通过SPEL表达式去加载系统中的任意类的任意函数,如通过加载runtime中的exec函数去执行系统命令。
0x03.官方的修复
后续官方进行了修复,将StandardEvaluationContext替换为SimpleEvaluationContext来使用默认安全的SPEL表达式
记一次Apache下一个网关项目的RCE漏洞挖掘
记一次Apache下一个网关项目的RCE漏洞挖掘
其实该功能的本质只是去返回一些数据,所以修改为SimpleEvaluationContext也并不影响业务和功能设计。
此处漏产生的原因在于开发者使用了默认的SPEL表达式类而并不清楚此时可通过SPEL表达式去调用系统任意类从而实现恶意操作。

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。

原文始发于微信公众号(深白网安):记一次Apache下一个网关项目的RCE漏洞挖掘

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月8日13:50:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次Apache下一个网关项目的RCE漏洞挖掘https://cn-sec.com/archives/3929589.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息