Cómo la vulnerabilidad HTTP/2 provoca el agotamiento de la CPU, el desbordamiento de la memoria y la evasión del registros

En un análisis innovador, el investigador de seguridad Bartek Nowotarski ha detallado una nueva clase de vulnerabilidades dentro del protocolo HTTP/2, conocida como CONTINUATION Flood. Esta inmersión técnica profunda en el funcionamiento interno de HTTP/2 revela un potencial de interrupciones significativas, eclipsando incluso el notorio ataque Rapid Reset denominado el mayor ataque de denegación de servicio distribuido (DDoS) hasta la fecha.

EL DEFECTO INHERENTE

HTTP/2 fue diseñado para mejorar su predecesor HTTP/1.1 al introducir eficiencias como el entramado de datos binarios y la multiplexación. Sin embargo, estas mismas características han abierto la puerta a nuevas vulnerabilidades. CONTINUATION Flood explota un descuido en el manejo de los marcos de CONTINUACIÓN: elementos utilizados para extender un bloque de encabezado a través de múltiples marcos cuando es demasiado grande para caber en un solo marco.

HTTP/2

  • Protocolo binario : a diferencia de HTTP/1.1, que se basa en texto, HTTP/2 funciona mediante un protocolo binario. Este cambio fundamental mejora la eficiencia, ya que los protocolos binarios son generalmente más rápidos, más compactos y menos propensos a errores en comparación con los basados ​​en texto.
  • Comunicación basada en marcos : en HTTP/2, la comunicación entre el cliente y el servidor se produce a través de marcos, en lugar de líneas de texto sin formato. Esto incluye varios tipos de tramas que cumplen diferentes funciones, como administrar y transmitir datos.
  • Marcos de gestión de sesiones : algunos de los tipos de marcos en HTTP/2 están diseñados no para transmitir datos sino para ayudar a configurar y gestionar una sesión HTTP/2. Los ejemplos incluyen marcos SETTINGS para la configuración de sesiones y marcos WINDOW_UPDATE para control de flujo.

Estas características marcan mejoras técnicas significativas con respecto a HTTP/1.1, con el objetivo de optimizar la navegación web reduciendo la latencia, permitiendo la multiplexación y mejorando la priorización del flujo de datos y las capacidades de inserción del servidor.

EJEMPLO: UNA INTERACCIÓN HTTP/2 SIMPLE

GUIÓN:

Alice quiere ver una página web que incluye contenido HTML, CSS para estilo y varias imágenes.

FUNCIONES HTTP/2 EN USO:

  1. Protocolo binario
  2. Comunicación basada en marcos

PROCESO PASO A PASO:

  1. Establecimiento de conexión :
    • El navegador de Alice inicia una conexión con el servidor web e inicia una sesión HTTP/2.
    • Esta sesión utilizará un protocolo binario, lo que significa que todos los datos enviados y recibidos están codificados en formato binario, no en texto legible. Esto hace que la transmisión de datos sea más eficiente y menos propensa a errores comunes en el análisis basado en texto.
  2. Envío de solicitudes HTTP (usando marcos) :
    • El navegador de Alice envía un único marco HTTP/2 HEADERS que inicia una nueva secuencia para recuperar el documento HTML. Este marco contiene encabezados HTTP comprimidos que utilizan el formato HPACK, lo que reduce el tamaño del encabezado y mejora el rendimiento.
    • El marco HEADERS está marcado con un indicador END_HEADERS que indica que contiene todos los encabezados para esta solicitud.
  3. Multiplexación :
    • Mientras espera que se devuelva el documento HTML, el navegador de Alice puede enviar simultáneamente marcos HEADERS adicionales en diferentes secuencias para solicitar archivos CSS, imágenes y otros recursos necesarios para la página web.
    • Esto se hace sin esperar a que se complete la primera solicitud, gracias a la capacidad de multiplexación de HTTP/2: enviar múltiples solicitudes y respuestas en paralelo a través de la misma conexión.
  4. Respuesta del servidor con múltiples fotogramas :
    • El servidor responde a cada solicitud con su propio conjunto de marcos:
      • Marcos de DATOS para el contenido HTML, cada uno posiblemente seguido de más marcos de DATOS dependiendo del tamaño del contenido.
      • Los marcos de DATOS adicionales en otras transmisiones entregan CSS, imágenes y scripts. Estos están intercalados, lo que significa que partes de HTML, CSS e imágenes se pueden transmitir consecutivamente, lo que reduce la latencia general percibida por Alice.
  5. Gestión de flujo :
    • Cada transmisión se puede administrar y priorizar individualmente, lo que permite al servidor enviar recursos críticos como CSS antes de las imágenes si lo considera necesario.
    • Los mecanismos de control de flujo como los marcos WINDOW_UPDATE garantizan que ni el cliente ni el servidor se abrumen con datos, manteniendo un flujo de comunicación fluido.
  6. Cierre de la sesión :
    • Una vez que se entregan todos los recursos y la página web está completamente cargada, la sesión HTTP/2 se puede cerrar o mantener activa para futuras interacciones.

