Mil millones de risas
# Mil millones de risas

En la seguridad informática, un ataque de mil millones de risas es un tipo de ataque de denegación-de-servicio (DoS) que apunta a parsers de documentos XML.

Es también referido a como una bomba de XML o como un ataque de expansión de entidad exponencial.

## Detalles

El ataque de ejemplo consta de definir 10 entidades, cada cual definida como constando de 10 de la entidad anterior, con el documento que consiste en una sola instancia de la entidad mayor, el cual se expande a mil millones de copias de la primera entidad.

En el ejemplo citado más frecuentemente, la primera entidad es el texto "lol", por ello el nombre "mil millones de risas". La cantidad de memoria de ordenador usada probablemente superaría a la disponible para el proceso de parseo del XML (ciertamente lo fue en el tiempo cuando la vulnerabilidad fue informada por primera vez).

Mientras la forma original del ataque estuvo apuntada específicamente a XML parsers, el término puede ser aplicable a temas similares también.

El problema fue reportado por primera vez en 2002, pero empezó para ser ampliamente dirigido en 2008.

Las defensas contra esta clase de ataque incluyen limitar la memoria destinada en un parser individual si la pérdida del documento es aceptable, o tratar entidades simbólicamente y expandiéndolas perezosamente sólo cuándo (y en la medida que) su contenido requiera ser utilizado.

## Ejemplo de código

Cuando un parser XML carga este documento, ve que incluye un elemento raíz, "lolz", aquello contiene el texto "&lol9;". Sin embargo, "&lol9;" es una entidad definida que se expande a un texto que contiene diez textos "&lol8;". Cada texto "&lol8;" es una entidad definida que expande a diez textos "&lol7;", y así. Después de que todas las expansiones de entidad han sido procesadas, este pequeño (< 1 KB) bloque de XML de hecho contendrá $10^9$ = mil millones de "lol"s, usando casi 3 gigabytes de memoria.

## Variaciones

El ataque de mil millones de risas descrito más arriba toma una cantidad exponencial de espacio. La variación de explosión cuadrática causa crecimiento cuadrático en requisitos de almacenamiento sencillamente repitiendo una entidad grande una y otra vez, para evitar contramedidas que detectan entidades fuertemente anidados. (Ver teoría de complejidad computacional para comparaciones de clases de crecimiento diferente.)

Un ataque de mil millones de risas existe para cualquier formato de archivo que pueda contener referencias, por ejemplo esta bomba YAML:

