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

本文详细分析了Azure Front Door WAF中IP限制功能的绕过漏洞,攻击者可通过X-Forwarded-For标头轻易绕过RemoteAddr变量规则,并探讨了检测方法和修复方案。

Azure’s Front Door WAF WTF: IP Restriction Bypass

背景

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

在Front Door WAF中,如果选择按IP地址限制访问,默认变量是RemoteAddr。从下拉菜单中可以看到两个选项:RemoteAddr或SocketAddr。

根据Microsoft文档,RemoteAddr变量匹配原始客户端的IP地址,并尊重X-Forwarded-For HTTP标头(如果设置)。而SocketAddr变量是WAF看到的真实IP地址。

问题核心

默认选择的RemoteAddr变量可以通过添加X-Forwarded-For标头轻松绕过,且Microsoft确认这是预期行为。

更糟糕的是,Application Gateway WAF中的RemoteAddr变量指的是WAF看到的IP地址(相当于Front Door WAF中的SocketAddr变量)。Microsoft在相关产品中使用相同的变量名表示完全不同的含义!

服务 变量名 描述
Front Door RemoteAddr 由X-Forwarded-For设置的IP地址或WAF看到的IP地址
Front Door SocketAddr WAF看到的IP地址
Application Gateway RemoteAddr WAF看到的IP地址

测试设置

  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-ref和x-cache标头。Application Gateway WAF没有明确的正面指示器。

绕过IP限制

只需添加X-Forwarded-For: [IP地址]标头即可绕过限制。

这种绕过仅在规则配置使用RemoteAddr变量时有效。SocketAddr变量不受此问题影响。

额外风险

当自定义规则匹配时,不会检查其他WAF规则。这意味着广泛的OWASP攻击检测会被完全跳过。

检测

提供了PowerShell脚本(可在Azure Cloud Shell中运行)来检测是否使用了不安全的RemoteAddr变量。

此检查也已集成到GraphRunner工具中,需要获取管理端点令牌后运行Check-FrontDoorWAF命令。

修复

简单的修复方法是更新Front Door WAF配置以使用SocketAddr变量。

如果需要使用RemoteAddr功能并能够区分代理后面的用户,可以添加第二个"如果"条件,要求SocketAddr匹配代理服务器的IP地址。

结论

Front Door WAF中的RemoteAddr选项不应被列为IP限制,因为它实际上只是匹配标头值。Microsoft应该在创建规则的界面上更清楚地记录这个安全漏洞。

变量名应在产品之间保持一致。在一个版本中安全可靠的功能不应在另一个版本中完全相反。

如果你使用Azure Front Door WAF,请确保使用SocketAddr变量进行匹配!

参考

配置带有WAF的IP限制规则 for Azure Front Door https://learn.microsoft.com/en-us/azure/web-application-firewall/afds/waf-front-door-configure-ip-restriction

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