CVE-2022-1388 F5 BIG-IP iControl REST 处理进程分析与认证绕过漏洞复现

本文主要是介绍CVE-2022-1388 F5 BIG-IP iControl REST 处理进程分析与认证绕过漏洞复现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载至CVE-2022-1388 F5 BIG-IP iControl REST 处理进程分析与认证绕过漏洞复现-网盾安全学院 (315safe.com)

漏洞信息

F5 BIG-IP是美国F5公司的一款集成了网络流量管理、应用程序安全管理、负载均衡等功能的应用交付平台。2022年5月4日,F5官方发布安全通告,修复了一个存在于BIG-IP iControl REST中的身份验证绕过漏洞。漏洞编号:CVE-2022-1388,影响版本如下:

环境搭建

下载v15.x系列:

首次运行需要修改密码:

进程分析

为了更加方便理解漏洞原理,下面首先简要分析下 F5 BIG-IP iControl 相关进程。

查看 443 端口对应 Apache 服务:

查看 Apache 版本:

漏洞存在于 iControl REST 接口,查看 API 接口文档和`httpd.conf`配置可知,通过`/mgmt/***`转发至`localhost:8100`端口:

寻找对应的进程如下:

可见是通过 Jetty 容器启动的 Java 进程,启动主类为`com.f5.rest.workers.RestWorkerHost`,主要 Jar 包位于`/usr/share/java/rest/`。查看进程树,定位`/proc/8597/cwd`,找到启动程序:

添加调试配置:

重启服务就可以打开远程调试:

为了能够远程访问,还需要关闭防火墙,可以通过`tmsh`进行配置:

漏洞分析

首先回顾一下去年爆出的 CVE-2021-22986 F5 BIG-IP iControl REST 认证绕过漏洞。F5 BIG-IP iControl REST API接口首先通过 Apache 进行认证(模块`mod_pam_auth.so`),当请求中存在`X-F5-Auth-Token`头时(不检查是否为空),将转发给后端的 Jetty来检查`X-F5-Auth-Token`的值是否合法(`EvaluatePermissions#evaluatePermission`),从而完成第二次认证,但是 Jetty 判断`X-F5-Auth-Token`为空时,将直接“认为” Apache已经完成认证从而不会检查提供的信息是否合法,从而实现了认证绕过:

先利用 CVE-2021-22986 的 POC 进行测试:

也就是说 CVE-2021-22986 打完补丁后,Apache 会检查`X-F5-Auth-Token`是否为空。只有当存在`X-F5-Auth-Token`头并且不为空时,才会交给后端的 Jetty 进行认证。

接下来我们看下官方提供的 CVE-2022-1388 临时修复方式:

从修复方式来看,主要是对 HTTP 头中的 connection 进行了修复。HTTP 有一种 hop-by-hop 滥用漏洞,可以参考:

如果请求中带有 HTTP 头`Connection: close, X-Foo, X-Bar`,Apache 会在请求转发到代理前,将`X-Foo`和`X-Bar`逐一删除。那么我们很容易联想到可以构造特殊请求,通过 Apache 的检查,同时由于 hop-by-hop 滥用漏洞导致转发进入 Jetty 前已经删除了`X-F5-Auth-Token`头:

顺利进入了 Jetty 解析,同时又不存在`X-F5-Auth-Token`头,从而实现了认证绕过。后面的逻辑处理与 CVE-2021-22986 是一样的,结合 F5 BIG-IP iControl REST 自带接口,很容易实现 RCE 。

这篇关于CVE-2022-1388 F5 BIG-IP iControl REST 处理进程分析与认证绕过漏洞复现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/238823

相关文章

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解