En este escenario, el protocolo binario de HTTP/2 y la comunicación basada en marcos permiten a Alice recibir componentes de la página web de forma más rápida y eficiente en comparación con HTTP/1.1. El uso de múltiples flujos reduce los retrasos causados ​​por el ciclo de solicitud-respuesta de HTTP/1.1, mientras que el protocolo binario reduce la sobrecarga de analizar y transmitir datos textuales.

MARCO DE ENCABEZADOS

El marco HEADERS en HTTP/2 es un componente fundamental de la estructura de comunicación del protocolo, que se utiliza para transportar los datos de encabezado necesarios para las solicitudes y respuestas HTTP. Comprender su función y características puede proporcionar información sobre cómo HTTP/2 mejora los estándares HTTP anteriores como HTTP/1.1. Aquí hay un vistazo detallado al marco HEADERS:

FUNCIÓN DEL MARCO HEADERS

El propósito principal del marco HEADERS es transportar encabezados HTTP para una solicitud o respuesta. Los encabezados en HTTP son pares clave-valor que contienen información sobre la transacción HTTP, como la URL solicitada, el código de estado de las respuestas y otros metadatos relacionados con las operaciones HTTP.

CARACTERÍSTICAS DEL MARCO HEADERS

  1. Formato binario : como todos los marcos HTTP/2, el marco HEADERS está codificado en formato binario. Esta elección reduce los errores de análisis y mejora el rendimiento de los encabezados basados ​​en texto utilizados en HTTP/1.1.
  2. Compresión con HPACK : los encabezados dentro de un marco HEADERS se comprimen usando HPACK. La compresión HPACK reduce la redundancia al codificar los encabezados que se envían con frecuencia entre el cliente y el servidor. Utiliza una tabla estática de encabezados HTTP comunes y una tabla dinámica que captura los encabezados vistos en la conexión actual, optimizando aún más la comunicación.
  3. Banderas :
    • END_STREAM : esta bandera indica que el marco HEADERS es el último marco que se enviará en esta secuencia y que no hay ningún cuerpo que lo acompañe (por ejemplo, para una solicitud GET).
    • END_HEADERS : esta bandera significa que este marco contiene el bloque final de encabezados. Si este indicador no está configurado, significa que las tramas de ENCABEZADOS o CONTINUACIÓN posteriores seguirán como parte del mismo conjunto lógico de encabezados.
  4. Asociación de secuencia : cada cuadro HEADERS está asociado con una secuencia específica. HTTP/2 puede multiplexar múltiples flujos (es decir, diferentes conjuntos de solicitudes y respuestas) simultáneamente a través de la misma conexión, y cada flujo maneja un ciclo de solicitud-respuesta separado.

EJEMPLO DE USO DE UN MARCO HEADERS

Considere un escenario en el que un cliente realiza una solicitud HTTP GET a un servidor para recuperar una página web:

  1. Abrir una transmisión :
    • El cliente inicia una nueva secuencia enviando un marco HEADERS. Este marco incluye encabezados de solicitud HTTP como :method = GET:scheme = https:path = /index.html:authority = www.example.com.
  2. Respuesta del servidor :
    • El servidor responde con su propio marco HEADERS en la misma secuencia. Este marco de ENCABEZADOS de respuesta puede incluir encabezados como :status = 200y encabezados relacionados con el servidor como content-type = text/html.
  3. Cerrando la transmisión :
    • Si la respuesta no requiere un cuerpo, el servidor puede establecer la END_STREAMmarca en su marco HEADERS, indicando que no seguirán más marcos (como marcos de DATOS) para esta secuencia.

