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 片段中的表达式。
这让我想到了两组问题:
CVE-2022-22950
是否与使用不受限制的 EvaluationContext
受污染 SpEL 表达式的应用程序相关?
例如。足够信任选定用户(如管理员)以允许他们执行任意代码的应用程序?或者,理想情况下,有额外的沙盒措施到位?
似乎在这种情况下(尽管它们可能是有问题的)这个 DoS 漏洞并没有给游戏添加任何新内容。改进安全建议并警告不要以宽松的方式处理用户控制的 SpEL 代码是否有意义 EvaluationContext
?
CVE-2022-22950
真的需要“特制的 SpEL 表达式”吗?
或者,攻击者是否可以通过制作将由其他无害的 SpEL 表达式处理的数据来利用此 DoS 漏洞?例如。将一长串查询参数发送到使用硬编码 SpEL 表达式处理它们的 Web 应用程序?
当我查看 code changes 时,似乎制作数据可能就足够了?如果是这样,安全公告的措辞应该调整!
查看原文咨询(译自中文)- 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);
我对 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 片段中的表达式。
这让我想到了两组问题:
CVE-2022-22950
是否与使用不受限制的EvaluationContext
受污染 SpEL 表达式的应用程序相关?
例如。足够信任选定用户(如管理员)以允许他们执行任意代码的应用程序?或者,理想情况下,有额外的沙盒措施到位?
似乎在这种情况下(尽管它们可能是有问题的)这个 DoS 漏洞并没有给游戏添加任何新内容。改进安全建议并警告不要以宽松的方式处理用户控制的 SpEL 代码是否有意义EvaluationContext
?CVE-2022-22950
真的需要“特制的 SpEL 表达式”吗?
或者,攻击者是否可以通过制作将由其他无害的 SpEL 表达式处理的数据来利用此 DoS 漏洞?例如。将一长串查询参数发送到使用硬编码 SpEL 表达式处理它们的 Web 应用程序?
当我查看 code changes 时,似乎制作数据可能就足够了?如果是这样,安全公告的措辞应该调整!
查看原文咨询(译自中文)- 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);