网站首页 > 教程文章 正文
漏洞描述
攻击者可以向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)
环境搭建
【一一帮助安全学习,所有资源关注我,私信回复“资料”获取一一】
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
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。
2、调用 ngx_http_access_module 模块。该模块限制客户端对某些地址的访问。
进入到容器中查看,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 插件
猜你喜欢
- 2024-12-05 Nginx 路径匹配规则
- 2024-12-05 5分钟了解游戏加速器的原理与搭建
- 2024-12-05 推荐一个极简的开源项目管理-Taiga
- 2024-12-05 Nginx 部署负载均衡服务全解析
- 2024-12-05 Nginx-反向代理后应用程序获取客户端真实IP
- 2024-12-05 [ DeWeb使用技巧 ] DeWeb 实用化部署
- 2024-12-05 如何给公司节约成本,搭建免费开源监控系统uptime-kuma
- 2024-12-05 从开发环境到生产环境,部署 Tornado 应用程序
- 2024-12-05 本地调试微信之内网穿透
- 2024-12-05 一文带你搞懂搭建企业级的 npm 私有仓库
- 06-18CentOS7安装Mongodb 4.x.x(centos7安装openstack)
- 06-18Window环境配置Mongodb(mongodb默认配置文件路径)
- 06-18FineReport如何连接和使用MongoDB数据库
- 06-18nosql之mongodb(nosql怎么读正确发音)
- 06-18Mongodb centos7安装(mongodb4.4.2安装教程)
- 06-18群晖(Synology)NAS 安装 MongoDB(群晖安装nat123)
- 06-18MongoDB 安装及实践(mongodb的安装过程和操作命令)
- 06-18MongoDB最全详解(万字图文总结)(mongodb lsm)
- 最近发表
-
- CentOS7安装Mongodb 4.x.x(centos7安装openstack)
- Window环境配置Mongodb(mongodb默认配置文件路径)
- FineReport如何连接和使用MongoDB数据库
- nosql之mongodb(nosql怎么读正确发音)
- Mongodb centos7安装(mongodb4.4.2安装教程)
- 群晖(Synology)NAS 安装 MongoDB(群晖安装nat123)
- MongoDB 安装及实践(mongodb的安装过程和操作命令)
- MongoDB最全详解(万字图文总结)(mongodb lsm)
- CentOS安装MongoDB教程(centos安装mpich)
- MongoDB入门指南:下载、安装和配置一款强大的NoSQL数据库
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)