:PROPERTIES:
:ID:       7b090d0a-b96b-4d40-afec-2155a6909935
:mtime:    20220306182044
:ctime:    20220306181623
:END:
#+title: XML billion laughs

* Introduction
 * Attaque de type déni de service visant les parseurs XML.
 * Peut aussi servir de vecteur pour faciliter les attaques par /dépassement de tampon/.

* Principe
Le standard XML permet la déclaration récursive d'entités XML sans aucune limite de profondeur ou de longueur des
éléments. L'attaquant peut donc donner une très grande longueur au résultat censé ê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 mémoire.

* Exemple
#+BEGIN_SRC xml
<!DOCTYPE root [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol; &lol;">
<!ENTITY lol3 "&lol2; &lol2;">
<!ENTITY lol4 "&lol3; &lol3;">
<!ENTITY lol5 "&lol4; &lol4;">
…
<!ENTITY lol128 "&lol127; &lol127;">
]>
<root>&lol128;</root>
#+END_SRC

* Références
 * [[https://en.wikipedia.org/wiki/Billion_laughs_attack][Wikipedia]]


