
#CVE-2022-31630 - Exploit de prueba de concepto para PHP 7.4.33
Advertencia: Este código fue creado únicamente con fines educativos y de prueba en un entorno de laboratorio aislado. El uso en otros sistemas sin autorización es ilegal e irresponsable.
📋 Descripción
CVE-2022-31630 es una vulnerabilidad de lectura fuera de límites (OOB) en la extensión GD de PHP, específicamente en la función imageloadfont(). Esta vulnerabilidad permite a un atacante que puede controlar el archivo de fuente cargado por la aplicación PHP leer datos fuera de los límites del búfer asignado, lo que puede provocar:
· Denegación de servicio (caída) · Divulgación de información (filtrar el contenido de la memoria sensible)
Esta vulnerabilidad afecta a las versiones de PHP:
· 7.4.x anteriores a 7.4.33 · 8.0.x anteriores a 8.0.25 · 8.1.x anteriores a 8.1.12
PHP 7.4.33 es la primera versión que recibió el parche para este CVE. Por lo tanto, el código de exploit en este repositorio mostrará la diferencia de comportamiento entre las versiones vulnerables (≤ 7.4.32) y las versiones ya parcheadas (≥ 7.4.33).
🔬 Detalle Técnico
La vulnerabilidad radica en la falta de validación de entrada al leer el encabezado del archivo de fuente GD (.gdf). El archivo de fuente tiene un encabezado con la siguiente estructura:
· 2 bytes: número mágico (0x01BE) · 2 bytes: cantidad de caracteres (nchars) · 2 bytes: ancho de cada carácter en píxeles (width) · 2 bytes: alto de cada carácter (height) · 2 bytes: cantidad de bytes por carácter (char_offset)
Si el valor de width se hace muy grande (por ejemplo, 65535), PHP asignará un búfer demasiado pequeño para almacenar los datos de mapa de bits de la fuente. Cuando la función imagechar() luego lee caracteres de esa fuente, accede a memoria fuera de los límites del búfer, lo que provoca una lectura OOB.
🚀 Cómo Usarlo
📚 Referencias
· CVE-2022-31630 en NVD · Commit del parche en php-src · PHP Release Announcements
Creado con fines educativos para CVE