Apache Struts2 漏洞解析 (CVE-2023-50164)(S2-066)
内容提要
该文章介绍了Apache Struts的文件上传漏洞,攻击者可通过控制上传参数导致目录穿越并执行任意代码。文章详细介绍了漏洞的影响范围、环境搭建步骤和漏洞利用方法。漏洞解析部分分析了上传文件的基础路径和文件保存问题。文章提供了官方POC和相关代码分析链接。
延伸解读
漏洞影响范围与版本确认
文章指出,Apache Struts 2.5.0 至 2.5.32 以及 6.0.0 至 6.3.0 版本均受此漏洞影响。在实际环境中,可以通过检查项目的 pom.xml 文件来确认当前使用的 Struts2 版本,从而判断是否存在风险。对于使用 Maven 构建的项目,这一步骤尤为简便。
漏洞利用的关键条件
攻击者需要能够控制上传参数,并利用目录穿越将文件上传至可解析目录。文章中的示例通过修改 filename 为 ../xx.txt 实现目录穿越。若目标环境允许上传 jsp 等危险后缀文件,则可能进一步导致远程代码执行。因此,上传功能是否限制文件类型和保存路径是影响漏洞危害程度的重要因素。
环境搭建与复现要点
文章详细介绍了使用 Maven 和 IDEA 搭建 Struts2 文件上传功能的步骤,包括配置阿里云镜像、创建 Maven 项目、编写 UploadAction 类、配置 struts.xml 和 web.xml 等。复现时需注意选择受影响的 Struts 版本,并正确配置 Tomcat 服务器。这些步骤为安全研究人员提供了可操作的测试环境搭建指南。
代码层面的问题分析
文章分析指出,示例代码中上传文件的基础路径是硬编码的,缺乏灵活性,且直接使用用户控制的文件名拼接保存路径,未对文件名进行安全过滤。这为目录穿越提供了条件。虽然文章未深入分析框架内部机制,但通过官方 POC 和代码链接,读者可以进一步了解漏洞的根本原因。
Q&A
Apache Struts2 CVE-2023-50164 漏洞是什么?
Apache Struts2 的文件上传漏洞,攻击者可通过控制上传参数导致目录穿越,若允许上传危险后缀文件(如 jsp),可上传 webshell 至可解析目录,执行任意代码。
哪些版本的 Apache Struts 受 CVE-2023-50164 影响?
影响范围包括 Apache Struts 2.5.0 到 2.5.32 和 6.0.0 到 6.3.0 版本。
如何搭建复现 CVE-2023-50164 的环境?
使用 Struts 6.3.0 版本,工具为 IDEA2021。步骤:下载 Apache Maven 并配置本地仓库和镜像;在 IDEA 中配置 Maven;创建 Maven 项目(使用 maven-archetype-webapp);配置 pom.xml 添加 struts2-core 依赖;定义 UploadAction 类;配置 struts.xml 和 web.xml;创建 index.jsp 上传页面。
如何探测目标是否使用存在漏洞的 Struts2 版本?
可以通过查看目标项目的 pom.xml 文件中的 Struts2 版本号进行探测。
CVE-2023-50164 漏洞如何利用?
攻击者通过修改上传文件名称,例如将 filename 改为 "../xx.txt",利用目录穿越将文件上传到其他目录。若上传 jsp 等可解析文件,可进一步执行任意代码。
CVE-2023-50164 漏洞的成因是什么?
上传文件的基础路径和文件名称存在硬编码问题,缺乏灵活性。UploadAction 类中定义了 upload、uploadContentType 和 uploadFileName 三个属性,通过 setter 方法获取参数内容,攻击者可控制这些参数导致目录穿越。