Por lo tanto, el marco HEADERS desempeña un papel fundamental al iniciar ciclos de solicitud-respuesta y transportar los metadatos necesarios de una manera compacta, eficiente y confiable dentro de las comunicaciones HTTP/2.

CUADRO DE CONTINUACIÓN

La trama CONTINUACIÓN en HTTP/2 juega un papel crítico en el manejo por parte del protocolo de conjuntos de encabezados extensos que exceden la capacidad de una sola trama HEADERS . Comprender su funcionalidad, estructura y relación con el marco HEADERS ayuda a aclarar cómo HTTP/2 gestiona eficientemente transmisiones de datos complejas y a gran escala. Aquí hay una mirada en profundidad al cuadro CONTINUACIÓN:

FUNCIÓN DEL CUADRO CONTINUACIÓN

El marco CONTINUACIÓN se utiliza para continuar una secuencia de encabezados cuando son demasiado largos para caber en un solo marco ENCABEZADOS. Esta situación suele ocurrir cuando hay muchos encabezados o los encabezados en sí son grandes (por ejemplo, cookies repletas de datos).

CARACTERÍSTICAS DEL MARCO CONTINUACIÓN

  1. Formato binario : como todas las tramas HTTP/2, la trama CONTINUACIÓN está codificada en binario, lo que garantiza un procesamiento y una transmisión eficientes.
  2. Compresión con HPACK : los encabezados dentro de un marco CONTINUACIÓN continúan usando la compresión HPACK, manteniendo la coherencia con la forma en que se comprimen los encabezados en los marcos HEADERS.
  3. Banderas :
    • END_HEADERS : este es el único indicador que se utiliza con los marcos de CONTINUACIÓN. Señala que esta trama concluye el bloque de encabezado iniciado por una trama de ENCABEZADOS o CONTINUACIÓN anterior. Cuando se establece, no se esperan más tramas de CONTINUACIÓN para este bloque de encabezado.
  4. Asociación de secuencia : las tramas de CONTINUACIÓN deben estar asociadas con la misma secuencia que la trama de ENCABEZADOS inicial que inició la secuencia de encabezado. No se pueden intercalar con otros fotogramas en la misma secuencia, lo que significa que todos los fotogramas CONTINUATION deben seguir directamente después del fotograma HEADERS hasta que se establezca el indicador END_HEADERS.

EJEMPLO DE USO DE UN MARCO DE CONTINUACIÓN

Ilustremos cómo se usa un marco de CONTINUACIÓN en un escenario donde un cliente envía una solicitud compleja a un servidor:

GUIÓN:

La aplicación de Alice envía una solicitud a un servidor que requiere un gran conjunto de encabezados, incluidos numerosos encabezados personalizados y grandes valores de cookies.

PROCESO PASO A PASO:

  1. El cliente envía el marco HEADERS :
    • La aplicación de Alice inicia una nueva secuencia (Secuencia 2) y envía una trama HEADERS. Sin embargo, debido a la gran cantidad de encabezados, no todos los encabezados se pueden incluir en este único marco.
    • La trama HEADERS se envía sin la END_HEADERSbandera, lo que indica que seguirán más encabezados.
  2. El cliente envía marcos de CONTINUACIÓN :
    • Inmediatamente después del marco HEADERS, la aplicación de Alice envía uno o más marcos CONTINUACIÓN. Estos marcos llevan el resto de los encabezados.
    • Cada cuadro de CONTINUACIÓN continúa la lista de encabezados iniciada por el cuadro de ENCABEZADOS, y ninguno de ellos establece la END_HEADERSbandera excepto el cuadro de CONTINUACIÓN final.
  3. Cuadro de CONTINUACIÓN final :
    • El último cuadro de CONTINUACIÓN de la secuencia establece la END_HEADERSbandera, indicando que contiene el último segmento de encabezados para esta solicitud.
    • Este indicador le dice al servidor que ha recibido todos los encabezados para esta solicitud en particular y puede comenzar a procesar los datos del encabezado combinados.
  4. Solicitud de procesos del servidor :
    • El servidor recibe la trama HEADERS seguida de todas las tramas CONTINUACIÓN. Vuelve a ensamblar el conjunto completo de encabezados mediante decodificación HPACK.
    • Una vez que se reconstruyen los encabezados completos, el servidor procesa la solicitud basándose en la información completa del encabezado que ya ha recibido en su totalidad.

