ASP.NET Core 中的关键漏洞以及如何保护您的应用程序

最后更新: 28/04/2026
作者: 艾萨克
  • DataProtection 和 Kestrel 中的严重漏洞允许在 ASP.NET Core 中进行令牌伪造和 HTTP 请求欺骗。
  • 缓解措施需要升级到已打补丁的版本(.NET 10.0.7、Kestrel 2.3.6+)并轮换受损的密钥环和会话。
  • 集中处理错误、状态页面和问题详情是检测、调查和控制事件的关键。
  • 采用依赖性分析、持续修补和日志审计的 DevSecOps 方法对于降低长期风险至关重要。

ASP.NET Core 应用程序中的安全

最后一次 ASP.NET Core 曾多次遭遇严重的安全漏洞。 这直接影响身份验证、数据保护以及 Kestrel Web 服务器本身。如果您使用 .NET 开发或维护应用程序,这不仅仅是一个技术细节:我们谈论的是安全漏洞。 CVSS评分非常高(9,1甚至9,9)能够打开权限提升、用户冒充和高度敏感信息泄露的大门。

抛开各种安全公告的喧嚣,理解以下内容至关重要 ASP.NET Core 中究竟是什么出现了故障?哪些包和版本受到影响?以及遵循 CI/CD 和 DevSecOps 最佳实践的现代开发团队应该如何应对,例如 IDE 和用于测试应用程序的关键工具我们将详细分析最严重的案例(包括 CVE-2026-40372 和 CVE-2025-55315),并进行审查。 微软建议的缓解措施 趁此机会,我们再回顾一下 ASP.NET Core 中的错误和异常处理模型,因为如果没有良好的可观察性,安全漏洞就像大海捞针一样。

数据保护中的严重漏洞:CVE-2026-40372

对生态系统造成最严重打击的事件之一是 CVE-2026-40372,Microsoft.AspNetCore.DataProtection 中的一个严重漏洞微软已在 .NET 10.0.7 版本中通过非周期性更新修复了此漏洞。该漏洞的严重性并不低:CVSS 评分为 3.1。 9,1(评论) 无需身份验证即可进行远程利用。

此漏洞影响 Microsoft.AspNetCore.DataProtection NuGet 包的 10.0.0 至 10.0.6 版本 以及相关的依赖项,例如 Microsoft.AspNetCore.DataProtection.StackExchangeRedis。问题在于 ASP.NET Core 托管认证密码的加密逻辑中存在一个非常微妙但后果严重的缺陷。

易损部件 计算有效载荷中错误字节的 HMAC 验证标签。 在某些情况下,它甚至会丢弃生成的哈希值。这种有缺陷的验证彻底破坏了预期的信任模型:攻击者可以构建看似合法的有效载荷,绕过数据保护系统的真实性检查。

实际后果尤其严重。这是因为数据保护不仅仅用于加密任意数据;它还是许多 ASP.NET Core 安全机制的核心:身份验证 cookie、防伪令牌、TempData、OIDC 状态以及其他依赖于此密钥环的元素。如果这些对象可以被伪造或解密,攻击者就能非常直接地提升权限。

ASP.NET Core 中的关键漏洞

实际影响:cookie、令牌和身份泄露

DataProtection 的漏洞允许攻击者 伪造能够通过密码学检查的有效载荷 在某些情况下,甚至 解密先前受保护的数据在使用 ASP.NET Core Protection API 的环境中,这意味着会面临一系列令人担忧的攻击。

可能泄露的数据包括 身份验证 cookie、防伪令牌、临时数据、OIDC 状态和其他内部令牌在最坏的情况下,未经身份验证的攻击者可以伪造 cookie 或令牌,将自己标识为具有提升权限的用户,例如应用程序管理员或内部服务管理员。

如果攻击者在易受攻击的窗口期内设法……,那么情况会更加恶化。 获得高级别的访问权限它可能会诱使应用程序发行合法但恶意获取的资产: API密钥、会话刷新令牌、密码重置链接或持久访问密钥即使升级到 .NET 10.0.7,所有这些组件仍然有效,除非采取其他措施。

换句话说,即使你打了补丁,如果你没有正确应对, 您的系统仍可能受到在安全漏洞下已发放的令牌的影响。这就是为什么微软将此缺陷与 MS10-070 等历史漏洞相提并论,后者与旧版 ASP.NET 加密中的填充预言机问题有关。

