Introduction
En informatique, l'XML entity expansion ou Billion laughs ou lol flow est une attaque de type déni de service visant les parseurs XML. Cette attaque peut aussi servir de vecteur pour faciliter des attaques par dépassement de tampon
En informatique, l'XML entity expansion ou Billion laughs ou lol flow est une attaque de type déni de service visant les parseurs XML. Cette attaque peut aussi servir de vecteur pour faciliter des attaques par dépassement de tampon
L'attaque XML entity expansion repose sur une particularité du standard XML qui permet la déclaration récursive d'entités XML sans aucune limite de profondeur ou sur la longueur des éléments. L'attaquant peut donc donner une très grande longueur au résultat sensé être produit lors de l'analyse lexicale du document XML. Ainsi, le déni de service est provoqué par le parseur XML tentant de lire le document avec toutes ses entités décrites de manière récursive, ce qui peut potentiellement provoquer un dépassement des capacités de la machine ciblée.
Dans cet exemple, 128 entités XML sont déclarées dans le doctype du document. Elle contiennent chacune deux appel à l'entité déclarée précédemment, sauf la première qui affiche simplement la chaine "Ha !". Dans le document, la dernière entités déclarée est appelée, et par conséquent, toutes les autres sont appelées en cascade jusqu'à afficher 2^129 caractères au final (680564733841876926926749214863536422912).
<!DOCTYPE root [ <!ENTITY ha "Ha !"> <!ENTITY ha2 "&ha; &ha;"> <!ENTITY ha3 "&ha2; &ha2;"> <!ENTITY ha4 "&ha3; &ha3;"> <!ENTITY ha5 "&ha4; &ha4;"> ... <!ENTITY ha128 "&ha127; &ha127;"> ]> <root>&ha128;</root>
Notons que c'est de cet exemple que l'attaque tient ses surnoms de "Billion laughs" ("milliards de rires" en anglais) et "lol flow" ("inondation de lol" en anglais) puisqu'il afficherait réellement des milliards de "Ha !" en résultat.