GiveWP: RCE sin autenticación — actualizá a 4.16.7.2
Un investigador reportó vía Patchstack una cadena de vulnerabilidades en GiveWP, el plugin de donaciones y recaudación de fondos para WordPress con más de 100.000 instalaciones activas. La falla permite a un atacante sin cuenta ejecutar código arbitrario en el servidor del sitio, logrando compromiso total. La severidad es 10.0 (Crítico) según CVSS 3.1 (CVE-2026-82222). El parche está disponible desde la versión 4.16.7.2.
Si usás GiveWP para recibir donaciones online, esta es una actualización de emergencia.
Qué pasó
Patchstack publicó el 28 de agosto de 2026 los detalles de una vulnerabilidad que combinó tres debilidades en GiveWP para lograr ejecución remota de código sin autenticación:
-
Helper de “unserialize seguro” que no es seguro. GiveWP envuelve
unserialize()en una función llamadasafeUnserialize()que usaallowed_classes => false. Pero esa opción no elimina el objeto del atacante: lo instancia como__PHP_Incomplete_Class, preservando el nombre de la clase y todas sus propiedades. Cuando se vuelve a serializar, PHP escribe los mismos bytes originales. El payload nunca se neutraliza. -
Un flujo de donaciones que alimenta el helper. Un usuario registrado puede inyectar datos serializados en su campo
last_name. Al enviar una donación, el plugin construye la información del donante desde la base de datos y pasa cada campo por el helper “seguro”. El gadget queda almacenado en la tablawp_give_sessions. En la siguiente petición, el servidor lee la sesión envenenada, deserializa el gadget y ejecuta el código. -
Una gadget chain completa en el código que GiveWP incluye. El plugin trae las bibliotecas
TCPDFyGive\TestData. Juntas forman una cadena que llega hastacall_user_func_array()con un callable controlado por el atacante. Apuntándolo asystem(), se ejecuta cualquier comando del sistema operativo.
Además, GiveWP expone una acción de registro sin autenticación (give_action=user_register) que ignora la configuración users_can_register de WordPress. Incluso si el registro está desactivado en el sitio, el atacante puede crear una cuenta y recibir una cookie de autenticación para completar la cadena.
El ataque en cuatro pasos
- Registrar una cuenta — POST con
give_action=user_register. El servidor crea la cuenta y devuelve la cookie, sin importar la configuración del sitio. - Plantear el gadget — Leer el nonce del perfil, luego enviar la cadena serializada al campo
last_namede la cuenta. - Envenenar la sesión — Obtener un nonce de donación y enviar una donación sin el campo
give_last. El servidor escribe el gadget enwp_give_sessionsy devuelve HTTP 500. - Ejecutar — Solicitar cualquier página frontend con la misma cookie. El servidor deserializa el gadget y ejecuta el comando del atacante.
El parche rompe la cadena en cinco puntos
La versión 4.16.7.2 cierra la vulnerabilidad en múltiples capas de forma independiente:
- Rechaza donaciones que contengan datos serializados en campos de nombre.
- Añade
allowed_classes => falseen los tres puntos de lectura de sesiones. - Verifica en
ProviderForwarder::__call()que el provider implemente el contrato esperado antes de llamarlo. - Aplica
sanitize_text_field()a los meta de donante y facturación. - Ejecuta una migración (
SanitizeSerializedObjectPayloads) que limpia los payloads existentes en la base de datos — algo que muchas correcciones omiten.
Detalle de la vulnerabilidad
| Campo | Valor |
|---|---|
| Plugin | GiveWP – Donation Plugin and Fundraising Platform (give) |
| CVE | CVE-2026-82222 |
| Severidad | 10.0 (Crítico) — CVSS 3.1, vector AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Tipo | Unauthenticated PHP Object Injection → Remote Code Execution (CWE-502) |
| Versiones afectadas | <= 4.16.7.1 (cadena explotable en <= 4.16.5.1 con instalación por defecto; en 4.16.6–4.16.7.1 requiere un formulario give_forms sin formBuilderSettings) |
| Versión corregida | 4.16.7.2 (publicada el 27 de agosto de 2026) |
| Explotación activa | No confirmada al momento de escribir (CISA SSVC: exploitation none, automatizable yes; no está en el catálogo KEV) |
| Reportado por | Udin Chan, divulgado por Patchstack |
Qué hacer si tenés WordPress en producción
- Actualizá YA GiveWP a la versión 4.16.7.2 o superior desde Escritorio → Plugins. Esta es una actualización de emergencia: la vulnerabilidad permite compromiso total sin autenticación.
- Si no podés actualizar inmediatamente, desactivá el plugin o aplicá reglas de WAF que bloqueen las rutas
/wp-json/hc/v1/y los endpoints de donación de GiveWP. - Escaneá la base de datos en busca de objetos serializados en las tablas
wp_give_sessions,usermeta,give_donormetaygive_donationmeta. La migración del parche los limpia, pero verificar antes da tranquilidad. - Revisá las cuentas de usuario recientes: el registro sin autenticación puede haber sido explotado para crear cuentas legítimas que luego se usaron en el ataque.
- Si encontrás signos de compromiso, eliminá las cuentas sospechosas, las webshells y revisá el sitio en busca de backdoors.
Fuente
¿Tu WordPress está caído, hackeado o querés protegerlo antes de que pase? Te ayudo a recuperarlo y blindarlo.
Solicitar diagnóstico