El marco CONTINUACIÓN es esencial para manejar situaciones en las que la información extensa del encabezado no se puede limitar a un solo marco ENCABEZADOS. Al permitir que los encabezados se fragmenten y se transmitan secuencialmente, HTTP/2 garantiza que incluso las solicitudes complejas con metadatos extensos puedan manejarse de manera eficiente sin sacrificar la integridad o la naturaleza secuencial de las comunicaciones. Este mecanismo destaca una de las muchas optimizaciones que HTTP/2 introduce sobre HTTP/1.1 para mejorar el rendimiento web y la gestión de recursos.

ANATOMÍA DEL ATAQUE

El ataque aprovecha el hecho de que el servidor HTTP/2 espera que el bloque de encabezado termine con un marco marcado por la END_HEADERSbandera. En una inundación de CONTINUACIÓN, los atacantes retienen maliciosamente este indicador, lo que hace que el servidor espere más encabezados indefinidamente, consumiendo recursos.

Vulnerabilidades clave:

  • Agotamiento de la CPU : el servidor gasta recursos de la CPU administrando los encabezados inacabados.
  • Desbordamiento de memoria : Los servidores almacenan estos encabezados en la memoria, esperando un final que nunca llega, lo que puede provocar una falla o una desaceleración importante debido al agotamiento de la memoria.
  • Invisibilidad de los registros : estas solicitudes incompletas a menudo pasan por alto el registro normal, lo que complica la detección y la respuesta.

COMPRENDER LA CONTINUACIÓN VULNERABILIDAD A LAS INUNDACIONES

MECANISMO CENTRAL:

El marco CONTINUACIÓN en HTTP/2 está diseñado para extender las listas de encabezados más allá del límite de un solo marco impuesto a los marcos HEADERS. Si un marco de ENCABEZADOS no se ajusta a todos los encabezados, se utilizan marcos de CONTINUACIÓN adicionales y la END_HEADERSbandera solo se establece en el marco de CONTINUACIÓN final, lo que indica el final del bloque de encabezado.

La vulnerabilidad surge cuando un atacante omite intencionalmente la END_HEADERSbandera en los cuadros de CONTINUACIÓN, creando lo que parece ser un flujo indefinido de encabezados. Esta secuencia obliga al servidor a seguir asignando recursos para manejar lo que se supone que es un bloque de encabezado continuo.

ESTRATEGIA DE EXPLOTACIÓN:

  1. Bloques de encabezado infinitos : al no establecer la END_HEADERSbandera, un atacante puede engañar al servidor haciéndole esperar más datos de encabezado, extendiendo así indefinidamente el tiempo de procesamiento y la asignación de recursos.
  2. Agotamiento de recursos : el servidor puede asignar memoria y ciclos de CPU para manejar los encabezados entrantes, esperando que concluyan en algún momento. Como esta conclusión nunca llega, los recursos se siguen consumiendo, lo que puede provocar el agotamiento de la memoria o la saturación de la CPU.
  3. Falta de visibilidad : a menudo, estas solicitudes con formato incorrecto no se registran correctamente porque no forman una solicitud HTTP completa. Esta invisibilidad dificulta rastrear y mitigar el ataque.

IMPACTOS POTENCIALES DE UN ATAQUE DE INUNDACIÓN CONTINUANTE

  1. Denegación de servicio (DoS) : los servidores pueden dejar de responder o fallar bajo la presión de procesar los interminables encabezados, lo que provoca interrupciones del servicio.
  2. Fallo del servidor : en casos graves, el servidor puede fallar debido a excepciones no controladas o a que se exceden los límites de recursos (por ejemplo, errores de falta de memoria).
  3. Degradación del rendimiento : incluso si no falla, el rendimiento del servidor puede degradarse ya que desvía recursos para manejar los encabezados ficticios, lo que afecta la calidad del servicio para los usuarios legítimos.

