Qu’est-ce que l’injection HTML ?

L’injection HTML est une vulnérabilité Web qui permet à un attaquant d’injecter du contenu HTML malveillant dans le code HTML légitime d’une application Web. Les injections HTML sont très similaires au cross-site scripting (XSS) – la livraison est exactement la même, mais le contenu injecté est de pures balises HTML, pas un script. Les injections HTML sont moins dangereuses que XSS mais peuvent toujours être utilisées à des fins malveillantes.


Gravité: grave dans de rares circonstances
Prévalence: découvert rarement
Portée: sites et applications web
Impact technique : HTML malveillant exécuté dans le navigateur
Conséquences dans le pire des cas : violation d’informations sensibles, contrôle de l’application web
Solution rapide: filtrage et encodage des entrées utilisateur

Comment fonctionne l’injection HTML ?

Tout comme les scripts intersites, une injection HTML se produit lorsqu’un utilisateur malveillant fournit une charge utile (le plus souvent du code HTML, rarement du CSS) dans le cadre d’une entrée non fiable, et que le navigateur Web l’exécute dans le cadre du langage de balisage hypertexte du Web vulnérable. page. Les attaques par injection HTML ciblent uniquement le client et, tout comme les attaques XSS, elles affectent l’utilisateur, pas le serveur.

Il existe deux principaux types d’injection HTML : réfléchi et stocké , similaire au XSS réfléchi et au XSS stocké :

  • Dans une injection HTML réfléchie, la charge utile doit être livrée à chaque utilisateur individuellement (généralement sous la forme d’un lien malveillant) et devient une partie de la requête.
  • Dans une injection HTML stockée, la charge utile est stockée par le serveur Web et livrée ultérieurement, potentiellement à plusieurs utilisateurs.

La principale différence entre les injections HTML et XSS est l’étendue des capacités de l’attaquant. En raison de la nature déclarative du contenu HTML, la charge utile peut accomplir beaucoup moins que dans le cas du code JavaScript. Cela rend les injections HTML beaucoup moins susceptibles d’être utilisées pour les attaques de phishing.

Exemples d’attaques par injection HTML

Les attaquants peuvent utiliser des injections HTML à plusieurs fins. Voici quelques-unes des utilisations les plus courantes de cette technique d’attaque, ainsi que les conséquences potentielles pour la sécurité des applications Web.

Défigurer

L’utilisation la plus simple de l’injection HTML est le défigurage, c’est-à-dire la modification du contenu visible de la page. Par exemple, un attaquant peut utiliser une injection HTML stockée pour injecter une publicité visuelle d’un produit qu’il souhaite vendre. L’attaquant peut également injecter du code HTML malveillant visant à nuire à la réputation de la page, par exemple pour des raisons politiques ou personnelles.

Dans ces deux cas, le contenu injecté vise à ressembler à une partie légitime de la page HTML. Et dans les deux cas, une vulnérabilité d’injection HTML stockée devrait être exploitée par l’attaquant.

Exfiltrer les données sensibles des utilisateurs

Une autre utilisation courante de l’injection HTML consiste à créer un formulaire sur la page cible et à inciter l’utilisateur à saisir des données sensibles dans ce formulaire. Par exemple, un attaquant peut injecter un code malveillant qui affiche un faux formulaire de connexion. Les données du formulaire (login et mot de passe) seraient alors envoyées à un serveur contrôlé par l’attaquant.

Si la page Web utilise des URL relatives, l’attaquant peut également tenter d’utiliser la balise pour détourner des données. Par exemple, s’ils injectent et que la page Web utilise des URL relatives pour la soumission de formulaires, tous les formulaires seront envoyés au site example.com contrôlé par l’attaquant à la place.

L’attaquant peut également détourner des formulaires HTML valides en injectant une balise

supplémentaire avant une balise légitime . Les balises de formulaire ne peuvent pas être imbriquées, la balise de niveau supérieur est donc celle qui a priorité.

Dans tous ces cas, les attaquants peuvent aussi bien utiliser l’injection HTML réfléchie que l’injection HTML stockée.

Exfiltrer des jetons anti-CSRF

Les attaquants peuvent également utiliser l’injection HTML pour exfiltrer les jetons anti-CSRF en vue d’une attaque CSRF (cross-site request forgery) ultérieure . Les jetons anti-CSRF sont généralement livrés à l’aide du type d’entrée masqué dans un formulaire.

Pour exfiltrer le jeton, un attaquant peut, par exemple, utiliser une balise non terminée avec des guillemets simples comme <input type="hidden" name="anti_xsrf" value="eW91J3JlIGN1cmlvdXMsIGFyZW4ndCB5b3U/">

 

Une autre option consiste à injecter une balise