Apache|Apache APISIX request_uri 变量控制不当,存在路径穿透风险公告(CVE-2021-43557)
问题描述
【Apache|Apache APISIX request_uri 变量控制不当,存在路径穿透风险公告(CVE-2021-43557)】在 Apache APISIX 2.10.2 之前的版本中,使用 Apache APISIX Ingress Controller 中 $request_uri
变量存在「绕过部分限制」导致路径穿透风险的问题。
在使用 uri-blocker
插件进行测试场景时发现:
$ ./apisix_request.sh "/public-service/public"
Defaulted container "apisix" out of: apisix, wait-etcd (init)
{"data":"public data"}
$ ./apisix_request.sh "/protected-service/protected"
Defaulted container "apisix" out of: apisix, wait-etcd (init)403 Forbidden
403 Forbidden
openresty
在上述两种场景下,
public-service
是可用的,protected-service
则被插件阻止了。后续对上述场景进行验证测试,发现两种情况均能绕过 Uri 的限制。由于
uri-blocker
插件使用 ctx.var.require_uri
变量不当,导致:- 攻击者可以绕过访问控制限制逻辑,访问本应该禁止的 API;
- 自定义插件的开发者或许不知道
ngx.var.request_uri
变量是不可信任的。
解决方案 该问题目前已在 2.10.2+ 版本中得到解决,请尽快更新至相关版本。
操作建议:如果在使用自定义插件时,可在使用
ngx.var.request_uri
变量前进行路径规范化的相关处理。同时额外检查下 ctx.var.upstream_uri
和ctx.var.uri
这两个变量,虽然可能已经被规范化了,但防患于未然。漏洞详情 漏洞公开时间:2021 年 11 月 22 日
CVE 详细信息:https://nvd.nist.gov/vuln/det...
贡献者简介
该漏洞由社区用户 Marcin Niemiec(GitHub @xvnpw)发现,并及时向 Apache 软件基金会上报该漏洞。
感谢 Marcin Niemiec 对 Apache APISIX 社区的贡献。
关于 Apache APISIX
Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 可以帮助企业快速、安全地处理 API 和微服务流量,包括网关、Kubernetes Ingress 和服务网格等。
Apache APISIX 落地用户(仅部分)
文章图片
- Apache APISIX GitHub:https://github.com/apache/apisix
- Apache APISIX 官网:https://apisix.apache.org/
- Apache APISIX 文档:https://apisix.apache.org/zh/...
推荐阅读
- Apache多路复用模块(MPMs)介绍
- 使用Promise对微信小程序wx.request请求方法进行封装
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- mac|mac php5.6+mongdb+Apache环境配置
- Python用requests模块实现动态网页爬虫
- 开源生态|GPL、MIT、Apache...开发者如何选择开源协议(一文讲清根本区别)
- Apache|Apache Zookeeper总结
- 从原理到操作,让你在 APISIX 中代理 Dubbo 服务更便捷
- Apache|Apache BookKeeper中数据目录分析