ESCENARIO DE EJEMPLO: TIENDA EN LÍNEA BAJO ATAQUE

FONDO:

Imagine una tienda en línea que utiliza un servidor habilitado para HTTP/2 para manejar su tráfico web. El servidor está configurado para admitir las funciones avanzadas de HTTP/2, incluida la multiplexación y la compresión de encabezados.

PREPARACIÓN DEL ATAQUE:

Un atacante, con el objetivo de interrumpir la tienda en línea durante un período pico de compras, decide aprovechar la vulnerabilidad de inundación de CONTINUACIÓN.

PROCESO DE ATAQUE PASO A PASO:

  1. Iniciando el ataque :
    • El atacante crea una serie de solicitudes HTTP/2 al servidor. Cada solicitud comienza normalmente con un marco HEADERS que indica el comienzo de una nueva secuencia HTTP/2.
    • Estos marcos HEADERS están diseñados intencionalmente para no incluir la END_HEADERSbandera, lo que sugiere que seguirán más datos de encabezado.
  2. Envío de marcos de CONTINUACIÓN con formato incorrecto :
    • Después de cada cuadro de ENCABEZADOS, el atacante envía cuadros de CONTINUACIÓN. Fundamentalmente, estos marcos de CONTINUACIÓN tampoco establecen la END_HEADERSbandera.
    • Este proceso se repite, y el atacante envía una gran cantidad de tramas de CONTINUACIÓN, indicando continuamente que vendrán más encabezados, pero nunca concluyendo el bloque de encabezado.
  3. Explotación de la asignación de recursos del servidor :
    • Cada bloque de encabezado abierto (iniciado por una trama HEADERS y supuestamente continuado por tramas CONTINUACIÓN) obliga al servidor a asignar memoria para almacenar estos encabezados entrantes, en espera de que se complete el bloque de encabezado.
    • A medida que se reciben más y más tramas de CONTINUACIÓN sin la END_HEADERSbandera, aumenta el uso de memoria del servidor. Esto se ve agravado por la anticipación del servidor de encabezados adicionales, lo que le impide liberar la memoria asignada.
  4. Servidor sobrecargado :
    • La recepción continua de estos flujos de encabezado incompletos provoca un consumo excesivo de memoria. El servidor se vuelve más lento a medida que hace malabarismos con sus recursos entre el mantenimiento de estos flujos incompletos y el manejo de solicitudes legítimas de los usuarios.
    • Con el tiempo, el servidor puede agotar su memoria disponible o quedar tan atascado que ya no puede responder eficazmente al tráfico legítimo, lo que resulta en una condición DoS.

COMPARACIÓN CON VULNERABILIDADES HTTP/2 ANTERIORES

La vulnerabilidad de inundación de CONTINUACIÓN en HTTP/2 es parte de un panorama más amplio de vulnerabilidades asociadas con este protocolo. Comparar esta vulnerabilidad específica con vulnerabilidades HTTP/2 anteriores proporciona información sobre cómo se pueden explotar las características del protocolo y la naturaleza cambiante de los desafíos de seguridad en las comunicaciones web. Aquí hay una comparación con algunas vulnerabilidades HTTP/2 notables:

CONTINUACIÓN VULNERABILIDAD A LAS INUNDACIONES

  • Naturaleza : aprovecha el manejo de tramas de CONTINUACIÓN en HTTP/2, que permiten bloques de encabezado extendidos en múltiples tramas.
  • Impacto : puede provocar una denegación de servicio (DoS) debido al agotamiento de los recursos, específicamente al consumir la memoria y la CPU del servidor mientras espera que se completen los bloques de encabezado que nunca terminan.
  • Dificultad de detección : difícil de detectar porque es posible que las solicitudes incompletas no se registren tradicionalmente, ya que nunca forman una solicitud HTTP completa.
  • Mitigación : implementar tiempos de espera y límites de tamaño en los encabezados, mejorar la detección de anomalías para patrones de encabezados inusuales y garantizar que las sesiones incompletas se registren para su análisis.

