En seguridad informática , el ataque de mil millones de risas es un tipo de ataque de denegación de servicio (DoS) que está dirigido a analizadores de documentos XML . [1]
También se lo conoce como una bomba XML o como un ataque de expansión de entidad exponencial. [2]
Detalles
El ejemplo de ataque consiste en definir 10 entidades, cada una definida como compuesta por 10 de la entidad anterior, y el documento consiste en una sola instancia de la entidad más grande, que se expande a mil millones de copias de la primera entidad.
En el ejemplo citado con más frecuencia, la primera entidad es la cadena " lol ", de ahí el nombre "mil millones de risas". En el momento en que se informó por primera vez sobre esta vulnerabilidad, la memoria de la computadora utilizada por mil millones de instancias de la cadena "lol" probablemente excedería la disponible para el proceso que analiza el XML.
Si bien la forma original del ataque estaba dirigida específicamente a analizadores XML, el término también puede aplicarse a temas similares. [1]
El problema se informó por primera vez en 2002, [3] pero comenzó a abordarse ampliamente en 2008 [4].
Las defensas contra este tipo de ataque incluyen limitar la memoria asignada en un analizador individual si la pérdida del documento es aceptable, o tratar a las entidades simbólicamente y expandirlas de manera perezosa solo cuando (y en la medida) que se use su contenido.
Ejemplo de código
< ? versión xml = "1.0" ? > lolz [ lol "lol" > lolz ( #PCDATA ) > lol1 "& lol; & lol; & lol; & lol; & lol; & lol; & lol; & lol; & lol; & lol;" > lol2 "& lol1; & lol1; & lol1; & lol1; & lol1; & lol1; & lol1; & lol1; & lol1; & lol1;" > lol3 "& lol2; & lol2; & lol2; & lol2; & lol2; & lol2; & lol2; & lol2; & lol2; & lol2;" > lol4 "& lol3; & lol3; & lol3; & lol3; & lol3; & lol3; & lol3; & lol3; & lol3; & lol3;" > lol5 "& lol4; & lol4; & lol4; & lol4; & lol4; & lol4; & lol4; & lol4; & lol4; & lol4;" > lol6 "& lol5; & lol5; & lol5; & lol5; & lol5; & lol5; & lol5; & lol5; & lol5; & lol5;" > lol7 "& lol6; & lol6; & lol6; & lol6; & lol6; & lol6; & lol6; & lol6; & lol6; & lol6;" > lol8 "& lol7; & lol7; & lol7; & lol7; & lol7; & lol7; & lol7; & lol7; & lol7; & lol7;" > lol9 "& lol8; & lol8; & lol8; & lol8; & lol8; & lol8; & lol8; & lol8; & lol8; & lol8;" > ]> > & lol9; >
Cuando un analizador XML carga este documento, ve que incluye un elemento raíz, "lolz", que contiene el texto "& lol9;". Sin embargo, "& lol9;" es una entidad definida que se expande a una cadena que contiene diez "& lol8;" instrumentos de cuerda. Cada "& lol8;" cadena es una entidad definida que se expande a diez "& lol7;" cadenas, etc. Después de que se hayan procesado todas las expansiones de entidades, este pequeño bloque (<1 KB) de XML en realidad contendrá 109 = mil millones de "lol", ocupando casi 3 gigabytes de memoria. [5]
Variaciones
El ataque de mil millones de risas descrito anteriormente puede tomar una cantidad exponencial de espacio o tiempo. La variación de explosión cuadrática provoca un crecimiento cuadrático en los requisitos de recursos simplemente repitiendo una entidad grande una y otra vez, para evitar contramedidas que detectan entidades fuertemente anidadas. [6] (Consulte la teoría de la complejidad computacional para las comparaciones de diferentes clases de crecimiento).
Debería existir un ataque de "mil millones de risas" para cualquier formato de archivo que pueda contener referencias, por ejemplo, esta bomba YAML :
a : & a [ "lol" , "lol" , "lol" , "lol" , "lol" , "lol" , "lol" , "lol" , "lol" ] b : & b [ * a , * a , * a , * a , * a , * a , * a , * a , * a ] c : & c [ * b , * b , * b , * b , * b , * b , * b , * b , * b ] d : & d [ * c , * c , * c , * c , * c , * c , * c , * c , * c ] e : & e [ * d , * d , * d , * d , * d , * d , * d , * d , * d ] f : & f [ * e , * e , * e , * e , * e , * e , * e , * e , * e ] g : & g [ * f , * f , * f , * f , * f , * f , * f , * f , * f ] h : & h [ * g , * g , * g , * g , * g , * g , * g , * g , * g ] i : & i [ * h , * h , * h , * h , * h , * h , * h , * h , * h ]
El software empresarial como Kubernetes se ha visto afectado por este ataque a través de su analizador YAML. [7] [8] Por esta razón, los formatos de archivo que no permiten referencias a menudo se prefieren para los datos que llegan de fuentes no confiables. [9] [ verificación fallida ]
Ver también
- Fork bomb : un método similar para agotar los recursos de un sistema a través de la recursividad
- Zip bomb : un ataque similar utilizando archivos zip
- Ataque de entidad externa XML : un ataque XML para devolver archivos de servidor arbitrarios
- Definición del tipo de documento : una plantilla para archivos XML válidos
Referencias
- ↑ a b Harold, Elliotte Rusty (27 de mayo de 2005). "Sugerencia: configure analizadores SAX para un procesamiento seguro" . IBM developerWorks . Archivado desde el original el 4 de marzo de 2011 . Consultado el 4 de marzo de 2011 .
- ^ Sullivan, Bryan (noviembre de 2009). "Ataques y defensas de denegación de servicio XML" . Revista MSDN . Microsoft Corporation . Consultado el 31 de mayo de 2011 .
- ^ "SecurityFocus" . 2002-12-16 . Consultado el 3 de julio de 2015 .
- ^ "CVE-2003-1564" . Vulnerabilidades y exposiciones comunes . La Corporación MITRE. 2003-02-02 . Consultado el 1 de junio de 2011 .
- ^ Bryan Sullivan. "Ataques y defensas de denegación de servicio XML" . Consultado el 21 de diciembre de 2011 .
- ^ https://docs.python.org/2/library/xml.html#xml-vulnerabilities
- ^ https://github.com/kubernetes/kubernetes/issues/83253
- ^ Wallen, Jack. "La vulnerabilidad de Kubernetes 'Billion Laughs' no es una cuestión de risa" . La nueva pila .
- ^ http://www.cio.com/article/3082084/web-development/xml-is-toast-long-live-json.html