Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
spring-shell-vuln — Spring 已确认 Spring 框架中的远程代码执行漏洞。团队刚刚发布了声明以及该问题的缓解指南。现在,此漏洞可追踪为 CVE-2022-22965。 | Kitploit
工具/GitHubGitHub/snip3r69/spring-shell-vuln
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubsnip3r69/spring-shell-vuln

spring-shell-vuln

Spring 已确认 Spring 框架中的远程代码执行漏洞。团队刚刚发布了声明以及该问题的缓解指南。现在,此漏洞可追踪为 CVE-2022-22965。

查看仓库
14年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

spring-shell-vuln

Spring4Shell:Spring核心RCE漏洞


Spring已确认Spring框架中的RCE。团队刚刚发布了声明以及该问题的缓解指南。现在,此漏洞可被追踪为CVE-2022-22965。

一些关于Spring4Shell漏洞的信息已分享在Spring4Shell:详细信息与利用帖中。此外,Praetorian的安全团队已确认,在JDK9+上Spring Core存在远程代码执行漏洞,原因是绕过了CVE-2010-1622。

最初,该漏洞于3月30日被披露,KnownSec 404团队负责人Heige首次暗示了这一漏洞。他发推文警告“Spring core RCE (JDK >=9”并附带了PoC图片。

image

在我们报道此漏洞的同时,Heige从Twitter上消失了。原因不明,但可能另有隐情。

事件经过

2021年底,互联网因Apache Log4j2中曝出的零日远程代码执行漏洞(也称为Log4Shell)而沸腾。该漏洞由阿里云安全团队发现。

- 此漏洞不像Log4Shell那么严重。所有攻击场景都更复杂,因为Java中类加载器操纵攻击的性质。利用Spring4Shell需要深厚的Java知识才能获得可用的PoC。类加载器操纵比Log4Shell漏洞更难理解。

今天,研究人员发现了另一个可能导致严重破坏的漏洞。该漏洞现被追踪为CVE-2022-22965,我们可称之为Spring4Shell。该漏洞存在于JDK版本大于等于9.0的Spring Core中。

Spring框架及其衍生框架spring-beans-*.jar文件或CachedIntrospectionResults.class

以下所有细节现已确认。我对任何造成的损害不承担责任。

漏洞详情与调查

作为世界上最流行的Java轻量级开源框架之一,Spring允许开发人员专注于业务逻辑,并简化了Java企业应用程序的开发周期。

利用需要启用DataBinder的端点(例如,自动解码请求体数据的POST请求),并且严重依赖于应用程序的Servlet容器。例如,当Spring部署到Apache Tomcat时,WebAppClassLoader可被访问,允许攻击者调用getter和setter,最终将恶意的JSP文件写入磁盘。但是,如果Spring使用嵌入式Tomcat Servlet容器部署,则类加载器是LaunchedURLClassLoader,其访问权限有限。

然而,在JDK9及以上版本的Spring框架中,远程攻击者可以在满足一定条件的基础上,通过框架的参数绑定函数获取AccessLogValve对象和恶意字段值。

  • 目前已知触发此漏洞需要两个基本条件:
  • 使用Spring MVC框架 & JDK9及以上

(1). 检查JDK版本号

在组织系统的运行服务器上,执行"java -version"命令检查运行中的JDK版本。如果版本号小于等于8,则不受该漏洞影响。

(2). 检查是否使用Spring框架

  1. 如果组织系统项目以war包形式部署,请按照以下步骤判断。
  • 解压war包:将war文件的后缀改为.zip并解压zip文件
  • 在解压目录中搜索spring-beans-*.jar格式的jar文件(例如spring-beans-5.3.16.jar)。如果存在,则表示业务系统使用Spring框架开发。
  • 如果不存在spring-beans-*.jar文件,则在解压目录中搜索是否存在CachedIntrospectionResuLts.class文件。如果存在,则表示业务系统使用Spring框架开发。
  1. 如果组织系统项目以jar包形式直接独立运行,请按照以下步骤判断。
  • 解压jar包:将jar文件的后缀改为.zip并解压zip文件。
  • 在解压目录中搜索spring-beans-*.jar格式的jar文件(例如spring-beans-5.3.16.jar)。如果存在,则表示业务系统使用Spring框架开发。
  • 如果不存在spring-beans-*.jar文件,则在解压目录中搜索是否存在CachedIntrospectionResuLts.class文件。如果存在,则表示业务系统使用Spring框架开发。

(3) 综合排查

完成以上两步排查后,若同时满足以下两个条件,则可判定受此漏洞影响:

  1. JDK版本号为9及以上;
  2. 使用Spring框架或其衍生框架。

漏洞修复指南

现在Spring团队已修复该漏洞并发布了依赖于Spring Framework 5.3.18的最新版本Spring Boot 2.6.6和2.5.12

WAF防护

在WAF等网络防护设备上,根据实际部署业务的流量情况,对"class."、"Class."、".class."、".Class."等字符串实施规则过滤。过滤规则后,测试业务运行,避免额外影响。

临时修复措施

该漏洞的临时修复应同时执行以下两个步骤:

  1. 在应用程序中全局搜索@InitBinder注解,查看方法体内是否调用了dataBinder.setDisallowedFields方法。如果发现引入了此代码片段,则在原黑名单中添加{"class.","Class.",".class.",".Class."}。(注意:如果该代码片段多处使用,则需要在所有地方追加。)

  2. 在应用系统的项目包下创建以下全局类,并确保此类被Spring加载(建议添加到Controller所在的包中)。添加此类后,需要重新编译打包项目,并进行功能验证测试,然后重新发布项目。

    root@kitploit:~
     import org.springframework.core.annotation.Order;
    
     import org.springframework.web.bind.WebDataBinder;
    
     import org.springframework.web.bind.annotation.ControllerAdvice;
    
     import org.springframework.web.bind.annotation.InitBinder;
    
     @ControllerAdvice
    
     @Order(10000)
    
     public class GlobalControllerAdvice{ 
    
          @InitBinder
    
          public void setAllowedFields(webdataBinder dataBinder){
    
          String[]abd=new string[]{"class.*","Class.*","*.class.*","*.Class.*"};
    
          dataBinder.setDisallowedFields(abd);
    
          }
    
     }
    

image

从Spring项目的Git仓库来看,Spring开发者似乎正在修复该远程代码执行漏洞,但我们仍需等待官方确认。

下载工具