Vulnerabilidad de desbordamiento de enteros en FastCGI (CVE-2025-23016)

FastCGI es un protocolo importante que mejora el rendimiento de los servidores web al mantener conexiones persistentes entre servidores web y servidores de aplicaciones. Se utiliza ampliamente en sistemas embebidos con recursos computacionales limitados, como cámaras de red, enrutadores y dispositivos IoT. Debido a su naturaleza ligera, FastCGI se implementa a menudo en entornos donde los recursos de seguridad son limitados, lo que hace que las vulnerabilidades sean especialmente preocupantes.

Esta vulnerabilidad afecta a la biblioteca central de FastCGI escrita en C, no a PHP-FPM (que implementa su propia versión del protocolo FCGI). Muchos dispositivos IoT y sistemas embebidos utilizan la biblioteca vulnerable, exponiendo numerosos dispositivos si no se actualizan correctamente.

ProductoFastCGI
Fecha2025-05-07 14:18:55
Información
  • Corrección disponible
  • Explotación activa

Resumen técnico

La vulnerabilidad está presente en la función ReadParams de la biblioteca FastCGI. Esta función procesa los parámetros recibidos de los servidores web, analizando las longitudes de nombre y valor antes de asignar memoria para ellos.

La cadena de vulnerabilidad funciona de la siguiente manera:

  1. La función ReadParams lee la longitud del nombre del parámetro y del valor desde el flujo de entrada.
  2. Si una de las dos longitudes tiene el bit alto establecido (≥ 0x80), se procesa como un entero de 32 bits.
  3. La memoria se asigna entonces con malloc(nameLen + valueLen + 2) para almacenar ambas cadenas, un signo igual y el terminador nulo.
  4. En sistemas de 32 bits, cuando tanto nameLen como valueLen están cerca del valor máximo (0x7FFFFFFF), su suma más 2 causa un desbordamiento de enteros (integer overflow).
  5. Esto se traduce en una asignación muy pequeña (típicamente 0x10 bytes) en lugar de los gigabytes necesarios.
  6. La función intenta entonces leer el nombre y el valor completos del parámetro en este búfer subdimensionado.
  7. Esto crea un desbordamiento de búfer en el heap (heap buffer overflow) controlable por un atacante.

El aspecto más crítico es que este desbordamiento permite sobrescribir estructuras adyacentes en el heap, en particular la estructura FCGX_Stream que contiene punteros a funciones. Al sobrescribir el puntero a la función fillBuffProc con la dirección de system() y controlar el primer parámetro (el flujo mismo, que puede contener comandos de shell), se obtiene la ejecución remota de código.

La vulnerabilidad afecta a todas las versiones de la biblioteca FastCGI anteriores a la 2.4.5.

Vector de ataque

El ataque requiere:

  1. Acceso directo a un socket FastCGI.
  2. Capacidad de enviar parámetros FastCGI construidos con dimensiones específicas.

Aunque los sockets FastCGI deberían ser accesibles solo localmente, muchas implementaciones exponen erróneamente estos sockets a conexiones remotas. Esto es especialmente cierto en algunos sistemas embebidos y en servidores web configurados incorrectamente, como el ejemplo con lighttpd mencionado en el informe, donde muchos tutoriales sugieren configuraciones no seguras.

Recomendaciones

Para mitigar esta vulnerabilidad, es necesario seguir estos pasos:

  1. Actualizar la biblioteca FastCGI: Actualizar a la versión 2.4.5 o superior, que incluye las correcciones para esta vulnerabilidad.

  2. Configurar de forma segura los servidores web:

    • Utilizar sockets UNIX en lugar de sockets TCP siempre que sea posible.
    • Si los sockets TCP son necesarios, limitar su acceso únicamente a localhost.
    • Implementar una segmentación de red adecuada para impedir el acceso directo a los servicios FastCGI.
  3. Implementar medidas de defensa en profundidad:

    • Habilitar todas las protecciones del sistema disponibles (ASLR, PIE, RELRO, etc.).
    • Ejecutar las aplicaciones FastCGI con los privilegios mínimos.
    • Considerar el uso de cortafuegos de aplicaciones para filtrar solicitudes maliciosas.
  4. Verificar las implementaciones existentes:

    • Comprobar la presencia de sockets FastCGI expuestos en la red.
    • Verificar que las configuraciones de los servidores web no incluyan opciones como check-local => "disable" sin controles de seguridad adecuados.
    • Inspeccionar la documentación y los tutoriales para asegurarse de que las prácticas de despliegue sean seguras.

[Callforaction-THREAT-Footer]