.NET 6.0中Azure AD授权算法为None的高危漏洞排查求助
解决.NET 6 Azure AD授权中算法不可为Null的高危漏洞
漏洞本质
该高危漏洞指攻击者可能篡改JWT令牌的签名算法为none,绕过签名验证。针对Azure AD场景,我们可通过强化Microsoft Identity Web的配置彻底防护,无需手动生成密钥/证书。
解决方案代码
修改认证配置,显式强制签名验证、指定允许的算法,并禁用无签名令牌:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(configuration, options => { // 强制验证签名密钥 options.TokenValidationParameters.ValidateIssuerSigningKey = true; // 指定Azure AD使用的签名算法(默认RS256) options.TokenValidationParameters.ValidAlgorithms = new[] { SecurityAlgorithms.RsaSha256 }; // 禁止无签名的令牌(直接阻断none算法攻击) options.TokenValidationParameters.RequireSignedTokens = true; // 可选:显式验证发行方和受众,进一步强化安全 options.TokenValidationParameters.ValidateIssuer = true; options.TokenValidationParameters.ValidateAudience = true; options.TokenValidationParameters.ValidIssuer = configuration["AzureAd:Issuer"]; options.TokenValidationParameters.ValidAudience = configuration["AzureAd:Audience"]; }); app.UseAuthentication(); app.UseAuthorization();
关键说明
- 无需手动配置密钥/证书:
Microsoft Identity Web会自动从Azure AD的OpenID Connect元数据端点获取公钥,用于验证JWT签名,无需手动生成或配置密钥。 - 强化默认防护:虽然
AddMicrosoftIdentityWebApi默认已拒绝none算法令牌,但显式配置这些参数可确保防护生效,避免因配置遗漏引发风险。
验证修复
使用JWT生成工具创建算法为none的令牌,请求API接口,正常情况下会返回401 Unauthorized,说明漏洞已修复。
内容的提问来源于stack exchange,提问作者winterishere
相关产品推荐
相关产品推荐

