.NET 10.0.7 liefert out-of-band, um CVE-2026-40372 in ASP.NET Core Data Protection zu fixen
Ein HMAC-Validierungsfehler in Microsoft.AspNetCore.DataProtection 10.0.0 bis 10.0.6 lässt Angreifer Ciphertexts fälschen. .NET 10.0.7 ist der obligatorische Fix.
Microsoft hat heute .NET 10.0.7 out-of-band ausgeliefert, um CVE-2026-40372 zu patchen, einen Elevation-of-Privilege-Bug in Microsoft.AspNetCore.DataProtection, der jede 10.0.x-Release von 10.0.0 bis 10.0.6 betrifft. Wenn Sie ASP.NET Core auf der 10.0-LTS-Linie betreiben, ist das kein “Warten-auf-Patch-Tuesday”-Update. Antiforgery-Tokens, Auth-Cookies, TempData und alles andere, was über IDataProtector läuft, lebt auf dieser Komponente, also deckt der Blast Radius die meisten ASP.NET-Core-Apps in Produktion ab.
Wie der HMAC über die falschen Bytes berechnet wurde
ASP.NET Core Data Protection nutzt authentifizierte Verschlüsselung: Ciphertexts tragen ein HMAC-Validierungstag, das das Framework bei jedem Unprotect-Aufruf prüft. Die Managed-Implementierung in ManagedAuthenticatedEncryptor berechnete dieses Tag über die falsche Scheibe des Payloads und verwarf dann den berechneten Hash, was heißt, dass der Validierungsschritt die vom Angreifer kontrollierten Bytes gar nicht validierte. Das bricht das Integritätsversprechen der Konstruktion und öffnet die Tür dafür, dass gefälschte Tokens als echt akzeptiert werden.
Die Regression wurde neben einer separaten Breaking Change in der Servicing-Release 10.0.6 eingeführt. Nutzer trafen auf CryptographicException: The payload was invalid., wenn sie Daten zu entschlüsseln versuchten, die auf 10.0.5 oder früher geschützt worden waren, wobei der Fehler innerhalb von ManagedAuthenticatedEncryptor.CalculateAndValidateMac aufschlug. Während das Team die Entschlüsselungsregression verfolgt in aspnetcore#66335 jagte, fanden sie den tieferen HMAC-Bug, daher die Out-of-Band-Release statt sie ins Mai-Servicing zu rollen.
Der zweischichtige Blast Radius
Data Protection ist in fast jeden Framework-Service eingehängt, der opaken State zum Client round-trippen muss:
// Antiforgery, auth cookies, TempData, BearerToken, OpenIdConnect state,
// and your own IDataProtector consumers all flow through the same pipeline.
builder.Services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"/var/keys"))
.ProtectKeysWithCertificate(cert);
public class TokenService(IDataProtectionProvider provider)
{
private readonly IDataProtector _protector =
provider.CreateProtector("TokenService.v1");
public string Protect(string userId) => _protector.Protect(userId);
public string Unprotect(string token) => _protector.Unprotect(token); // trusts the MAC
}
Von 10.0.0 bis 10.0.6 ist Unprotect das schwache Glied. Ein gebautes Payload konnte die Validierung bestehen, weil der Encryptor die Bytes, die er zu hashen behauptete, nicht hashte. Kombiniert mit der 10.0.6-Entschlüsselungsregression blieb Operatoren eine Wahl zwischen einer kaputten oder einer verwundbaren App. 10.0.7 nimmt diese Wahl weg.
Was Sie tun sollten, bevor Sie den Tab schließen
Aktualisieren Sie Runtime und Paket zusammen. Die Runtime liefert den In-Box-Encryptor, und das NuGet-Paket liefert den Contract für Apps, die es direkt referenzieren.
# 1. Install the 10.0.7 SDK or runtime from the download page,
# then verify:
dotnet --info
# 2. Bump the package if your project pins it explicitly:
dotnet add package Microsoft.AspNetCore.DataProtection --version 10.0.7
# 3. Rebuild and redeploy. Existing key rings stay valid; this fix
# does not force a key rotation.
Ein paar operative Notizen. Wenn Sie 10.0.6 deployt haben und Nutzer anfingen, auf CryptographicException: The payload was invalid. zu treffen, stellt 10.0.7 die Kompatibilität mit Ciphertexts wieder her, die von 10.0.5 und früher geschrieben wurden, sodass die Entschlüsselungsregression zur gleichen Zeit entsperrt. Framework-abhängige Apps übernehmen den Fix, wenn die Host-Runtime aktualisiert wird, aber self-contained oder AOT-publizierte Apps brauchen einen Rebuild gegen 10.0.7. Wenn Sie auf 9.0.x oder 8.0.x sind, sind Sie von diesem CVE nicht betroffen, aber der April-2026-Servicing-Zyklus gilt trotzdem.
Out-of-Band-Releases von .NET sind selten. Diese hier ist enger im Scope als CVE-2025-55315, der Request-Smuggling-Bug vom letzten Herbst, weil die Ausnutzung Code braucht, der Unprotect auf von Angreifern beeinflussten Input aufruft. Das beschreibt immer noch im Wesentlichen jede authentifizierte ASP.NET-Core-App. Patchen Sie heute.