Saltar al contenido
← Blog
Blog · Seguridad WordPress

GiveWP: RCE sin autenticación — actualizá a 4.16.7.2

WordPressPluginsSeguridad

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:

  1. Helper de “unserialize seguro” que no es seguro. GiveWP envuelve unserialize() en una función llamada safeUnserialize() que usa allowed_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.

  2. 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 tabla wp_give_sessions. En la siguiente petición, el servidor lee la sesión envenenada, deserializa el gadget y ejecuta el código.

  3. Una gadget chain completa en el código que GiveWP incluye. El plugin trae las bibliotecas TCPDF y Give\TestData. Juntas forman una cadena que llega hasta call_user_func_array() con un callable controlado por el atacante. Apuntándolo a system(), 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

  1. 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.
  2. Plantear el gadget — Leer el nonce del perfil, luego enviar la cadena serializada al campo last_name de la cuenta.
  3. 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 en wp_give_sessions y devuelve HTTP 500.
  4. 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 => false en 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

CampoValor
PluginGiveWP – Donation Plugin and Fundraising Platform (give)
CVECVE-2026-82222
Severidad10.0 (Crítico) — CVSS 3.1, vector AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
TipoUnauthenticated 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 corregida4.16.7.2 (publicada el 27 de agosto de 2026)
Explotación activaNo confirmada al momento de escribir (CISA SSVC: exploitation none, automatizable yes; no está en el catálogo KEV)
Reportado porUdin Chan, divulgado por Patchstack

Qué hacer si tenés WordPress en producción

  1. 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.
  2. 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.
  3. Escaneá la base de datos en busca de objetos serializados en las tablas wp_give_sessions, usermeta, give_donormeta y give_donationmeta. La migración del parche los limpia, pero verificar antes da tranquilidad.
  4. 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.
  5. 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