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
cotonti-commentswidget-poc — Prueba de concepto local segura para la vulnerabilidad de inyección de objetos PHP en Cotonti CommentsWidget (CAN-2026-2035973 / CVE-2026-71294). | Kitploit
Herramientas/GitHubGitHub/harshrajsinghania/cotonti-commentswidget-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebAprendizaje y Educación
GitHubharshrajsinghania/cotonti-commentswidget-poc

cotonti-commentswidget-poc

Prueba de concepto local segura para la vulnerabilidad de inyección de objetos PHP en Cotonti CommentsWidget (CAN-2026-2035973 / CVE-2026-71294).

Ver Repositorio
hace 14h 47mAú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

PoC de inyección de objetos PHP en Cotonti CommentsWidget

Prueba de concepto local segura para el problema de inyección de objetos PHP identificado en la implementación de CommentsWidget de Cotonti.

Vulnerabilidad

  • Proyecto: Cotonti
  • Componente afectado: plugins/comments/inc/CommentsWidget.php
  • CWE: CWE-502 — Deserialización de datos no confiables
  • CVE/Candidato: CAN-2026-2035973 / CVE-2026-71294
  • Investigador: Harsh Raj Singhania

La ruta de código vulnerable acepta el parámetro GET ci y pasa datos controlados por el atacante a través de base64_decode() hacia unserialize() de PHP sin restringir qué clases pueden instanciarse.

Conceptualmente, la operación vulnerable es:

root@kitploit:~
$ci = @unserialize(base64_decode($ci));

Cuando se proporciona un objeto serializado, PHP puede instanciar la clase controlada por el atacante e invocar métodos mágicos como . En una aplicación más grande esto puede volverse peligroso cuando hay clases gadget adecuadas disponibles.

__wakeup()

La corrección enviada cambia la deserialización a:

root@kitploit:~
$ci = @unserialize(base64_decode($ci), ['allowed_classes' => false]);

y valida que el valor resultante tenga la estructura de array esperada antes de usarlo.

Qué demuestra este PoC

poc.php realiza tres pruebas locales:

  1. Comportamiento vulnerable — unserialize() sin restricciones instancia DangerousGadget y desencadena su método __wakeup().
  2. Comportamiento corregido — allowed_classes => false impide que se instancie la clase gadget y por lo tanto previene el efecto secundario de __wakeup().
  3. Validación estructural — un valor serializado con una forma inesperada es rechazado por la lógica de validación utilizada por la corrección.

El PoC usa /tmp/pwned_by_cotonti_poc.txt solo como un centinela inofensivo que muestra que __wakeup() se ejecutó. No ejecuta un comando del sistema operativo. La cadena id && whoami existe solo como un valor de marcador de posición en la propiedad command del gadget.

Requisitos

  • PHP CLI con soporte de serialize() / unserialize()
  • Un entorno de prueba local

No se requiere una instalación de Cotonti porque el comportamiento de deserialización vulnerable y corregido se reproduce directamente.

Ejecución del PoC

Desde el directorio del repositorio:

root@kitploit:~
php poc.php

La salida esperada es similar a:

root@kitploit:~
[!] DangerousGadget::__wakeup() triggered
[TEST 1] VULNERABLE: __wakeup() executed during unrestricted unserialize().
[TEST 2] FIXED: object instantiation was blocked; no sentinel was created.
[TEST 3] FIXED: invalid serialized structure rejected by validation.

Summary:
- Vulnerable path allows a serialized attacker-controlled object to be instantiated and invokes __wakeup().
- Fixed path uses allowed_classes=false, preventing the gadget class from being instantiated.
- Structural validation rejects values that do not match the expected array shape.
- No real command execution is performed by this PoC; the command property is only a placeholder.

El script elimina su archivo centinela antes de salir.

Remediación

No deserialice datos controlados por el atacante con unserialize() de PHP sin restricciones.

Para esta ruta de código, la mitigación demostrada es deshabilitar la instanciación de clases:

root@kitploit:~
unserialize($data, ['allowed_classes' => false]);

El valor deserializado también debe validarse contra la estructura exacta esperada por la aplicación antes de que se use su contenido.

Referencias

  • Problema de seguridad upstream: https://github.com/Cotonti/Cotonti/issues/1888
  • Pull request de corrección upstream: https://github.com/Cotonti/Cotonti/pull/1889
  • Proyecto Cotonti: https://github.com/Cotonti/Cotonti

Uso responsable

Este repositorio está destinado a la investigación de seguridad, verificación y pruebas defensivas. Ejecute el PoC solo en entornos que posea o esté explícitamente autorizado a probar. No lo use para atacar sistemas sin permiso.

Atribución

Harsh Raj Singhania — investigación de vulnerabilidades, prueba de concepto y divulgación.

Descargar herramienta