
Prueba de concepto de exploit para CVE-2026-78159, un RCE no autenticado en el plugin de WordPress The Events Calendar a través del sink de clases de widget parse_array.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-78159
The Events Calendar 6.17.3 — stellarwp
El plugin The Events Calendar para WordPress es vulnerable a ejecución remota de código en todas las versiones hasta la 6.17.3, inclusive, a través de la función parse_array. Esto se debe a una validación insuficiente del mapa 'classes' del widget, lo que permite que una carga útil de array simple eluda la comprobación de objetos is_safe_widget_instance() y alcance el sink de invocación de callables en Element_Classes::parse_array(). Esto hace posible que atacantes no autenticados ejecuten código en el servidor. La explotación requiere que el sitio objetivo tenga los comentarios habilitados en las entradas tribe_events y que se haya enviado al menos un comentario que contenga un bloque wp:legacy-widget manipulado, ya que la cadena de ataque se desencadena cuando do_blocks() procesa el HTML del evento individual, incluida el área de comentarios.
| CVE | CVE-2026-78159 · CVE.org |
| CWE | CWE-94 |
| CVSS | Crítico: 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Producto | The Events Calendar |
| Afectadas | todas las versiones hasta la 6.17.3 (inclusive) |
| Parcheado | 6.17.3.1 y posteriores |
| Auth | ninguna (ver mapa de origen) |
| Licencia | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 · paquete de divulgación para el proveedor/cliente, no un escáner |
parse_array es el sink, no una acción ajax=. HTTP es POST /wp-comments-post.php y luego GET a la URL de vista previa de moderación. El idBase del widget es tribe-widget-events-list, no events-list.
POST/wp-comments-post.phpGET /event/lab-event/ recolecta comment_post_IDPOST /wp-comments-post.php comment=<!-- wp:legacy-widget {idBase tribe-widget-events-list, instance.encoded php-serialize-base64, instance.hash 0} /-->302 Location incluye unapproved=COMMENT_ID&moderation-hash=wp_hash(comment_date_gmt)GET a esa Location: comments_template incluye el comentario no aprobadoTemplate_Bootstrap::get_v1_single_event_template_html do_blocks($html)Service_Provider::enable_rendering_widget_copied (render_block_data) unserialize allowed_classes false, is_safe_widget_instance rechaza solo objetos, wp_hash del array simplerender_block_core_legacy_widget the_widget tribe-widget-events-listWidget_List setup_arguments array_merge instance (classes sobrevive; setup_template_vars no lo sobrescribe)lista destacada vacía -> widget-events-list.php rama else components/messages.phptec_classes($classes) -> Element_Classes::parse_array clave string + valor is_callable -> poc_witness_78159($results) imprime POCWitness78159El cuerpo HTTP del GET de vista previa de moderación contiene POCWitness78159. El HTML de evento genérico sin esa cadena no lo es. debug.log también puede añadir POCWitness78159.
Haz esto primero: Actualiza The Events Calendar a 6.17.3.1 o posterior (Wordfence recomienda 6.17.4.1 para cubrir también CVE-2026-78006).
Verificar tras la actualización
CVE-2026-78159-Abraxas-Labs.py contra la compilación parcheada: el testigo mapeado no debe aparecer.Si no puedes actualizar de inmediato
Apunta solo a http://127.0.0.1:8088 (o al loopback que hayas enlazado). No apuntes este script a internet.
python3 CVE-2026-78159-Abraxas-Labs.py
El éxito es el testigo anterior en el cuerpo de la respuesta. Un HTML 200 genérico no lo es.
Pila de loopback usada para reproducir. Imágenes oficiales a menos que un Dockerfile en esta carpeta compile desde el código fuente.
cd lab
docker compose up --force-recreate
Enlaza el árbol del producto vulnerable junto a Compose si el YAML monta un directorio local (zip del plugin / etiqueta de código fuente de la tabla de versiones). No publiques nada excepto 127.0.0.1.
www.wordfence.com/threat-intel/vulnerabilities/id/cc2ccfeb-6df6-4fee-96a5-94f8dd131f7c?source=cve
Directorio de plugins: the-events-calendar
Navegador Trac: plugins.trac.wordpress.org/the-events-calendar
Etiquetas SVN: plugins.svn.wordpress.org/the-events-calendar
Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null
# CVE-2026-78159 (structured records)
- input: `https://nvd.nist.gov/vuln/detail/CVE-2026-78159`
- CWE: CWE-94
- published: 2026-09-12T08:16:24.377
## NVD description
The The Events Calendar plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 6.17.3 via the parse_array function. This is due to insufficient validation of the widget 'classes' map, allowing a plain-array payload to bypass the is_safe_widget_instance() object check and reach the callable-invocation sink in Element_Classes::parse_array(). This makes it possible for unauthenticated attackers to execute code on the server. Exploitation requires that the targeted site has comments enabled on tribe_events posts and that at least one comment containing a crafted wp:legacy-widget block has been submitted, as the attack chain is triggered when do_blocks() processes the single-event HTML including the comment area.
## MITRE description
The The Events Calendar plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 6.17.3 via the parse_array function. This is due to insufficient validation of the widget 'classes' map, allowing a plain-array payload to bypass the is_safe_widget_instance() object check and reach the callable-invocation sink in Element_Classes::parse_array(). This makes it possible for unauthenticated attackers to execute code on the server. Exploitation requires that the targeted site has comments enabled on tribe_events posts and that at least one comment containing a crafted wp:legacy-widget block has been submitted, as the attack chain is triggered when do_blocks() processes the single-event HTML including the comment area.
## Affected
- stellarwp The Events Calendar 0 affected
## References (JSON sources only)
- https://plugins.trac.wordpress.org/browser/the-events-calendar/tags/6.17.3/common/src/Tribe/Utils/Element_Classes.php#L211
- https://plugins.trac.wordpress.org/browser/the-events-calendar/tags/6.17.3/src/Tribe/Views/V2/Template_Bootstrap.php#L214
- https://plugins.trac.wordpress.org/browser/the-events-calendar/tags/6.17.3/src/Tribe/Views/V2/Widgets/Service_Provider.php#L279
- https://plugins.trac.wordpress.org/browser/the-events-calendar/tags/6.17.3/src/views/v2/components/messages.php#L30
- https://plugins.trac.wordpress.org/changeset?reponame=&old=3667866%40the-events-calendar&new=3667866%40the-events-calendar
- https://plugins.trac.wordpress.org/changeset?reponame=&old=3667867%40the-events-calendar&new=3667867%40the-events-calendar
- https://www.wordfence.com/threat-intel/vulnerabilities/id/cc2ccfeb-6df6-4fee-96a5-94f8dd131f7c?source=cve
- https://github.com/advisories/GHSA-9c57-9fxg-8x9j
- https://nvd.nist.gov/vuln/detail/CVE-2026-78159
## GitHub advisory
The The Events Calendar plugin for WordPress is vulnerable to Remote Code Execution in all...
The The Events Calendar plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 6.17.3 via the parse_array function. This is due to insufficient validation of the widget 'classes' map, allowing a plain-array payload to bypass the is_safe_widget_instance() object check and reach the callable-invocation sink in Element_Classes::parse_array(). This makes it possible for unauthenticated attackers to execute code on the server. Exploitation requires that the targeted site has comments enabled on tribe_events posts and that at least one comment containing a crafted wp:legacy-widget block has been submitted, as the attack chain is triggered when do_blocks() processes the single-event HTML including the comment area.
Este paquete de divulgación está licenciado bajo la GNU Affero General Public License v3.0. Ver LICENSE.
Este paquete es para el proveedor, el propietario del sitio y los labs autorizados. El script se comunica con 127.0.0.1. Usarlo contra sistemas que no posees no está autorizado por Abraxas Labs. Sin garantía.