SpEL DoS 漏洞 CVE-2022-22950 的先决条件?

Preconditions for SpEL DoS vulnerability CVE-2022-22950?

我对 CVE-2022-22950 and the corresponding Spring advisory 有点困惑。后者表示可以通过以下方式利用该漏洞:

[...] specially crafted SpEL expression [...]

但是,允许用户制作 SpEL 表达式的应用程序允许这些用户做几乎任何事情。包括代码注入,它对机密性、完整性和可用性具有全面影响。这里还有很多其他 DoS 机会。以这个 SpEL 片段为例,它执行 pwd 命令:

T(java.lang.Runtime).getRuntime().exec("pwd")

这个命令是相当无害的,但它可以用任何东西代替!现在,SpEL 支持不同的 EvaluationContexts,可用于限制 SpEL 表达式中允许的内容。例如。 SimpleEvaluationContext 禁止类型表达式,如上述 SpEL 片段中的表达式。

这让我想到了两组问题:

查看原文咨询(译自中文)- https://4ra1n.love/post/Xrym_ZDj3/

看起来利用它确实需要评估任意 SpEL 表达式。但是 - 即使在使用通常被认为安全(或至少比 EvaluationContext 更安全)的 SimpleEvaluationContext 时,它也允许 DoS,例如即使在评估任意表达式时也不允许 RCE。但是有了这个漏洞,它将允许 DoS。

公告中显示的易受攻击的代码-

SpelExpressionParser parser = new SpelExpressionParser();
Expression expr = parser.parseExpression("new int[1024*1024*1024][2]");
SimpleEvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
expr.getValue(context);