Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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
CVE-2024-12877-Exploit — Demo educativa del exploit CVE-2024-12877 para inyección de objetos PHP en el plugin GiveWP de WordPress. Incluye análisis de causa raíz, técnicas de bypass de regex y prácticas seguras de explotación. | Kitploit
Herramientas/GitHubGitHub/soltanali0/cve-2024-12877-exploit
Análisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebCTFPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de Payloads
GitHubsoltanali0/cve-2024-12877-exploit

CVE-2024-12877-Exploit

Demo educativa del exploit CVE-2024-12877 para inyección de objetos PHP en el plugin GiveWP de WordPress. Incluye análisis de causa raíz, técnicas de bypass de regex y prácticas seguras de explotación.

Ver Repositorio
11hace 1 añoAú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

GO-TO CVE – CVE-2024-12877-Exploit

Semana 66 | Autor: Ali Soltani (soltanali0))

Bienvenido a la Semana 66 de la serie GO-TO CVE, donde analizamos vulnerabilidades, estudiamos las causas raíz y demostramos técnicas prácticas de explotación en un contexto educativo y seguro.


🚨 Resumen

CVE-2024-12877 es una vulnerabilidad de inyección de objetos PHP en GiveWP, uno de los plugins de donaciones para WordPress más utilizados. El uso inseguro de unserialize() sobre entrada controlada por el usuario permite a los atacantes activar métodos mágicos de PHP (como __wakeup()), lo que puede conducir a:

  • Ejecución remota de código (RCE) ⚡
  • Robo de datos sensibles 🕵️‍♂️
  • Escalada de privilegios 🔑
  • Compromiso total del servidor ☠️

CVSS: 9.8 Crítico | Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H


🧩 Acerca de GiveWP

imagen

GiveWP impulsa miles de sitios web de organizaciones benéficas, ONG y plataformas de recaudación de fondos. Dado que maneja datos financieros y de donantes sensibles, una vulnerabilidad aquí tiene un gran impacto. Un atacante que explote la inyección de objetos puede escalar desde un solo plugin hasta comprometer toda la instalación de WordPress y el servidor subyacente.


⚙️ Detalles de la vulnerabilidad

  • Causa raíz: unserialize() sobre entrada no confiable.

  • Métodos mágicos de PHP: PHP los invoca automáticamente durante el ciclo de vida del objeto:

  • La vulnerabilidad se origina por el uso inseguro de la función PHP unserialize() sobre entrada controlada por el usuario. Si bien unserialize() está diseñada para reconstruir estructuras de datos de PHP, conlleva un efecto secundario peligroso: cuando los objetos se reconstruyen, PHP invoca automáticamente los métodos mágicos.

Métodos mágicos en PHP

  • __wakeup() – se activa cuando un objeto se deserializa

  • __destruct(), __toString(), __get/__set(), __call/__callStatic() – pueden aprovecharse para ejecución maliciosa

  • Validación mediante regex: GiveWP implementó comprobaciones regex para detectar entrada serializada. Aunque la nueva regex detecta más tipos de datos, la regex no puede prevenir de forma fiable la inyección de objetos.

imagen

Idea clave:

Con un objeto serializado manipulado, el atacante establece las propiedades del objeto, y el propio PHP ejecuta la lógica del atacante al invocar los métodos mágicos

Validación mediante regex

GiveWP implementó una validación basada en regex para comprobar si la entrada estaba serializada. Regex antigua (incompleta)

• Solo reconocía arrays y objetos.

• Otros tipos serializados (string, int, bool, float, null) evadían la detección.

carbon

Regex nueva (mejorada, pero con fallos)

• Reconoce todos los tipos serializados de PHP.

• Bloquea algunos payloads triviales.

• Pero el problema principal sigue ahí: si se usa unserialize() sobre entrada del usuario, la regex no puede salvarte.

carbon (1)

Este fragmento se escribió para comparar dos implementaciones de regex diferentes:

• is_serialized_old() → la versión antigua, que solo detecta arrays y objetos.

• is_serialized_new() → la versión mejorada, que reconoce todos los tipos de datos serializados de PHP (arrays, objetos, strings, integers, booleans, floats y null). Creamos un conjunto de valores de prueba (array, object, string, integer, boolean, float, null), los serializamos y luego comprobamos cada uno contra ambas funciones regex. En términos simples:

imagen

Y después de ejecutar este código en tu dokcer, verás este resultado en el navegador:

imagen

💥 Demo del exploit

Paso 1

carbon (2)

Paso 2: Crear una clase vulnerable

carbon (4)

Esta clase tiene un método __wakeup() que se ejecutará automáticamente al ser deserializada.

Paso 3: Crear el payload

imagen

Paso 4: Salida Después de guardar el archivo, en este archivo puedes ver este exploit:

imagen

Exploit :

imagen

• Regex antigua: FALSE → no detectó el payload.

• Regex nueva: TRUE → lo detectó como entrada serializada.

• Ejecutando: Hello RCE! → El payload fue deserializado y el método mágico __wakeup() ejecutó código controlado por el atacante.

Prevención • No uses unserialize() sobre entrada no confiable. Sustitúyela por json_decode() u otras alternativas más seguras.

• Mantén GiveWP y todos los plugins de WordPress actualizados.

• Implementa un Cortafuegos de Aplicación Web (WAF) para bloquear payloads serializados maliciosos.

• Sigue el Principio de Mínimo Privilegio: ejecuta las cuentas de PHP y de base de datos con los permisos mínimos necesarios.

Resultados:

  • Regex antigua: ❌ no detecta el payload
  • Regex nueva: ✅ detecta la entrada serializada, pero no puede prevenir el RCE

Idea clave: Nunca confíes en una regex para proteger unserialize(). El enfoque más seguro es evitar deserializar entrada no confiable por completo.


🛡 Prevención

  • No uses unserialize() sobre entrada no confiable; prefiere json_decode() u otras alternativas seguras.
  • Mantén GiveWP y todos los plugins de WordPress actualizados.
  • Implementa un Cortafuegos de Aplicación Web (WAF) para bloquear payloads maliciosos.
  • Aplica el Principio de Mínimo Privilegio para las cuentas de PHP y de base de datos.

📱 Sigue nuestro análisis semanal de CVEs

Dirijo dos canales de Telegram dedicados a la investigación y explotación de vulnerabilidades:

  1. Episodios semanales de GO-TO CVE: Cada semana, profundizamos en un nuevo CVE y compartimos análisis detallados, demos y conocimiento. 🔗 Únete aquí

  2. CVEdb – Archivo de exploits: Este canal archiva exploits de 1 día y PoCs personalizados para CVEs. Un gran recurso para investigadores que quieran ver técnicas de explotación activas. 🔗 Únete a CVEdb

Sigue los canales para mantenerte al día con los últimos CVEs, técnicas de explotación y conocimientos de investigación en seguridad.


📚 Referencias

  • NVD CVE-2024-12877
  • Análisis de Wordfence
  • Código fuente de GiveWP

⚖️ Aviso legal

Este repositorio es estrictamente para fines educativos y de investigación. Explotar vulnerabilidades sin permiso es ilegal y poco ético. El autor no es responsable del mal uso.

Descargar herramienta