写点什么

远程代码执行漏洞

  • 2022-10-30
    湖南
  • 本文字数:1550 字

    阅读完需:约 5 分钟

漏洞描述

攻击者可以向 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 插件

用户头像

我是一名网络安全渗透师 2021-06-18 加入

关注我,后续将会带来更多精选作品,需要资料+wx:mengmengji08

评论

发布
暂无评论
远程代码执行漏洞_网络安全_网络安全学海_InfoQ写作社区