← voltar
CVE-2021-43798highsob ataqueCWE-22

Grafana path traversal

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 7.5epss 89%
da publicação à arma0 dias
Publicada no NVD7 de dez.
1ª PoC6 de dez.
metasploit2 de dez.
CISA KEV+1402d
probabilidade de exploração
89%top 1% das CVEs
exploração observada
simCISA + VulnCheck
93 exploit(s) público(s)
Ação exigida pela CISAprazo 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.

Resumo

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.

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

Como é explorada

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

Versões

Afetadas
Grafana 8.0.0-beta1 até 8.3.0 (inclusive)
Corrigidas em
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)

Como se proteger

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.

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

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
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
Produtos afetados
grafana · grafana
PoCs públicas encontradas93
exploitdbwww.exploit-db.com/exploits/50581não verificadogithubgithub.com/jas502n/Grafana-CVE-2021-43798369githubgithub.com/A-D-Team/grafanaExp269githubgithub.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/0xSAZZAD/Grafana-CVE-2021-437983githubgithub.com/hupe1980/CVE-2021-437983githubgithub.com/fanygit/Grafana-CVE-2021-43798Exp2githubgithub.com/monke443/CVE-2021-437982githubgithub.com/Ryze-T/CVE-2021-437982githubgithub.com/Jroo1053/GrafanaDirInclusion1githubgithub.com/k3rwin/CVE-2021-43798-Grafana1githubgithub.com/FAOG99/GrafanaDirectoryScanner1githubgithub.com/Strikoder-Premium/Grafana-Password-Decryptor1githubgithub.com/lfz97/CVE-2021-43798-Grafana-File-Read1githubgithub.com/LongWayHomie/CVE-2021-437981githubgithub.com/wagneralves/CVE-2021-437981githubgithub.com/baktistr/cve-2021-43798-enum0githubgithub.com/halencarjunior/grafana-CVE-2021-437980githubgithub.com/G01d3nW01f/CVE-2021-437980githubgithub.com/mauricelambert/LabAutomationCVE-2021-437980githubgithub.com/JiuBanSec/Grafana-CVE-2021-437980githubgithub.com/gixxyboy/CVE-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/hxlxmj/Grafxploit0githubgithub.com/davidrxchester/Grafana-8.3-Directory-Traversal0githubgithub.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/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/sbimoxa/cve-2021-43798-lab0vulncheckvulncheck.com/xdb/eb4d02f3b469não verificadocve_referencepacketstormsecurity.com/files/165221/Grafana-8.3.0-Directory-Traversal-Arbitrary-File-Read.htmlnão verificadovulncheckvulncheck.com/xdb/558378a73ba5não verificadovulncheckvulncheck.com/xdb/fe083a078074não verificadovulncheckvulncheck.com/xdb/5ef2f8e69303não verificadovulncheckvulncheck.com/xdb/ff14ea986b7enão verificadovulncheckvulncheck.com/xdb/aaf92101142bnão verificadovulncheckvulncheck.com/xdb/d9658825dfe1não verificadovulncheckvulncheck.com/xdb/5963aa3ef062não verificadovulncheckvulncheck.com/xdb/c0cccaf08786não verificadovulncheckvulncheck.com/xdb/2a0d639ed860não verificadovulncheckvulncheck.com/xdb/f73a10b5f83enão verificadovulncheckvulncheck.com/xdb/5489d7843c65não verificadovulncheckvulncheck.com/xdb/c7d6a0367ea8não verificadovulncheckvulncheck.com/xdb/845c7456e143não verificadovulncheckvulncheck.com/xdb/22e522f9172bnão verificadovulncheckvulncheck.com/xdb/d93ebfa49e3fnão verificadovulncheckvulncheck.com/xdb/47360e2fa8a7não verificadovulncheckvulncheck.com/xdb/236e72e66850não verificadovulncheckvulncheck.com/xdb/76da90988455não verificadovulncheckvulncheck.com/xdb/28282a16a3ebnão verificadovulncheckvulncheck.com/xdb/cfb186619041não verificadovulncheckvulncheck.com/xdb/8773828620b6não verificadovulncheckvulncheck.com/xdb/3637711ddf71não verificadovulncheckvulncheck.com/xdb/0ed14962e0b7não verificadovulncheckvulncheck.com/xdb/f6ae44bade08não verificadovulncheckvulncheck.com/xdb/e53a173dd7bdnão verificadovulncheckvulncheck.com/xdb/1b40521e51f2não verificadovulncheckvulncheck.com/xdb/05850a5fc3ecnão verificadovulncheckvulncheck.com/xdb/cd1912ebceednão verificadovulncheckvulncheck.com/xdb/34600f7e4ec5não verificadovulncheckvulncheck.com/xdb/b3dfc7f013ddnão verificadovulncheckvulncheck.com/xdb/53511d008932não verificadocve_referencepacketstormsecurity.com/files/165198/Grafana-Arbitrary-File-Reading.htmlnão verificadovulncheckvulncheck.com/xdb/6ce2a0eff0acnão verificadovulncheckvulncheck.com/xdb/1554b7478082não verificadovulncheckvulncheck.com/xdb/b170ca520754não verificadovulncheckvulncheck.com/xdb/fbe6b583cb86não verificadovulncheckvulncheck.com/xdb/926b1fb39e95não verificadovulncheckvulncheck.com/xdb/2062e832a860não verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.