ASP .NET Core 6 / C# – Bloquer les attaques inter applications web avec les jetons d’anti-contrefaçon

Présentation

La contrefaçon de requêtes inter applications Web, est une attaque dans laquelle une application Web malveillante tente d’influer sur les échanges entre un navigateur et une autre application Web. Comment est-ce possible ?

Le client Web reçoit des vues avec des formulaires fournies par l’application Web et doit être autorisé à consommer les services qu’elle propose. Il faudrait que le client Web malveillant ne puisse pas valider les formulaires en les envoyant via des requêtes HTTP Post.

Injection du jeton anti-contrefaçon

Par défaut, dans les vues des applications ASP .NET Core, les formulaires (form) dont l’action est valorisée à post, contiennent automatiquement un jeton anti-contrefaçon :

<form method="post" asp-action="Validate">
    <input type="Submit" value="Validate" />
</form>

Après l’obtention du rendu de ce bloc de code côté serveur, le code HTML suivant est envoyé au navigateur :

<form method="post" action="/Home/Validate">
    <input type="Submit" value="Validate" />
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8HJapU2R6zlApON9fPGnt3Hcd7BPOJH42Njp58TodGf-zkSGOvHNOtylq71B02gW7GohwhwopMdKhpbQCKQTJsdeF9ONDiMUD-Dce0BMkFR7Z-J9yBDu0wst0OhTjLPRh3Z5Vq2jtAwePQ5hwH9Qvrc" />
</form>

Nous constatons la présence d’un jeton anti-contrefaçon dans le champ caché nommé __RequestVerificationToken, qui est envoyé par le navigateur dans les requêtes HTTP Post. Sa génération automatique est liée aux Tags Helpers.

ASP.NET Core implémente l’anti-contrefaçon via un service de protection des données. Un service anti-contrefaçon est donc ajouté au conteneur d’injections de dépendance via l’appel de la méthode AddControllersWithViews (dans la classe Program) :

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

Contrôle du jeton anti-contrefaçon

ASP .NET propose des filtres d’actions, qui peuvent exécuter un traitement avant et/ou après une action d’un contrôleur. La métadonnée ValidateAntiForgeryToken, appliquée à une action d’un contrôleur, permet d’exiger une validation anti-contrefaçon pour l’action :

[ValidateAntiForgeryToken]
public IActionResult Validate()
{
    return this.View();
}

Si elle est appliquée à un contrôleur, alors elle s’applique à toutes les actions d’un contrôleur.

Les requêtes HTTP envoyées permettant d’exécuter ces actions sont bloquées si elles ne contiennent pas un jeton d’anti-contrefaçon valide. Dans ce cas, un code HTTP 400 est retourné au navigateur.

Étiquettes :

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j'alterne les missions de formation et d'ingénierie avec cette plateforme. J'écris ce blog pour transmettre mes connaissances à tout développeur, qu'il soit débutant ou expérimenté.