VULNERABILIDADES HTTP/2 ANTERIORES

  1. Bomba HPACK :
    • Naturaleza : Implica crear una bomba de compresión utilizando la compresión HPACK, donde un mensaje pequeño se descomprime a un tamaño excesivamente grande, consumiendo recursos excesivos del servidor.
    • Impacto : similar a Zip Bomb en los sistemas de archivos tradicionales, lo que provoca DoS al llenar la memoria del servidor con información de encabezado descomprimida.
    • Dificultad de detección : relativamente más fácil de detectar ya que la anomalía en el tamaño de los datos es sustancial.
    • Mitigación : limitar el tamaño máximo de los encabezados descomprimidos y monitorear la proporción de tamaños comprimidos y descomprimidos.
  2. Ataque del ciclo de dependencia :
    • Naturaleza : explota las características de dependencia de flujo en HTTP/2, donde un atacante crea solicitudes que crean dependencias circulares, lo que hace que el servidor espere indefinidamente resoluciones que nunca se materializan.
    • Impacto : conduce a situaciones de bloqueo del servidor en las que las solicitudes legítimas se detiene, lo que resulta en una degradación del servicio o DoS.
    • Dificultad de detección : más compleja de detectar debido a la naturaleza lógica de la definición de dependencia.
    • Mitigación : validación de cadenas de dependencia para detectar y romper ciclos, junto con configuraciones de servidor mejoradas para manejar la resolución de dependencias de manera más sólida.
  3. Abuso de multiplexación de transmisiones :
    • Naturaleza : Implica el uso inapropiado o malicioso de las capacidades de multiplexación de HTTP/2, donde se abren numerosos flujos inactivos o lentos sin un propósito legítimo.
    • Impacto : puede agotar los recursos del servidor y complicar la gestión de transmisiones válidas, lo que podría provocar DoS.
    • Dificultad de detección : Detectar abusos puede ser un desafío ya que implica distinguir entre altos niveles de uso legítimo e ilegítimo de multiplexación.
    • Mitigación : implementar límites en la cantidad de flujos simultáneos y monitorear el estado y el nivel de actividad de cada flujo.

EL IMPACTO EN EL MUNDO REAL

Las implicaciones son graves: desde servidores colapsados ​​que causan interrupciones directas hasta degradaciones más sutiles del rendimiento que aún pueden negar servicios de manera efectiva. Particularmente alarmante es la capacidad del ataque de ejecutarse desde una sola máquina, o incluso desde una única conexión TCP, dependiendo de la configuración y las defensas del servidor.

ESTRATEGIAS DE MITIGACIÓN

Las defensas efectivas contra la CONTINUACIÓN Inundación incluyen:

  • Establecer límites de tiempo y tamaño : implementar tiempos de espera estrictos para el procesamiento de encabezados y limitar el tamaño de los bloques de encabezado puede evitar que los atacantes aprovechen esta vulnerabilidad.
  • Monitoreo mejorado : los servidores deben estar equipados con herramientas que puedan detectar anomalías en el tamaño del encabezado y la secuenciación de cuadros.
  • Prácticas de registro sólidas : mejorar la cobertura del registro para incluir todas las solicitudes entrantes, independientemente de su estado de finalización, ayudará a identificar los patrones y orígenes de los ataques.

A medida que HTTP/2 continúa adoptándose ampliamente en Internet, comprender y mitigar sus vulnerabilidades es primordial. La CONTINUACIÓN Flood sirve como un crudo recordatorio de la continua carrera armamentista en ciberseguridad. La vigilancia y las medidas de protección avanzadas son esenciales para protegerse contra vulnerabilidades que no solo amenazan a los servidores individuales sino, potencialmente, a la infraestructura misma de la web.

Esta exposición detallada no sólo destaca la necesidad de prestar atención inmediata a la seguridad de las implementaciones HTTP/2, sino que también proporciona información crucial sobre cómo se estructuran dichos ataques y cómo pueden frustrarse. A medida que avanzamos, la comunidad de seguridad debe permanecer siempre atenta a la evolución de las ciberamenazas para mantener seguro nuestro mundo digital.