PAN-OS: Authentication Bypass in the Management Web Interface
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.
Resumo
Falha de bypass de autenticação na interface web de gerenciamento do PAN-OS que permite a um atacante não autenticado, com acesso de rede a essa interface, invocar scripts PHP internos sem passar pelo login. Não é RCE por si só, mas expõe funcionalidade que impacta confidencialidade (leitura de dados) e integridade (alteração de configuração), e foi usada em cadeia com outras duas CVEs para comprometer firewalls expostos à internet.
Detalhamento técnico
A causa raiz é CWE-306 (Missing Authentication for Critical Function), originada de uma inconsistência de processamento de path entre três camadas que tratam a mesma requisição HTTP: Nginx, Apache e o interpretador PHP (mod_php/FCGI). O Nginx decide se a requisição precisa de autenticação com base no header interno X-pan-AuthCheck, que é setado 'off' quando a URI casa com padrões como '/unauth/.+'. Essa decisão é tomada sobre a URI já decodificada uma vez por Nginx.
A requisição então é repassada ao Apache, que reprocessa o path do zero. O Apache tem uma RewriteRule dentro de um bloco que reescreve URLs terminadas em extensões como .css/.js/.html/.htm dentro de '/PAN_help/' (usada para servir arquivos .gz). Quando essa regra casa, o Apache faz um 'internal redirect', reprocessando a requisição como se fosse nova — e nesse reprocessamento a URL é decodificada uma segunda vez. Isso é um comportamento de path confusion documentado por pesquisadores do Apache (pesquisa da Orange Tsai citada como referência), mas raramente considerado em código que decide autenticação por regex sobre a URI crua.
O efeito prático: uma URI como '/unauth/%252e%252e/php/ztp_gate.php/PAN_help/x.css' é vista pelo Nginx como estando dentro de '/unauth/' (logo, sem autenticação necessária), mas depois da dupla decodificação no Apache resolve para um script PHP diferente (ex.: '/php/ztp_gate.php'), que é executado sem que o header X-pan-AuthCheck: off devesse ter sido aplicado a ele. O atacante controla o path e a técnica de double-encoding para escolher qual script PHP acessível é invocado nesse contexto sem autenticação — não controla execução de código arbitrário, apenas a lógica interna já implementada nesses scripts.
Como é explorada
Pré-requisito real e limitante: acesso de rede à interface web de gerenciamento do PAN-OS. Isso normalmente significa a interface de management dedicada (ou uma interface de dataplane com management profile associado) exposta em porta específica — o cenário de maior risco é quando essa interface está acessível diretamente da internet, o que o próprio fornecedor identificou via scan e chamou de exposição crítica. Não exige autenticação, não exige interação do usuário e a complexidade de ataque é baixa (CVSS AC:L, AT:N, PR:N, UI:N) — uma vez que a interface está alcançável, a exploração é uma requisição HTTP manipulada, sem necessidade de credenciais.
Na prática documentada, a exploração raramente é usada isolada: pesquisadores da Assetnote publicaram PoC no mesmo dia da divulgação encadeando CVE-2025-0108 com CVE-2024-9474 (escalada de privilégio para root) para obter execução completa como administrador. O fornecedor confirmou observação de tentativas em ambientes reais encadeando CVE-2025-0108 com CVE-2024-9474 e CVE-2025-0111 (leitura de arquivo autenticada), permitindo baixar arquivos de configuração e dados sensíveis de dispositivos não corrigidos. GreyNoise registrou aumento de endereços IP escaneando/explorando de 2 para 25 em poucos dias, com origens predominantes em EUA, Alemanha e Holanda (não necessariamente a localização real dos atacantes).
Há PoC pública (script Python) e a CISA confirmou exploração ativa ao incluir a falha no catálogo KEV, com prazo de remediação até 11/03/2025 para agências federais dos EUA. Levantamentos independentes (Macnica) relataram milhares de dispositivos PAN-OS com interface de gerenciamento exposta publicamente, com a maioria ainda não corrigida semanas após a divulgação — cerca de 65% dos dispositivos expostos identificados permaneciam vulneráveis à cadeia completa das três CVEs.
Versões
Como se proteger
A correção definitiva é atualizar para as versões corrigidas do PAN-OS (ver versions_fixed). O fornecedor não indica nenhuma flag de configuração que elimine a falha sem patch — o único controle compensatório real é restringir o acesso de rede à interface de gerenciamento a endereços IP internos confiáveis (ex.: uma jump box dedicada), conforme o guia de boas práticas de acesso administrativo do fornecedor. Isso reduz o vetor a zero para atacantes externos, mas não corrige a vulnerabilidade em si — qualquer host com acesso à faixa liberada ainda pode explorar.
Assinantes de Threat Prevention podem habilitar as assinaturas Threat ID 510000 e 510001 (introduzidas no conteúdo de Applications and Threats versão 8943), que bloqueiam padrões de exploração conhecidos — funciona como mitigação de rede complementar, não substitui o patch. GlobalProtect portals/gateways não são vulneráveis por si só, mas se um management profile estiver associado a uma interface que também hospeda GlobalProtect, a interface de gerenciamento (tipicamente na porta 4443) fica exposta e vulnerável nesse cenário.
O que não funciona: assumir que segmentar apenas a porta padrão de gerenciamento (443) resolve — se houver um management profile aplicado a qualquer interface de dataplane, a exposição existe também por ali. Da mesma forma, corrigir apenas CVE-2024-9474 ou CVE-2025-0111 sem also corrigir CVE-2025-0108 deixa o dispositivo vulnerável à cadeia completa de exploração observada em ataques reais.
Como detectar
Padrões de exploração usam URLs com o prefixo '/unauth/' seguido de sequências de path traversal duplamente codificadas (ex.: '%252e%252e') apontando para scripts PHP internos e terminando em um path sob '/PAN_help/' com extensão .css/.js/.html/.htm — esse padrão característico (double URL-encoding combinado com o sufixo de rewrite do Apache) deve ser procurado em logs de acesso do Nginx/Apache da interface de gerenciamento. GreyNoise e outros observaram tentativas de exploração ativas a partir de múltiplos IPs (inicialmente 2, depois 25 em poucos dias), majoritariamente originadas de faixas atribuídas a EUA, Alemanha e Holanda — útil como indicador de campanha, não como prova definitiva de origem do atacante. Como o próprio fornecedor não publicou assinatura de detecção específica além das Threat IDs 510000/510001, e o PoC público facilita variações do payload, a ausência de logs correspondentes ao padrão acima não garante que não houve tentativa — dispositivos sem management interface exposta à internet simplesmente não geram esse tráfego.