【问题标题】:Prevent bypassing Azure App Gateway WAF rules防止绕过 Azure 应用网关 WAF 规则
【发布时间】:2021-12-16 10:28:12
【问题描述】:

我们在 Azure API 管理(内部 VNET 模式)中托管的 REST API 只能通过 Azure 应用网关 (WAF v2 SKU) 从 Internet 访问,并在 WAF 中启用 OWASP CRS 3.1 规则。然而,有一个渗透测试观察表明,黑客可以通过调用 Content-Type 标头为“application/xml”的 POST API 来绕过 WAF 规则,但仍会在请求正文中发送恶意 JSON 负载。在这种情况下,WAF 不会拦截请求并且 API 返回 HTTP 200,这与 Content-Type 作为“application/json”发送的情况不同,WAF 会阻止相同的恶意负载,返回 403(禁止)。即使请求标头 Content-Type 标头为“application/xml”,是否有任何方法可以阻止 App Gateway/WAF 中的恶意 JSON 有效负载?或者这个验证,传入的请求是否有“application/json”以外的Content-Type,是否需要在API端进行处理?

【问题讨论】:

  • 我从下面的答案中得到了一个解决方案,虽然看起来这个解决方案会导致在 WAF 级别阻止所有 XML 请求,这可能不是所有情况下的最佳解决方案。我在答案的评论中添加了一个后续问题。否则,这可以在 APIM 中通过阻止“application/json”以外的任何内容类型的策略来解决,并且该策略将仅应用于那些只需要 JSON 有效负载的特定 API。
  • 您可以将其添加为答案并接受它,以便对可能面临相同问题的其他社区成员有所帮助。

标签: azure security azure-api-management azure-application-gateway web-application-firewall


【解决方案1】:

如果严格来说是标题问题,您可以 create a custom rule 要么只允许 application/json 要么 只阻止 application/xml

修改该页面中的示例,这将阻止任何不包含application/json

{
    "customRules": [
      {
        "name": "requirejson",
        "ruleType": "MatchRule",
        "priority": 2,
        "action": "Block",
        "matchConditions": [
          {
            "matchVariable": "RequestHeaders",
            "Selector": "Content-Type",
            "Operator": "Contains",
            "NegationConditon": true,
            "matchValues": [
              "application/json"
            ]
          }
        ]
      }
    ]
  }

将否定条件设置为true 会将其从== 变为!= 规则,如if Content-Type does not contain application/json。尽管请记住这适用于“正确设置”的标头,但如果标头设置为仅包含匹配字符串的任何内容,则此规则仍允许进一步处理。

payload的完整解释是here

【讨论】:

  • 谢谢!我们会尝试一下。
  • 只是想知道是否可以阻止恶意负载(包含类似 的内容),而不完全阻止 Content-Type 为 application/xml 的所有请求?我们可能有一些有效的用例,应该允许基于 application/xml 的请求。
  • Match Variable 部分中,它显示PostArgsRequestBody 是匹配选项,尽管它不适用于JSON 或XML 有效负载(至少在今天)。这是您希望确保您对 XML 解析器充满信心的地方,它是健壮且最新的,因此可以在应用程序级别将其过滤掉,就像任何其他潜在的注入或 XSS 攻击一样。
  • 抱歉回来晚了。是的,您是对的,RequestBody 匹配选项不适用于 JSON 或 XML 有效负载 (docs.microsoft.com/en-us/azure/web-application-firewall/ag/…)。因此,在不完全阻止所有 XML 请求的情况下,似乎不可能在 WAF 级别阻止恶意负载。是否可以使用 validate-content 策略等 Azure APIM 策略阻止此类恶意 JSON 内容?如果没有,我们能否在 APIM 应用 validate-header 策略来阻止所有值为 'application/xml' 的内容类型请求标头?
猜你喜欢
  • 2023-02-13
  • 2020-04-21
  • 2020-09-19
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多