写点什么

Apache APISIX request_uri 变量控制不当,存在路径穿透风险公告(CVE-2021-43557)

  • 2021 年 11 月 25 日
  • 本文字数:975 字

    阅读完需:约 3 分钟

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)<html><head><title>403 Forbidden</title></head><body><center><h1>403 Forbidden</h1></center><hr><center>openresty</center></body></html>
复制代码


在上述两种场景下,public-service 是可用的,protected-service 则被插件阻止了。后续对上述场景进行验证测试,发现两种情况均能绕过 Uri 的限制。


由于uri-blocker 插件使用 ctx.var.require_uri 变量不当,导致:


  • 攻击者可以绕过访问控制限制逻辑,访问本应该禁止的 API;

  • 自定义插件的开发者或许不知道 ngx.var.request_uri 变量是不可信任的。

影响版本

Apache APISIX 2.10.2 之前的所有版本(不包含 2.10.2)。

解决方案

该问题目前已在 2.10.2+ 版本中得到解决,请尽快更新至相关版本。


操作建议:如果在使用自定义插件时,可在使用 ngx.var.request_uri 变量前进行路径规范化的相关处理。同时额外检查下 ctx.var.upstream_uri


ctx.var.uri 这两个变量,虽然可能已经被规范化了,但防患于未然。

漏洞详情

漏洞公开时间:2021 年 11 月 22 日


CVE 详细信息:https://nvd.nist.gov/vuln/detail/CVE-2021-43557


贡献者简介


该漏洞由社区用户 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/docs/apisix/getting-started

用户头像

Github:https://github.com/apache/apisix 2021.06.02 加入

Apache APISIX 是一个云原生、高性能、可扩展的微服务 API 网关。它是基于 OpenResty 和 etcd 来实现,和传统 API 网关相比,Apache APISIX 具备动态路由和插件热加载,特别适合微服务体系下的 API 管理。

评论

发布
暂无评论
Apache APISIX  request_uri 变量控制不当,存在路径穿透风险公告(CVE-2021-43557)