Azure Front Door WAF IP 限制绕过漏洞解析

本文详细分析了Azure Front Door WAF中IP限制功能的绕过漏洞,攻击者可通过添加X-Forwarded-For HTTP头轻松绕过默认的RemoteAddr规则,而SocketAddr变量则不受影响。文章还提供了检测脚本和修复建议。

Azure Front Door WAF WTF: IP 限制绕过

背景

Azure 提供两种 WAF:Front Door WAF(全局 WAF)和 Application Gateway WAF(区域 WAF)。本文讨论的 IP 限制绕过仅适用于 Front Door WAF。

在 Front Door WAF 中,如果选择按 IP 地址限制访问,默认选项是名为 RemoteAddr 的变量。另一个选项是 SocketAddr

RemoteAddr 与 SocketAddr 的区别

根据 Microsoft 文档:

  • RemoteAddr 变量匹配原始客户端的 IP 地址,并尊重设置的 X-Forwarded-For HTTP 头。
  • SocketAddr 变量是 WAF 看到的真实 IP 地址。

这意味着,默认的 RemoteAddr 选项可以通过添加带有适当 IP 地址的 X-Forwarded-For 头来绕过。

测试设置

  1. 设置一个简单的测试站点。
  2. 配置 Azure Front Door,路由到测试站点。
  3. 配置安全策略和 WAF 策略。
  4. 创建自定义规则,允许特定 IP 地址(例如 123.45.67.89)并匹配 RemoteAddr 变量。
  5. 将 WAF 设置为预防模式。

验证阻塞规则

正常流量(非来自 123.45.67.89)被阻塞,返回 403 响应。

识别 Front Door WAF

Front Door WAF 的响应头中包含 x-azure-refx-cache。Application Gateway WAF 没有明确标识。

绕过 IP 限制

只需添加 X-Forwarded-For: [IP 地址] 即可绕过限制。此方法仅对 RemoteAddr 变量有效,对 SocketAddr 无效。

额外发现

当自定义规则匹配时,其他 WAF 规则(如 OWASP 攻击检测)会被跳过,攻击者可以无障碍扫描目标。

检测

提供 PowerShell 脚本(可从 GitHub 获取)检测 Front Door WAF 规则是否使用不安全的 RemoteAddr 变量。脚本也可通过 GraphRunner 模块运行。

修复

将 Front Door WAF 配置改为使用 SocketAddr 变量。如果需要区分代理后的用户,可添加第二个条件,要求 SocketAddr 匹配代理服务器 IP。

结论

RemoteAddr 选项不应被列为 IP 限制,因为它实际上只是匹配头值。变量名称应在产品间保持一致(Front Door 和 Application Gateway 的 RemoteAddr 含义不同)。Microsoft 应更清楚地文档化此安全漏洞。

建议 Azure Front Door WAF 用户确保使用 SocketAddr 变量进行匹配。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计