CVE-2021-45232分析(APISIX网关未授权访问)

VSole2022-03-08 10:59:25

背景


apisix网关之前出过一个dashboard api未授权访问漏洞 [1]:因为访问下面两个接口不需要身份认证,所以可以利用这两个接口进行rce。



在刚分析这个漏洞时,我有点困惑:



filter目录下的代码看着像是"中间件"(或者叫"过滤器")的实现,而"中间件"应该是所有请求都会经过"中间件"的业务逻辑,那为什么访问上面的两个接口就没有经过filter.AuthenticationMiddleware中间件的认证逻辑呢?为什么访问其他接口就会经过filter.AuthenticationMiddleware中间件的认证逻辑呢?


虽然动态调试下个断点,就能看到函数调用流程,但是我还想知道"路由"和"中间件"从web框架层来看是怎么设计的。


apisix项目用到了gin框架和droplet框架,本文记录我对这两个框架"路由"和"中间件"使用和设计的研究,以解决自己的疑惑。



分析


01.为什么其他接口就会经过filter.AuthenticationMiddleware中间件的逻辑?


"业务代码"可以使用"gin框架提供的Use接口"注册中间件,比如下面这样



从上图中并没有看到filter.AuthenticationMiddleware中间件被注册,那么为什么其他接口就会经过auth中间件的逻辑?


比如GET /apisix/admin/routes HTTP/1.1


答案在droplet库:apisix通过droplet接口注册了filter.AuthenticationMiddleware中间件。



这样当访问/apisix/admin/routes路径时,请求会经过gin框架注册的"中间件"、droplet注册的"中间件"。



有一个不严谨的结论:上面的两张图中,handlers和mws数组中的所有"函数"会被依次调用。


02.为什么

/apisix/admin/migrate/export接口不会经过filter.AuthenticationMiddleware中间件的逻辑?


/apisix/admin/migrate/export路由对应的"处理函数"并不是wgin.Wraps包装的,这样代码流程会不从gin框架转移到droplet框架。



对比可以看到/apisix/admin/routes路由对应的"处理函数"是wgin.Wraps返回的,这样代码流程会从gin框架转移到droplet框架。



小结:gin框架和droplet框架通过wgin.Wraps包装的func(ctx *gin.Context)函数类型连接到了一起。


03.怎么修复的?


从这个commit[2]中可以看到:


  • gin框架中
  • filter.AuthenticationMiddleware中间件被添加
  • droplet框架中
  • filter.AuthenticationMiddleware中间件被删除




总结


本文只零散地记录一小部分gin和droplet框架的内部逻辑,对gin路由和中间件实现有兴趣的可以看《gin框架源码解析》[3]这篇文章。


在分析过程中感觉"实现一个web框架"非常需要"接口"或者"函数类型",比如net/http和gin框架的连接、gin框架和droplet框架的连接,都是依靠"接口"或者"函数类型"来通信。


参考链接:


[1]https://apisix.apache.org/zh/blog/2021/12/28/dashboard-cve-2021-45232/


[2]https://github.com/apache/apisix-dashboard/commit/b565f7cd090e9ee2043fbb726fbaae01737f83cd


[3]https://www.liwenzhou.com/posts/Go/read_gin_sourcecode/


[4]漏洞分析:

https://mp.weixin.qq.com/s/WEfuVQkhvM6k-xQH0uyNXg

接口框架
本作品采用《CC 协议》,转载必须注明作者和本文链接
引言Prompt Injection 是一种攻击技术,黑客或恶意攻击者操纵 AI 模型的输入值,以诱导模型返回非预期的结果。这里提到的属于是SSTI服务端模板注入。这允许攻击者利用模型的安全性来泄露用户数据或扭曲模型的训练结果。介绍在 LangChain 到 0.0.131 中,LLMMathChain 允许快速注入攻击,可以通过 Python exec 方法执行任意代码。
Java 开发中常用的几款日志框架有很多种,并且这些日志框架来源于不同的开源组织,给用户暴露的接口也有很多不同之处,所以很多开源框架会自己定义一套统一的日志接口,兼容上述第三方日志框架,供上层使用。
#配置文件存储位置。当以classpath开头时,为只读模式
为简化应用软件的网络通信开发工作,提出了一种基于异步网络通信机制的通用高性能网络框架方案,满足应用软件的网络通信和业务处理要求,提高软件开发成果的复用性。方案基于Boost.Asio库实现Proactor模式的跨平台高性能异步网络通信,使用可扩展标记语言(Extensible Markup Language,XML)实现框架内外的功能业务关联配置满足通用要求,通过将网络连接及关联数据抽象为...
—2020 信息技术 安全技术 密钥管理 第1部分:框架 —2021 信息技术 安全技术 密钥管理 第3部分:采用非对称技术的机制 17964—2008 信息安全技术 分组密码算法的工作模式 —2000 信息技术 安全技术 散列函数 第1...
Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。让使用者以最小的代价接入。当然了解了bean的各个生命周期也能促进我们加深对spring的理解。在网上搜索spring扩展点,发现很少有博文说的很全的,只有一些常用的扩展点的说明。并且整理出了一个bean在spring内部从被加载到最后初始化完成所有可扩展点的顺序调用图。这个点允许被用户自己扩展。用户可以在整个spring容器还没被初始化之前做一些事情。
推荐 goleak 的背景goroutine 作为 golang 并发实现的核心组成部分,非常容易上手使用,但却很难驾驭得好。我们经常会遭遇各种形式的 goroutine 泄漏,这些泄漏的 goroutine 会一直存活直到进程终结。等性能分析工具更多是作用于监控报警/故障之后的复盘。我们需要一款能在编译部署前识别 goroutine 泄漏的工具,从更上游把控工程质量。
各位师傅勿喷,写的不好见谅又是吃老板画饼的一天目标url:xxxx.info(非法站点)目前这套ui看见过很多套了,有的是tp框架有的shiro日常扫描器工作时间到,打开tp扫描器扫了一遍tp漏洞无果,这是为什么呢前台爆破无果,我本来想钓鱼下客服,但客服不跟领导一样摸鱼高手老规矩扫扫端口:这玩意还挂cdn不讲武德了ip还这么多,当我翻着翻着的时候发现这些ip有一个开着ssh的这不就有路子来了吗,先
一个换行或者空格就行拿下,点到为止
Log4j2漏洞出现有大半年的时间了,这个核弹级别的漏洞危害很大,但是这个漏洞检测起来却很麻烦,因为黑盒测试无法预判网站哪个应用功能在后台调用了log4j2记录日志功能。
VSole
网络安全专家