CVE-2025-11953 es una vulnerabilidad crítica de ejecución remota de código (RCE) que afecta a la CLI de React Native Community, ampliamente utilizada, específicamente al paquete @react-native-community/cli-server-api en las versiones de la 4.8.0 a la 20.0.0-alpha.2. Este paquete, mantenido por Meta y descargado de 1,5 a 2 millones de veces por semana, permite a los desarrolladores crear aplicaciones móviles con React Native.
La vulnerabilidad se deriva de un defecto de inyección de comandos del sistema operativo en el Metro Development Server, que se vincula a interfaces externas de forma predeterminada en lugar de a localhost. Un atacante no autenticado en la misma red puede aprovechar esta falla para ejecutar comandos arbitrarios del sistema operativo en las computadoras de los desarrolladores que ejecutan versiones vulnerables de la CLI.
Con una puntuación CVSS de 9.8 (Crítica) y la gran facilidad de explotación sin autenticación, esta vulnerabilidad representa un riesgo significativo para todo el ecosistema de desarrolladores de React Native. Las organizaciones deben priorizar la aplicación del parche de inmediato para prevenir posibles compromisos de la cadena de suministro y el control de las computadoras de los desarrolladores.
| Producto | com.facebook.react.packagerconnection |
| Fecha | 2025-11-06 10:50:36 |
| Información |
|
Resumen técnico
La vulnerabilidad se encuentra en el endpoint /open-url del Metro Development Server, que gestiona las solicitudes POST sin una validación de entrada adecuada. El endpoint acepta la entrada proporcionada por el usuario y la pasa directamente a la función insegura open() proporcionada por el paquete NPM open, lo que resulta en la ejecución de comandos del sistema operativo.
Flujo del código vulnerable:
- El servidor Metro se vincula de forma predeterminada a las interfaces de red externas (0.0.0.0) en lugar de limitarse a localhost (127.0.0.1)
- El servidor expone el endpoint
/open-urlque acepta solicitudes POST - La entrada controlada por el usuario desde el cuerpo de la solicitud POST se pasa sin saneamiento a la función
open() - La función
open()ejecuta comandos del sistema para abrir URL/archivos, pero puede ser manipulada para ejecutar comandos arbitrarios
Características de la explotación:
- Sistemas Windows: los atacantes obtienen ejecución completa de comandos del SO con control total sobre los argumentos de los comandos, permitiendo la ejecución de comandos de shell arbitrarios como
cmd.exe /c malicious-command - Sistemas Linux/macOS: los atacantes pueden lanzar ejecutables arbitrarios con control limitado sobre los parámetros (aunque investigaciones adicionales podrían permitir la ejecución completa de comandos)
Ejemplo de vector de ataque:
POST http://<target-ip>:8081/open-url
Content-Type: application/json
{
"url": "malicious-payload-here"
}
La vulnerabilidad es particularmente peligrosa porque:
- No requiere autenticación – cualquier atacante de red puede explotarla
- Configuración predeterminada vulnerable – los desarrolladores están expuestos desde el primer momento al ejecutar
react-native start - Accesible desde la red – no se limita a explotaciones locales; los atacantes en la misma WiFi, VPN o red corporativa pueden atacar
- Enfoque en los desarrolladores – comprometer las computadoras de los desarrolladores puede llevar a ataques a la cadena de suministro que afecten a las aplicaciones posteriores
Recomendaciones
La corrección (versión 20.0.0) soluciona la vulnerabilidad validando y saneando correctamente la entrada antes de pasarla a la función open(), previniendo así la inyección de comandos.
Aplicar el parche de inmediato
Actualiza el paquete @react-native-community/cli-server-api a la versión 20.0.0 o superior en todos los proyectos de React Native. Esto se puede hacer:
- Actualizando
@react-native-community/clia la versión 20.0.0 o posterior (que incluye la versión corregida de cli-server-api) - Ejecutando
npm update @react-native-community/cli-server-apioyarn upgrade @react-native-community/cli-server-apien cada directorio del proyecto - Verificando la actualización con
npm ls @react-native-community/cli-server-api
Implementar restricciones sobre el binding de red
Si no es posible aplicar el parche de inmediato, configura el Metro Development Server para vincularse explícitamente a localhost, procediendo así:
- Modifica la configuración del servidor para que escuche solo en 127.0.0.1 en lugar de 0.0.0.0
- Utiliza reglas de firewall para bloquear el acceso externo al puerto 8081 (puerto predeterminado de Metro)
- Ejecuta los servidores de desarrollo detrás de VPN o segmentos de red aislados
Investigación y monitoreo
Inicia evaluaciones de seguridad inmediatas:
- Analiza los registros de red en busca de solicitudes POST sospechosas a los endpoints
/open-urlen el puerto 8081 - Examina las computadoras de los desarrolladores en busca de signos de compromiso, incluida la ejecución de procesos inesperados
- Verifica intentos de acceso no autorizado desde direcciones IP externas a los servidores de desarrollo
- Monitorea conexiones salientes inusuales desde las computadoras de los desarrolladores que podrían indicar actividad de comando y control
Aplicar defensa en profundidad
Implementa niveles adicionales de seguridad:
- Segmentación de red: aísla los entornos de desarrollo de las redes de producción
- Sistemas de detección de intrusos (IDS): configura alertas para patrones de inyección de comandos que apunten a servidores Metro
- Soluciones EDR (Endpoint Detection and Response): despliega soluciones EDR en las computadoras de los desarrolladores para detectar la ejecución de procesos maliciosos
- Escaneo de la cadena de suministro: implementa el escaneo automatizado de dependencias para identificar paquetes vulnerables antes de la distribución
- Principio de privilegio mínimo: asegúrate de que las cuentas de los desarrolladores no tengan privilegios administrativos innecesarios que podrían amplificar el impacto del compromiso
Verifica tu exposición
No todos los desarrolladores de React Native son vulnerables:
- La vulnerabilidad existe solo si se utiliza Metro como servidor de desarrollo – los desarrolladores que utilizan marcos alternativos que no dependen de Metro no se ven afectados
- Verifica si tu flujo de trabajo de desarrollo utiliza activamente
react-native starto el bundler Metro - Comprueba si las versiones vulnerables del paquete están realmente en uso en tu árbol de dependencias
[Callforaction-THREAT-Footer]