原文翻译:https://kloudle.com/blog/piercing-the-cloud-armor-the-8kb-bypass-in-google-cloud-platform-waf
Google Cloud Armor 提供了一个基于规则的策略框架,可供 Google Cloud Platform 的客户用来缓解各种类型的常见 Web 应用程序攻击。Cloud Armor 服务有 8 KB 的记录限制,即它将检查的 Web 请求的最大大小。 这种默认行为下,攻击者可以使得恶意请求绕过Cloud Armor 并直接到达底层应用程序。
介绍
Web 应用程序防火墙套件为现代 Web 应用程序提供了关键的安全层,即使底层应用程序易受攻击,也可以保护它们免受各种攻击,例如:代码执行、SQL 注入、跨站点脚本等。GCP 客户可以使用 Cloud Armor 来保护使用 Google Cloud Load Balancing 提供服务的应用程序。
Cloud Armor 支持规则自定义表达式,同时还提供一组预配置的 Web 应用程序防火墙规则,这些规则来自 OWASP ModSecurity 核心规则集。
8KB限制
Cloud Armor 的 Web 应用程序防火墙组件检查传入的 HTTP 请求,并将它们与用户定义的基于规则的策略进行比较。Cloud Armor 服务可以配置为:根据给定请求触发的规则允许或拒绝对底层应用程序的请求。
Cloud Armor 的 Web 应用程序防火墙组件具有 8 KB 的不可配置的 HTTP 请求正文大小限制。这意味着 Cloud Armor 将仅检查 HTTP POST 请求正文的前 8192 个字节或字符。
这类似于 AWS Web 应用程序防火墙的8 KB 限制,但是在 Cloud Armor 中,该限制鲜有人知,也没有像 AWS 中的限制那样突出地呈现给客户。
在撰写文本时,客户在从 Web UI 中配置 Cloud Armor 规则时不会看到提示或通知,并且只能在文档文章中包含的非描述性通知中找到对 8 KB 限制的引用。
可以通过制作正文大小超过 Cloud Armor 的 8 KB 大小限制的 HTTP POST 请求来利用此问题,下图payload中位于请求正文的第 8192 个字节/字符之后。
但是,攻击者成功进行 WAF 绕过的情况是有条件的:被攻击的目标能以可能触发潜在漏洞的方式接收和处理HTTP POST 请求。如果给定的底层端点不接受 HTTP POST 请求,则绕过后不会进行触发,实则是无意义的。
HTTP PUT 和 PATCH 的请求正文限制
Cloud Armor 的另一个限制是:仅对于 HTTP POST 请求的请求正文进行检查。因此,攻击者可以利用HTTP PUT 或 PATCH 方式发送带有恶意payload的请求包以此来绕过WAF,此时无需在正文中填充8192 字节!
WAF绕过的影响
了解此限制的攻击者将更好地利用底层应用程序中可能存在的任何漏洞。例如,攻击可可以尝试 Log4j RCE 漏洞 (CVE-2021-45046) 来对web应用程序进行探测。
防御
Cloud Armor 是一种有价值的安全工具,但重要的是客户了解 8 KB 的大小限制,以便他们可以采取措施进一步保护他们的应用程序。
客户可以配置自定义 Cloud Armor 规则来阻止请求正文大于 8192 字节的 HTTP 请求。
int(request.headers["content-length"]) >= 8192
上述规则将在 Content-Length 标头的值等于或大于 8192 的传入请求上触发。
正如我们之前关于 Amazon Web Services WAF 的 8 KB 大小限制的文章中所述,某些资源的合法请求的大小可能会达到 8 KB 或更大。在这些情况下,可以使用 Cloud Armor 的自定义规则语言微调规则,以便 WAF 预期并适当地处理合法请求。
结论
Cloud Armor 是一项用于保护 Google Cloud Platform 上的资源和数据的有用服务,但是,客户必须了解其请求过滤功能的局限性,并应采取措施降低 8 KB WAF 限制可能带来的潜在风险。