← back
CVE-2021-43798highunder attackCWE-22

Grafana path traversal

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 7.5epss 89%
from disclosure to weapon0 days
Published on NVDDec 7
1st PoCDec 6
metasploitDec 2
CISA KEV+1402d
exploitation probability
89%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
98 public exploit(s)
Action required by CISAfederal deadline: 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.

Summary

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.

Technical detail

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.

How it’s exploited

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).

Versions

Affected
Grafana 8.0.0-beta1 até 8.3.0 (inclusive)
Fixed in
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)

How to protect

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.

How to detect

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.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
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
Affected products
grafana · grafana
public PoCs found98
exploitdbwww.exploit-db.com/exploits/50581unverifiedgithubgithub.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/28282a16a3ebunverifiedvulncheckvulncheck.com/xdb/76da90988455unverifiedvulncheckvulncheck.com/xdb/236e72e66850unverifiedvulncheckvulncheck.com/xdb/dcbb42eac115unverifiedvulncheckvulncheck.com/xdb/47360e2fa8a7unverifiedvulncheckvulncheck.com/xdb/d93ebfa49e3funverifiedvulncheckvulncheck.com/xdb/5963aa3ef062unverifiedvulncheckvulncheck.com/xdb/3580302b2997unverifiedvulncheckvulncheck.com/xdb/22e522f9172bunverifiedvulncheckvulncheck.com/xdb/aaf92101142bunverifiedcve_referencepacketstormsecurity.com/files/165198/Grafana-Arbitrary-File-Reading.htmlunverifiedvulncheckvulncheck.com/xdb/ff14ea986b7eunverifiedvulncheckvulncheck.com/xdb/845c7456e143unverifiedvulncheckvulncheck.com/xdb/c7d6a0367ea8unverifiedvulncheckvulncheck.com/xdb/5ef2f8e69303unverifiedvulncheckvulncheck.com/xdb/fe083a078074unverifiedvulncheckvulncheck.com/xdb/5489d7843c65unverifiedvulncheckvulncheck.com/xdb/f73a10b5f83eunverifiedvulncheckvulncheck.com/xdb/2a0d639ed860unverifiedvulncheckvulncheck.com/xdb/558378a73ba5unverifiedvulncheckvulncheck.com/xdb/c0cccaf08786unverifiedvulncheckvulncheck.com/xdb/d9658825dfe1unverifiedvulncheckvulncheck.com/xdb/0179b38de8b1unverifiedvulncheckvulncheck.com/xdb/b3dfc7f013ddunverifiedvulncheckvulncheck.com/xdb/53511d008932unverifiedvulncheckvulncheck.com/xdb/6ce2a0eff0acunverifiedvulncheckvulncheck.com/xdb/1554b7478082unverifiedvulncheckvulncheck.com/xdb/b170ca520754unverifiedvulncheckvulncheck.com/xdb/fbe6b583cb86unverifiedvulncheckvulncheck.com/xdb/926b1fb39e95unverifiedvulncheckvulncheck.com/xdb/2062e832a860unverifiedvulncheckvulncheck.com/xdb/eb4d02f3b469unverifiedvulncheckvulncheck.com/xdb/30ff1fead80funverifiedcve_referencepacketstormsecurity.com/files/165221/Grafana-8.3.0-Directory-Traversal-Arbitrary-File-Read.htmlunverifiedvulncheckvulncheck.com/xdb/34600f7e4ec5unverifiedvulncheckvulncheck.com/xdb/cd1912ebceedunverifiedvulncheckvulncheck.com/xdb/05850a5fc3ecunverifiedvulncheckvulncheck.com/xdb/1b40521e51f2unverifiedvulncheckvulncheck.com/xdb/e53a173dd7bdunverifiedvulncheckvulncheck.com/xdb/f6ae44bade08unverifiedvulncheckvulncheck.com/xdb/0ed14962e0b7unverifiedvulncheckvulncheck.com/xdb/3637711ddf71unverifiedvulncheckvulncheck.com/xdb/8773828620b6unverifiedvulncheckvulncheck.com/xdb/cfb186619041unverified
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.