Sécurité : suppression de l’encodage du nom du cookie

La norme de cookie HTTP autorise uniquement des caractères spécifiques dans les noms et valeurs des cookies. Pour prendre en charge les caractères non autorisés, ASP.NET Core :

  • encode lors de la création d’un cookie de réponse
  • décode lors de la lecture d’un cookie de demande

Dans ASP.NET Core 5.0, ce comportement d’encodage a changé en réponse à un problème de sécurité.

Pour plus d’informations, consultez le problème GitHub dotnet/aspnetcore#23578.

Version introduite

5.0 Préversion 8

Ancien comportement

Les noms des cookies de réponse sont encodés. Les noms des cookies de demande sont décodés.

Nouveau comportement

L’encodage et le décodage des noms de cookies ont été supprimés. Pour les versions prises en charge antérieures de ASP.NET Core, l’équipe prévoit d’atténuer le problème de décodage sur place. En outre, l’appel IResponseCookies.Append avec un nom de cookie non valide lève une exception de type ArgumentException. L’encodage et le décodage des valeurs de cookie restent inchangés.

Raison du changement

Un problème a été détecté dans plusieurs infrastructures web. L’encodage et le décodage peuvent permettre à un attaquant de contourner une fonctionnalité de sécurité appelée préfixes de cookie en usurpant des préfixes réservés comme __Host- avec des valeurs encodées comme __%48ost-. L’attaque nécessite qu’une attaque secondaire injecte les cookies usurpés, tels qu’une vulnérabilité de script intersites (XSS), dans le site web. Ces préfixes ne sont pas utilisés par défaut dans ASP.NET Core ou dans les bibliothèques ou modèles Microsoft.Owin.

Si vous déplacez des projets vers ASP.NET Core 5.0 ou version ultérieure, assurez-vous que leurs noms de cookies sont conformes aux exigences de spécification de jeton : caractères ASCII à l’exclusion des contrôles et des séparateurs"(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT. L’utilisation de caractères non ASCII dans les noms de cookies ou d’autres en-têtes HTTP peut provoquer une exception du serveur ou être incorrectement effectuée par le client.

API affectées