CVE-2019-0230 s2-059 漏洞分析1

preview
需积分: 0 1 下载量 72 浏览量 更新于2022-08-03 收藏 257KB PDF 举报
CVE-2019-0230 s2-059 漏洞分析 Apache Struts 框架中的 CVE-2019-0230 漏洞是远程代码执行(RCE)漏洞,影响范围为 Struts 2.0.0 - Struts 2.5.20。官方建议升级到 2.5.22 或更高版本。该漏洞的成因是 Struts 框架在强制时对分配给某些标记属性的属性值执行双重计算,以便可以传递一个值,该值将在呈现标记的属性时再次计算。 在 Struts 标记属性内强制使用 OGNL 表达式时,如果攻击者能够修改请求中的属性,使原始 OGNL 表达式传递到属性而无需进一步验证,则当作为请求呈现标记时,属性中包含的提供的 OGNL 表达式将计算。例如,在 `<s:a id="%{skillName}" href="%{url}">List available Employees</s:a>` 中,如果攻击者能够修改 `skillName` 或 `url` 属性,可能会导致远程代码执行。 在 debug 过程中,我们可以看到在 `ComponentTagSupport` 类的 `doStartTag()` 函数的第一行,`this` 的 `href` 属性就是 `xxx.jsp`。然后,在 `populateParams()` 函数中,我们可以看到 `uiBean` 的各种属性的设置,例如 `setId`、`setCssClass`、`setCssStyle` 等。 在 `AbstractUITag` 类的 `populateParams()` 操作中,我们可以看到 `uiBean` 的 `setId` 操作,例如 `uiBean.setId(this.id)`。通过跟进 `findString` 和 `findValue` 函数,我们可以看到 Struts 框架如何处理 OGNL 表达式的计算。 因此,在使用 Struts 框架时,需要小心处理 OGNL 表达式的使用,以免导致远程代码执行漏洞。同时,升级到最新版本的 Struts 框架也可以避免该漏洞。 知识点: 1. Apache Struts 框架的 CVE-2019-0230 漏洞是远程代码执行(RCE)漏洞。 2. 漏洞的成因是 Struts 框架在强制时对分配给某些标记属性的属性值执行双重计算。 3. Struts 标记属性内强制使用 OGNL 表达式时,如果攻击者能够修改请求中的属性,使原始 OGNL 表达式传递到属性而无需进一步验证,则可能会导致远程代码执行。 4. 在 debug 过程中,需要关注 `ComponentTagSupport` 类的 `doStartTag()` 函数和 `AbstractUITag` 类的 `populateParams()` 操作。 5. 使用 Struts 框架时,需要小心处理 OGNL 表达式的使用,以免导致远程代码执行漏洞。 6. 升级到最新版本的 Struts 框架可以避免该漏洞。