
Exploit de prueba de concepto para CVE-2025-51495, un desbordamiento de enteros en la función mg_ws_cb de Mongoose WebSocket que provoca un acceso a memoria fuera de los límites y una posible ejecución remota de código.
Me gustaría informar sobre una vulnerabilidad de seguridad identificada en la última versión de Mongoose (v7.17). El problema reside en el módulo WebSocket, específicamente dentro de la función mg_ws_cb encargada de manejar los frames WebSocket entrantes.
La función es vulnerable a un desbordamiento de enteros, lo que puede provocar un acceso a memoria fuera de los límites bajo ciertas entradas manipuladas. Esta condición podría ser explotada por un atacante remoto para causar corrupción de memoria o bloquear la aplicación.
Debido a que diferentes proveedores implementan la lógica de negocio de WebSocket de manera distinta, esta vulnerabilidad podría llevar potencialmente a la ejecución remota de código.
Detalles:
La vulnerabilidad raíz se encuentra en la función mg_ws_cb:
Un paquete WebSocket especialmente manipulado enviado por el cliente puede establecer ofs=0 en este punto, lo que causará un desbordamiento de enteros al calcular ofs-1, resultando en un valor mucho mayor que la longitud de recv.buf.
En funciones posteriores de procesamiento de WebSocket, este buf puede ser utilizado, y dado que su longitud es mayor que la longitud real, puede provocar un acceso fuera de los límites o bloqueos del programa.
Disparador de la vulnerabilidad:
A modo de demostración, elegí el ejemplo websocket existente llamado "websocket-server" en el proyecto. No realicé cambios en el código, excepto agregar comprobaciones ASAN durante la compilación.
Al ejecutar el programa y enviar un paquete websocket específico, provoca directamente un bloqueo.
PoC:
También elegí el "websocket-client" existente en el proyecto como cliente, y realicé modificaciones solo en los dos parámetros de la función fn de main.c para enviar la solicitud.
Ejecutar el programa modificado provocará que el servidor se bloquee.