← volver
CVE-2021-43798highbajo ataqueCWE-22

Grafana path traversal

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 7.5epss 89%
de la publicación al arma0 días
Publicada en NVD7 dic
1ª PoC6 dic
metasploit2 dic
CISA KEV+1402d
probabilidad de explotación
89%top 1% de las CVE
explotación observada
CISA + VulnCheck
98 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2025-10-30

Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

Resumen

Path traversal não autenticado no endpoint de assets de plugins do Grafana (/public/plugins//), que permite ler qualquer arquivo do sistema de arquivos acessível ao processo grafana-server. Como toda instalação padrão já vem com plugins pré-instalados (Prometheus, MySQL, InfluxDB etc.), a lista de URLs vulneráveis é fixa e conhecida — o atacante não precisa descobrir nada sobre o ambiente. O CVSS 7.5 reflete só impacto de confidencialidade (sem RCE direto), mas o vazamento da falha antes do patch público (virou 0-day), a presença em massa de scanners com Metasploit/Nuclei e a listagem no catálogo KEV da CISA tornam o risco prático mais alto do que o número sugere.

Detalle técnico

A falha está em pkg/api/plugins.go, na função getPluginAssets, que atende o endpoint /public/plugins/:pluginId/*. O código original aplicava filepath.Clean() diretamente sobre o wildcard capturado da URL e depois fazia filepath.Join() com o diretório do plugin. Sem um prefixo absoluto antes do Clean, sequências como ../../../../etc/passwd não eram neutralizadas — o Clean normaliza o caminho, mas sem uma raiz fixa ele preserva os '..' que sobem além do diretório base, e o Join subsequente simplesmente concatena isso ao PluginDir, resultando em leitura fora da sandbox esperada. Classifica-se como CWE-22 (Path Traversal / 'Directory Traversal').

O atacante controla o segmento de caminho após o pluginId (o wildcard '*' da rota), único ponto de entrada não sanitizado corretamente. Não há verificação de autenticação nessa rota — ela serve assets estáticos de plugins e é pública por design, o que a torna sensível a qualquer erro de canonicalização.

A correção (commit c798c0e) prefixa '/' antes do filepath.Clean(), calcula o caminho relativo com filepath.Rel('/', requestedFile) e só então junta esse caminho relativo — agora garantidamente contido — ao caminho absoluto do diretório do plugin (filepath.Abs(plugin.PluginDir)). Essa sequência impede que qualquer valor de entrada resulte em um caminho final fora do diretório do plugin, independente de quantos '../' o atacante encadear.

Cómo se explota

O vetor é uma requisição HTTP GET simples e não autenticada contra /public/plugins// seguida de sequências de travessia de diretório para escapar do diretório do plugin e alcançar arquivos arbitrários legíveis pelo processo do Grafana (configurações, /etc/passwd, chaves, e potencialmente grafana.ini com credenciais de datasource, dependendo de como o serviço foi implantado). Não exige configuração não padrão: qualquer instância Grafana entre 8.0.0-beta1 e 8.3.0 tem plugins built-in habilitados por padrão (prometheus, mysql, influxdb, testdata, entre outros listados pelo fornecedor), então a superfície de ataque é idêntica em praticamente todo deploy exposto à rede.

A vulnerabilidade foi reportada responsavelmente ao Grafana em 2021-12-03, mas em 2021-12-07 a informação vazou publicamente antes da disponibilização do patch para todos os usuários, forçando a equipe a antecipar o release com apenas duas horas de janela — na prática tornou-se um 0-day ativamente exploitado nas horas seguintes à divulgação. Isso explica a presença no catálogo KEV da CISA e a rápida disponibilidade de módulo Metasploit, template Nuclei e PoCs públicas: a exploração é trivial de automatizar e foi varrida em massa contra instâncias expostas na internet.

O resultado final da exploração é leitura arbitrária de arquivo (disclosure), sem escrita nem execução direta — mas leitura de arquivos de configuração ou segredos costuma servir como trampolim para comprometimento mais profundo (credenciais de datasource, tokens de API, chaves SSH se o processo tiver privilégios elevados).

Versiones

Afectadas
Grafana 8.0.0-beta1 até 8.3.0 (inclusive)
Corregidas en
8.0.7, 8.1.8, 8.2.7 e 8.3.1 (patches por branch; correções subsequentes 8.3.2 e 7.5.12 tratam falhas relacionadas mas distintas, CVE-2021-43813/CVE-2021-43815)

Cómo protegerse

A correção definitiva é atualizar para 8.3.1, 8.2.7, 8.1.8 ou 8.0.7, conforme o branch em uso — o fornecedor liberou patches paralelos para as quatro séries ativas na época, cada um contendo somente o fix de segurança. Não existe flag de configuração que desative a rota vulnerável sem quebrar a UI de plugins, então atualizar é o caminho recomendado.

Se a atualização não for imediatamente viável, o próprio fornecedor recomenda colocar um reverse proxy na frente do Grafana que normalize o PATH da requisição antes de repassá-la (o advisory cita como exemplo a opção normalize_path do Envoy). Esse paliativo reduz a exposição mas não corrige a causa raiz e precisa também tratar variantes url-encoded do path, senão pode ser contornado. Grafana Cloud nunca foi afetado justamente porque já operava com essa camada de normalização de path por padrão (defesa em profundidade), o que reforça que a mitigação por proxy é tecnicamente válida quando bem configurada.

Vale não confundir com os patches subsequentes 8.3.2 e 7.5.12, que corrigem CVE-2021-43813 (leitura de arquivos .md, autenticado) e CVE-2021-43815 (leitura de .csv, autenticado, exige datasource TestData DB habilitado — desabilitado por padrão). São falhas relacionadas mas distintas, com pré-requisitos de autenticação que CVE-2021-43798 não tem; atualizar apenas para essas versões cobre também o CVE-2021-43798, mas o inverso (aplicar só o fix de dezembro/07) não cobre as duas de dezembro/10.

Cómo detectar

Procurar em logs de acesso do Grafana requisições para o padrão /public/plugins//... contendo sequências de travessia — '../' literal ou suas variantes url-encoded como '..%2f', '%2e%2e/', '%2e%2e%2f'. O próprio fornecedor orientou, no follow-up sobre as CVEs relacionadas de .md/.csv, buscar por '..%2f' nos logs de requisição como indício de tentativa de exploração. Uma resposta HTTP 200 para esse tipo de path contra um dos plugins pré-instalados (prometheus, mysql, testdata etc.) é indício forte de exploração bem-sucedida, não apenas de tentativa; não há um sinal de rede distinto além do próprio padrão da URL, já que a técnica não depende de payload complexo ou cabeçalhos especiais.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
Grafana is an open-source platform for monitoring and observability. Grafana versions 8.0.0-beta1 through 8.3.0 (except for patched versions) iss vulnerable to directory traversal, allowing access to local files. The vulnerable URL path is: `<grafana_host_url>/public/plugins//`, where is the plugin ID for any installed plugin. At no time has Grafana Cloud been vulnerable. Users are advised to upgrade to patched versions 8.0.7, 8.1.8, 8.2.7, or 8.3.1. The GitHub Security Advisory contains more information about vulnerable URL paths, mitigation, and the disclosure timeline.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Productos afectados
grafana · grafana
PoCs públicas encontradas98
exploitdbwww.exploit-db.com/exploits/50581no verificadogithubgithub.com/jas502n/Grafana-CVE-2021-43798369githubgithub.com/A-D-Team/grafanaExp270githubgithub.com/pedrohavay/exploit-grafana-CVE-2021-4379846githubgithub.com/taythebot/CVE-2021-4379841githubgithub.com/zer0yu/CVE-2021-4379827githubgithub.com/Mr-xn/CVE-2021-4379824githubgithub.com/MoCh3n/CVE-2021-43798-grafana_fileread17githubgithub.com/ScorpionsMAX/CVE-2021-43798-Grafana-POC14githubgithub.com/asaotomo/CVE-2021-43798-Grafana-Exp12githubgithub.com/Mo0ns/Grafana_POC-CVE-2021-437989githubgithub.com/Sic4rio/Grafana-Decryptor-for-CVE-2021-437988githubgithub.com/kenuosec/grafanaExp6githubgithub.com/z3n70/CVE-2021-437985githubgithub.com/s1gh/CVE-2021-437984githubgithub.com/K3ysTr0K3R/CVE-2021-43798-EXPLOIT4githubgithub.com/wezoomagency/GrafXploit4githubgithub.com/hupe1980/CVE-2021-437983githubgithub.com/0xSAZZAD/Grafana-CVE-2021-437983githubgithub.com/Ryze-T/CVE-2021-437982githubgithub.com/fanygit/Grafana-CVE-2021-43798Exp2githubgithub.com/monke443/CVE-2021-437982githubgithub.com/Jroo1053/GrafanaDirInclusion1githubgithub.com/Strikoder-Premium/Grafana-Password-Decryptor1githubgithub.com/wagneralves/CVE-2021-437981githubgithub.com/FAOG99/GrafanaDirectoryScanner1githubgithub.com/lfz97/CVE-2021-43798-Grafana-File-Read1githubgithub.com/k3rwin/CVE-2021-43798-Grafana1githubgithub.com/LongWayHomie/CVE-2021-437981githubgithub.com/manfredgabriel/cve-2021-43798-lab0githubgithub.com/hxlxmj/Grafxploit0githubgithub.com/davidrxchester/Grafana-8.3-Directory-Traversal0githubgithub.com/sbimoxa/cve-2021-43798-lab0githubgithub.com/halencarjunior/grafana-CVE-2021-437980githubgithub.com/G01d3nW01f/CVE-2021-437980githubgithub.com/mauricelambert/LabAutomationCVE-2021-437980githubgithub.com/victorhorowitz/grafana-exploit-CVE-2021-437980githubgithub.com/katseyres2/CVE-2021-437980githubgithub.com/Iris288/CVE-2021-437980githubgithub.com/ticofookfook/CVE-2021-437980githubgithub.com/MalekAlthubiany/CVE-2021-437980githubgithub.com/ravi5hanka/CVE-2021-43798-Exploit-for-Windows-and-Linux0githubgithub.com/suljov/Grafana-LFI-exploit0githubgithub.com/abuyazeen/CVE-2021-43798-Grafana-path-traversal-tester0githubgithub.com/0xf3d0rq/CVE-2021-437980githubgithub.com/baktistr/cve-2021-43798-enum0githubgithub.com/notbside/CVE-2021-43798-PoC0githubgithub.com/Shoxake17/CVE-2021-437980githubgithub.com/kikechans/-Grafana-LFI-CVE-2021-437980githubgithub.com/Asbawy/GrafTraverse-CVE-2021-437980githubgithub.com/Okymi-X/CVE-2021-437980githubgithub.com/Lim-ahmin/CVE-2021-437980githubgithub.com/JiuBanSec/Grafana-CVE-2021-437980githubgithub.com/gixxyboy/CVE-2021-437980vulncheckvulncheck.com/xdb/28282a16a3ebno verificadovulncheckvulncheck.com/xdb/76da90988455no verificadovulncheckvulncheck.com/xdb/236e72e66850no verificadovulncheckvulncheck.com/xdb/dcbb42eac115no verificadovulncheckvulncheck.com/xdb/47360e2fa8a7no verificadovulncheckvulncheck.com/xdb/d93ebfa49e3fno verificadovulncheckvulncheck.com/xdb/5963aa3ef062no verificadovulncheckvulncheck.com/xdb/3580302b2997no verificadovulncheckvulncheck.com/xdb/22e522f9172bno verificadovulncheckvulncheck.com/xdb/aaf92101142bno verificadocve_referencepacketstormsecurity.com/files/165198/Grafana-Arbitrary-File-Reading.htmlno verificadovulncheckvulncheck.com/xdb/ff14ea986b7eno verificadovulncheckvulncheck.com/xdb/845c7456e143no verificadovulncheckvulncheck.com/xdb/c7d6a0367ea8no verificadovulncheckvulncheck.com/xdb/5ef2f8e69303no verificadovulncheckvulncheck.com/xdb/fe083a078074no verificadovulncheckvulncheck.com/xdb/5489d7843c65no verificadovulncheckvulncheck.com/xdb/f73a10b5f83eno verificadovulncheckvulncheck.com/xdb/2a0d639ed860no verificadovulncheckvulncheck.com/xdb/558378a73ba5no verificadovulncheckvulncheck.com/xdb/c0cccaf08786no verificadovulncheckvulncheck.com/xdb/d9658825dfe1no verificadovulncheckvulncheck.com/xdb/0179b38de8b1no verificadovulncheckvulncheck.com/xdb/b3dfc7f013ddno verificadovulncheckvulncheck.com/xdb/53511d008932no verificadovulncheckvulncheck.com/xdb/6ce2a0eff0acno verificadovulncheckvulncheck.com/xdb/1554b7478082no verificadovulncheckvulncheck.com/xdb/b170ca520754no verificadovulncheckvulncheck.com/xdb/fbe6b583cb86no verificadovulncheckvulncheck.com/xdb/926b1fb39e95no verificadovulncheckvulncheck.com/xdb/2062e832a860no verificadovulncheckvulncheck.com/xdb/eb4d02f3b469no verificadovulncheckvulncheck.com/xdb/30ff1fead80fno verificadocve_referencepacketstormsecurity.com/files/165221/Grafana-8.3.0-Directory-Traversal-Arbitrary-File-Read.htmlno verificadovulncheckvulncheck.com/xdb/34600f7e4ec5no verificadovulncheckvulncheck.com/xdb/cd1912ebceedno verificadovulncheckvulncheck.com/xdb/05850a5fc3ecno verificadovulncheckvulncheck.com/xdb/1b40521e51f2no verificadovulncheckvulncheck.com/xdb/e53a173dd7bdno verificadovulncheckvulncheck.com/xdb/f6ae44bade08no verificadovulncheckvulncheck.com/xdb/0ed14962e0b7no verificadovulncheckvulncheck.com/xdb/3637711ddf71no verificadovulncheckvulncheck.com/xdb/8773828620b6no verificadovulncheckvulncheck.com/xdb/cfb186619041no verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.