CVE-2017-15944
Patch now. It under exploitation confirmed by CISA and has a working public exploit.
Apply updates per vendor instructions.
Summary
Cadeia de três falhas encadeadas na interface de gerenciamento web do PAN-OS (e Panorama) que permite execução remota de código como root sem autenticação. Descoberta por Philip Pettersson e divulgada em dezembro de 2017, está no catálogo KEV da CISA como exploração confirmada. O impacto real depende de um pré-requisito que a nota do fornecedor já cita como mitigação de fato: a interface de gerenciamento precisa estar acessível pela rede do atacante — algo que, segundo o próprio pesquisador, era comum encontrar exposto à internet via Shodan/Project Sonar na época.
Technical detail
O bug #1 é um bypass parcial de autenticação (CWE-287/CWE-020). O servidor web valida sessões checando o cookie PHPSESSID e lendo o arquivo de sessão via função própria `readSessionVarsFromFile()` (em `libpanApiWgetFilter.so`), que usa `strtok()` para parsear o formato serializado do PHP em vez das funções oficiais. O endpoint não autenticado `/esp/cms_changeDeviceContext.esp` aceita um parâmetro `device` que é gravado sem sanitização no arquivo de sessão; injetando a sequência `";` o atacante corrompe o parser e sobrescreve a variável `user`, produzindo um documento XML malformado que a função `panCheckSessionExpired()` interpreta incorretamente como sessão válida.
Com essa sessão falsificada, o bug #2 explora uma injeção XML (CWE-91) no método `Administrator.get`, exposto via RPC JSON em `/php/utils/router.php`. O parâmetro `jsonArgs->id` é concatenado sem sanitização ao atributo `obj` de uma requisição XML enviada ao backend (`pan_cfg_req_ctxt_construct()` em `libpanmp_mp.so`), dando ao atacante controle total sobre os atributos restantes da tag ``. Definindo `async-mode='yes'` e manipulando o atributo `cookie`, o atacante força a criação de um diretório temporário cujo caminho ele controla — incluindo sequências de path traversal (CWE-22) — em `/opt/pancfg/session/pan/user_tmp//`.
O bug #3, não detalhado publicamente em profundidade pelo fornecedor, é um script de cron vulnerável que processa arquivos/diretórios sob caminhos como `/opt/pancfg/mgmt/logdb/traffic/1/` de forma insegura. Nomeando o diretório criado no passo anterior com uma sequência que inclui um comando (via `find ... -exec`), o cron executa esse comando como root na próxima vez que dispara — por padrão a cada 15 minutos, segundo o módulo Metasploit.
O atacante não controla apenas dados de aplicação: controla o valor de um cookie de sessão corrompido, o payload JSON enviado ao RPC, e o nome de um diretório no sistema de arquivos que termina sendo interpretado como comando de shell pelo cron.
How it’s exploited
Pré-requisito real e único: acesso de rede à interface de gerenciamento web (HTTP/HTTPS) do dispositivo, sem necessidade de credenciais. Não há outra pré-condição de configuração — a cadeia inteira é pré-autenticação. A complexidade técnica de encadear os três bugs é alta (é um PoC de pesquisa, não um clique único), mas está totalmente automatizada em um módulo Metasploit público, o que reduz a barreira prática a quase zero para quem tem a interface exposta.
Na prática, o ataque tem duas fases: (1) obtenção de um cookie de sessão corrompido e criação, via RPC JSON, de um diretório com nome malicioso sob um caminho monitorado por cron; (2) espera pela próxima execução do job de cron (até ~20 minutos no módulo Metasploit) para que o comando embutido no nome do diretório seja executado como root. O resultado final é shell reverso com privilégio de root no próprio appliance de firewall — comprometimento total do dispositivo, não apenas de uma aplicação nele.
A CISA lista exploração ativa confirmada no catálogo KEV (adicionada em 2022, bem depois da divulgação original de 2017), o que indica reaproveitamento contínuo do PoC/módulo contra interfaces de gerenciamento ainda expostas e desatualizadas.
Versions
How to protect
Atualizar para as versões corrigidas é a única solução definitiva. Como paliativo quando a atualização não é imediata, o fornecedor distribuiu o content update 756 com as assinaturas de vulnerabilidade #40483 e #40484 — mas elas só funcionam se aplicadas a uma regra de firewall que proteja especificamente o tráfego destinado à interface de Management, o que exige que essa interface esteja de fato dentro de uma zona controlada por regra (não vale para tráfego direto à interface física de gerência fora do plano de dados).
A mitigação mais eficaz na prática, e que o próprio fornecedor recomenda como boa prática independente do patch, é isolar a interface de gerenciamento: segmentação de rede dedicada ou uso do controle de lista de acesso por IP nativo do PAN-OS, restringindo o acesso apenas ao pessoal de administração. Alternativa quando não é possível segmentar: gerenciar via Panorama com context switching, desabilitando completamente o acesso HTTP/HTTPS de gerenciamento em cada appliance vulnerável — isso elimina o vetor de rede da própria falha.
O que não mitiga: apenas trocar a senha de administrador não ajuda, porque a cadeia inteira contorna a autenticação antes de chegar a qualquer verificação de credencial. Vale notar uma divergência entre fontes: o advisory do fornecedor afirma que PAN-OS 8.0 não é explorável remotamente por usuário não autenticado através desta CVE específica (patch em 8.0.6 é defesa em profundidade), enquanto o PoC público do pesquisador lista '8.0.5 e anteriores' como vulnerável na cadeia completa. Trate 8.0.6 como o piso mínimo de qualquer forma.
How to detect
Nos logs do servidor web de gerenciamento, procurar requisições GET a `/esp/cms_changeDeviceContext.esp` com o parâmetro `device` contendo sequências de aspas simples seguidas de ponto-e-vírgula (padrão `%27";user|s.`) — isso é a assinatura da corrupção de sessão. Em seguida, procurar chamadas POST a `/php/utils/router.php` (ou `/php/utils/router.php/Administrator.get`) com corpo JSON contendo `Administrator.get`, `async-mode='yes'` e sequências de path traversal (`../../../../..`) no campo `cookie` dentro do parâmetro `id`.
No sistema de arquivos, diretórios inesperados sob `/opt/pancfg/session/pan/user_tmp/` ou `/opt/pancfg/mgmt/logdb/traffic/1/` cujo nome contenha metacaracteres de shell (por exemplo `-exec`, `openssl`, `s_client`) indicam a fase final da cadeia, antes da execução pelo cron. As assinaturas de conteúdo #40483 e #40484 do fornecedor, se ativas em uma regra cobrindo o tráfego da interface de Management, também geram alerta correlato.