微软发现这一回归问题是由于以下原因: 部分客户报告称,安装 .NET 10.0.6 后出现解密失败的情况。 在四月份的“补丁星期二”期间,团队调查了该事件(最初记录在 aspnetcore 问题 #66335 中),发现这不仅仅是一个功能性错误,而是一个重大的安全漏洞,需要紧急进行周期外补丁修复。

运行条件和受影响的环境

虽然这次失败非常严重, 并非所有环境都默认公开。根据官方信息,要利用 CVE-2026-40372,必须满足与软件包和执行环境相关的几个特定条件。

一方面,该应用程序必须使用 存在漏洞的 Microsoft.AspNetCore.DataProtection 包版本(10.0.0 至 10.0.6) 或运行时加载它的库。此外,该漏洞对非 Windows 操作系统的影响更大,例如: Linux 和 macOS这与 ASP.NET Core 在容器、编排器和云平台上的典型部署方式完美契合。

  Burp Suite Web 渗透测试完整教程

攻击向量通常会被执行。 通过网络,无需事先进行身份验证这增加了其在暴露于互联网的应用程序中的危险性。攻击者可以像系统其他客户端一样发送精心构造的有效载荷,而无需有效的凭据。

在实践中,这意味着 基于微服务、Docker容器和PaaS平台的基础设施 依赖数据保护机制在实例间共享密钥或身份验证状态的系统是高优先级攻击目标。如果密钥环没有进行修补和轮换,那么一次入侵就极有可能演变为持续且难以检测的访问。

鉴于以上所有原因,应用程序安全团队必须 详细分析哪些服务加载了存在漏洞的软件包。 以及它们运行在哪些操作系统上,而不是假设该问题只会影响非常具体的场景。

紧急措施:升级到 .NET 10.0.7 并进行密钥轮换

微软的主要建议很明确: 立即将 Microsoft.AspNetCore.DataProtection 包更新到 10.0.7 版本。 并使用更正后的运行时和 SDK(例如 .NET SDK 10.0.203 及其相关运行时)重新编译应用程序。

为确认环境已正确更新,您应该运行 使用 dotnet –info 命令验证运行时版本是否为 10.0.7。 相应地,仅仅在服务器上安装运行时环境是不够的;这至关重要。 重建和重新部署应用程序 使用更新的容器镜像或软件包,确保生产代码链接到更正后的二进制文件。

然而,如前所述,仅应用此补丁并不能修复已经造成的任何损坏。微软强烈建议不要这样做。 旋转数据保护钥匙环 在已暴露的环境中,为了使在漏洞窗口期间恶意生成的任何令牌、cookie 或凭证失效。

除了更新和轮换钥匙之外,谨慎的做法是 强制关闭活动会话 (撤销登录 cookie、访问令牌等),需要重新进行身份验证并激活 详细日志审核 审查可疑活动,特别是异常的管理访问、API密钥创建、密码重置和特权操作。

从DevSecOps的角度来看,此次事件再次强调了整合以下要素的重要性: 依赖扫描器 在 CI/CD 链中,DataProtection 能够启用自动警报,以便在第三方软件包中出现关键漏洞时发出警报。与任何加密库一样,DataProtection 的微小行为变化,如果未经严格验证,都可能破坏整个安全模型。

另一个严重漏洞:Kestrel 中的 HTTP 请求欺骗漏洞 (CVE-2025-55315)

除了 DataProtection 中的漏洞外,还报告了另一个漏洞。 ASP.NET Core 中存在极其严重的安全漏洞这次的重点是Kestrel网络服务器。它被识别为 CVE-2025-55315它已被归类为HTTP请求欺骗错误,严重性评分为 9,9超过10.

问题的核心在于: 攻击者可以在看似合法的请求中注入第二个恶意HTTP请求。这是典型的请求走私或HTTP帧操纵攻击。这种技术可以用来绕过代理、负载均衡器或服务器本身的安全控制,并导致后端处理它本不应该接受的数据。

根据微软的警告,潜在影响包括 获取敏感信息、凭证被盗、未经授权修改文件 甚至可能导致服务器故障,影响可用性。由于攻击直接影响HTTP传输层,攻击范围非常广泛,从绕过身份验证到将流量重定向到内部路由,无所不包。

该漏洞具体影响 Microsoft.AspNetCore.Server.Kestrel.Core 此漏洞存在于某些版本的 ASP.NET Core 中,被认为是该平台近年来面临的最严重的安全问题之一。此外,它还为未经身份验证的攻击者提供了一个可利用的攻击途径,从而显著扩大了攻击面。

.NET 安全技术负责人 Barry Dorrans 解释说: 如此高的分数反映了最糟糕的情况。由于实际影响很大程度上取决于每个应用程序的构建方式,因此评估基于绕过安全机制并改变范围的前提,这种类型的故障在企业环境中被认为是不可接受的。

受影响的 Kestrel 和 ASP.NET Core 版本及补丁

为了解决 CVE-2025-55315 漏洞,微软发布了 针对 .NET 和 ASP.NET Core 不同分支的特定安全更新涵盖了较旧和较新的版本,包括 ASP.NET Core 2.3、8.0 和 9.0。

在使用的环境中 .NET 8 或更高版本建议的缓解措施包括通过以下方式应用所有可用的补丁: 微软更新 随后验证运行时环境和软件包是否已更新为修正版本。尤其重要的是,要验证应用程序是否已使用这些版本重新编译,以及生产镜像是否不再包含存在漏洞的二进制文件。

  暗网最佳搜索引擎及其安全使用方法

对于仍在进行中的项目 .NET 2.3微软指出,这至关重要。 将 Microsoft.AspNet.Server.Kestrel.Core 包引用更新至版本 2.3.6重新编译解决方案并重新部署。否则,Kestrel 将继续使用允许 HTTP 请求欺骗的错误逻辑处理请求。

使用 独立应用程序或打包成单个文件的应用程序 他们也有义务使用已打补丁的运行时环境从头开始编译,否则生成的可执行文件仍然会包含存在漏洞的代码。如果过于依赖简单地更新主机,很容易忽略这个细节。

除了框架本身的更新之外,微软还发布了 针对 Microsoft.AspNetCore.Server.Kestrel.Core 及其他相关组件的补丁此举旨在增强 HTTP 请求解析和处理的健壮性。简而言之,这并非单一的、孤立的修复,而是对 ASP.NET Core 技术栈中多个环节的协同改进。

ASP.NET Core 的其他重要更新和全球风险

除了这些具体案例之外,微软还发布了 针对 ASP.NET Core 中其他漏洞的关键补丁 这些漏洞可能导致远程代码执行 (RCE)、权限提升和拒绝服务 (DoS) 攻击。这些缺陷的综合作用表明,即使该框架已经相当成熟,也无法完全避免危险的回归漏洞。

这些故障会影响 ASP.NET Core 运行时的关键组件这包括HTTP请求处理、身份验证和授权中间件,以及与数据序列化和反序列化相关的API。在许多情况下,攻击者可以利用这些漏洞。 输入格式错误或有效载荷被篡改 引发意想不到的行为。

受影响的版本通常对应于 在 2026 年 4 月发布安全补丁之前的版本因此,对于所有仍在运行旧版本的生产环境,版本审计都是强制性的。如今,服务器版本过旧无异于自取灭亡。

从商业角度来看,未能实施这些补丁可能会造成非常严重的后果: 数据机密性丧失、完整性受损、基本服务不可用 以及可能需要数年才能恢复的声誉影响。依赖 ASP.NET Core 构建关键业务应用程序的组织应将补丁管理视为一个持续的过程,而不是一次性任务。

微软的一般建议是 补丁程序发布后应立即应用,并检查环境的安全设置。加强对可疑活动的监控,并审查安全开发流程,以最大限度地减少将漏洞引入应用程序代码本身的可能性。

ASP.NET Core 中的错误和异常处理:关键一环

当我们谈到安全问题时,我们往往只想到补丁和密码学,但是 ASP.NET Core 中良好的错误处理系统至关重要。 用于检测、调查和缓解事件。该框架提供了多种异常处理机制,可返回相应的状态码,并通过 API 公开标准响应(例如 ProblemDetails)。

在开发环境中,ASP.NET Core 默认启用 开发者异常页面 当满足特定条件(通常是在开发环境中)时,此页面会由 DeveloperExceptionPageMiddleware 中间件触发,该中间件位于 HTTP 管道的开头。 拦截未处理的异常,包括同步异常和异步异常。并显示详细信息。

开发者例外情况页面可能包含 堆栈跟踪、查询字符串参数、Cookie、HTTP 标头和端点元数据在开发过程中,它是一个非常棒的工具,但是,从逻辑上讲, 生产环境中不应启用此功能。因为暴露内部细节会让攻击者更容易得逞。

在生产环境中,推荐的做法是配置一个 使用 UseExceptionHandler 自定义错误页面该中间件捕获未处理的异常,记录它们,并通过备用管道重新执行请求,通常指向 /Error 之类的路由。

重新安装管道时,务必记住以下几点: 可以使用同一个 HttpContext 再次调用中间件。因此,建议清理内部状态、缓存结果或重用已读取的数据(例如请求体),以避免引发其他错误。此外,作用域服务在重新执行过程中保持不变。

通过 IExceptionHandler 访问异常并进行集中控制

为了获取有关触发错误页面的异常的详细信息,ASP.NET Core 公开了以下功能 IExceptionHandlerPathFeature通过 HttpContext.Features.Get可以检索到原始请求路径和异常对象本身。

Razor Pages 中常见的模式包括: 将请求 ID 和友好的错误消息存储在页面模型中使用 IExceptionHandlerPathFeature 可以根据异常类型(例如 FileNotFoundException)或导致失败的路径自定义错误消息。这样,您就可以向用户显示更有用的错误信息,而无需过滤掉内部详细信息。

除了基于页面或控制器的方法之外,ASP.NET Core 还提供了接口 IExceptionHandler 作为集中式异常处理机制。此接口的实现通过 AddExceptionHandler 注册。它们按顺序执行,当处理完异常时返回 true,当选择委托给默认行为时返回 false。

  如何减少您的数字足迹:隐私、安全和环境

该系统有助于,例如: 记录外部系统中的错误,根据异常类型应用条件逻辑。 或者,无需单独修改每个控制器即可修改全局 HTTP 响应。从 .NET 10 开始,异常中间件还允许您配置 SuppressDiagnosticsCallback,以决定在已处理异常的情况下何时抑制指标和日志。

另一个非常灵活的选择是使用 UseExceptionHandler 中的 lambda这包括直接访问上下文、设置状态码和内容类型,以及手动编写响应。您甚至可以在该 Lambda 函数中使用 IProblemDetailsS​​ervice 来发出一个标准的 ProblemDetails 响应,该响应能够清晰地描述问题。

状态码页面和问题详情响应

默认情况下,ASP.NET Core 应用程序 它不会显示对 HTTP 状态代码(例如 404)友好的页面。它仅返回代码和一个空的响应体。为了丰富用户体验并方便调试,您可以使用 UseStatusCodePages 启用状态码页面中间件。

UseStatusCodePages 支持多种模式: 纯文本格式的通用消息,以及用于完全自定义响应的 lambda 表达式 或者将管道重定向或重新执行到备用端点的变体,例如 UseStatusCodePagesWithRedirects 和 UseStatusCodePagesWithReExecute。

使用 UseStatusCodePagesWithRedirects 中间件 它会返回 302 Found 状态码,并将客户端重定向到通常会呈现更友好用户界面的 URL。通常情况下,会返回 200 OK。当您希望地址栏反映最终的错误处理路径,并且不想保留原始状态码时,这种方法是合理的。

另一方面,UseStatusCodePagesWithReExecute 初始状态码不变相反,它会针对不同的路由重新执行请求以生成响应体。原始 URL 会保留在浏览器的地址栏中,错误点可以通过 IStatusCodeReExecuteFeature 获取原始路由并进行查询,这对于日志记录和调试非常有用。

在 API 领域,ASP.NET Core 已经采用了该标准 ProblemDetails 作为错误响应的标准格式通过在服务容器中注册 AddProblemDetails,中间件可以在客户端或服务器发生错误但没有正文时自动生成包含 type、title、status 和 traceId 等字段的 JSON 响应。

这种行为可以通过以下方式进行自定义: ProblemDetailsOptions.自定义问题详情这包括添加扩展信息,例如节点标识符(例如机器名称)或其他元数据,以帮助追踪分布式环境中的问题。还可以实现自定义的 IProblemDetailsWriter,用于决定要处理哪些状态以及如何序列化详细信息。

DevSecOps 和持续最佳实践的经验教训

ASP.NET Core及其.NET生态系统中一系列漏洞给任何认真负责的开发团队带来了几个重要的教训: 第三方依赖关系是一个关键因素;加密技术实施不当会破坏整个信任模型。 身份验证机制已成为攻击者的主要目标。

从DevSecOps的角度来看,这至关重要。 整合依赖性分析 在持续集成/持续交付 (CI/CD) 流水线中,应持续进行安全测试,并保持对所有集成到项目中的第三方组件的清晰可见性。软件成分分析 (SCA) 工具和漏洞扫描器不应再是可选项,而应成为标准集成工作流程的一部分。

加强这一点也至关重要。 日志审计和安全事件监控这一点在身份验证、令牌颁发、会话创建、权限变更和管理操作方面尤为重要。如果没有完善的日志记录和警报机制,像 CVE-2026-40372 或 CVE-2025-55315 这样的漏洞可能会被悄无声息地利用数月之久。

尽管 ASP.NET Core 结构复杂且近期漏洞众多,但只要正确更新并进行安全配置,它仍然是一个强大的框架。 快速打补丁、必要时轮换密钥、良好的错误处理实践以及积极主动的安全措施 这使得平台既可以是一个强大的平台,也可以是一个容易受到攻击的目标。

这一系列漏洞和缓解机制提醒我们: ASP.NET Core 的安全性不仅仅是偶尔打补丁的问题。而是要采取持续的纪律:监控包和运行时版本,处理错误和异常,审查我们公开的 HTTP 响应和问题详情,并用成熟的 DevSecOps 流程支持所有这些,使我们能够在 .NET 生态系统中出现新的严重故障时快速做出反应。

网络安全事件发生后的行动清单
相关文章:
网络安全事件发生后的关键行动清单