Junos OS: An local attacker with shell access can execute arbitrary code
Priorize a correção. Ela está sob exploração confirmada pelo CISA.
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
Falha no kernel do Junos OS (CWE-653, isolamento/compartimentalização impróprio) que permite a um atacante local já com acesso a shell e privilégios elevados injetar código arbitrário, contornando o subsistema de integridade veriexec. Não é explorável pela CLI do Junos — exige acesso à shell FreeBSD subjacente. Importa porque foi usada em campanha real de espionagem (UNC3886, atribuída à China) contra roteadores Juniper MX end-of-life, documentada pela Mandiant/Google Cloud, e está no catálogo KEV da CISA com exploração confirmada.
Detalhamento técnico
O Junos OS é baseado em FreeBSD modificado e roda em dois modos: CLI (comandos Junos) e shell (acesso direto ao FreeBSD subjacente para quem tem privilégio). O sistema veriexec é um subsistema de integridade de arquivos baseado em kernel (derivado do NetBSD Veriexec) que verifica hashes/assinaturas de binários, bibliotecas e scripts antes de permitir a execução, bloqueando código não autorizado.
O problema é que veriexec valida integridade no momento do exec() de um arquivo — ele não impede a injeção de código na memória de um processo já em execução e já validado. A vulnerabilidade é justamente essa lacuna de compartimentalização: um processo legítimo, confiável e já autorizado pelo veriexec, pode ter seu espaço de memória adulterado, e o código injetado passa a executar sob a identidade/contexto desse processo confiável, sem nunca passar pela checagem de integridade.
A Mandiant reconstruiu a cadeia observada em ataques reais: um loader (loader.bin) resolve funções da libc (exit, mmap, open, read, close), aloca memória e carrega um payload final (payload.bin) — identificado como versão PIC (Position Independent Code) do backdoor 'lmpad', da família TinyShell. Esse payload foi injetado em um processo recém-criado no dispositivo comprometido, efetivando a execução de código arbitrário fora da visibilidade do veriexec.
O que o atacante controla, na prática, é o conteúdo do código injetado — que pode implementar backdoors passivos e ativos, incluindo scripts para desabilitar mecanismos de log do próprio dispositivo, dificultando forense posterior.
Como é explorada
Esta não é uma vulnerabilidade de acesso inicial: o pré-requisito real é ter credenciais válidas com privilégio suficiente para entrar na shell FreeBSD a partir da CLI do Junos — geralmente conta administrativa comprometida. No caso documentado, o UNC3886 obteve acesso privilegiado a partir de um terminal server usado para gerenciar os dispositivos de rede, usando credenciais legítimas roubadas, e a partir daí entrou no modo shell.
Dentro da shell, o grupo usou um 'here document' para montar um arquivo Base64 (ldb.b64), decodificou com base64 para gerar um arquivo comprimido (ldb.tar.gz) e extraiu os binários maliciosos com gunzip/tar. A partir daí, o código foi injetado na memória de um processo legítimo recém-criado, contornando o veriexec sem desabilitá-lo diretamente — o que teria gerado alertas. Os equipamentos afetados nesse caso eram roteadores Juniper MX rodando hardware e software end-of-life.
A CISA confirma exploração ativa (KEV), com prazo de mitigação definido em 2025-04-03. O EPSS informado (0,01657) é baixo, o que é coerente com a natureza da falha: não é escaneável remotamente nem trivialmente automatizável em massa, pois depende de comprometimento prévio de credenciais privilegiadas — mas seu valor para um ator com esse acesso é alto, porque garante persistência furtiva de longo prazo em equipamento de borda tipicamente sem EDR.
Versões
Como se proteger
A correção definitiva é atualizar para as versões corrigidas por branch, publicadas pela Juniper. Onde não for possível atualizar imediatamente, a Mandiant recomenda atualizar para as imagens mais recentes disponíveis (que incluem mitigações e assinaturas atualizadas da ferramenta Juniper Malware Removal Tool - JMRT) e, após a atualização, executar o JMRT Quick Scan e o Integrity Check para detectar comprometimento residual.
Como controle compensatório real, restrinja e monitore rigorosamente quem tem privilégio para acessar a shell FreeBSD subjacente (não apenas a CLI Junos) — a falha só é explorável a partir desse ponto. Isso inclui endurecer o acesso a terminal servers e jump hosts usados para administração dos dispositivos, já que foi esse o vetor de acesso privilegiado observado no caso real. Monitorar/auditar uso de credenciais administrativas nesses pontos de gestão é mais eficaz do que qualquer controle de rede perimetral.
O que não funciona: restringir ou filtrar comandos da CLI Junos não mitiga nada, porque o fornecedor já deixa claro que a falha não é explorável pela CLI — ela exige shell. Segmentação de rede e ACLs de gerenciamento reduzem a chance de um atacante chegar ao ponto de ter shell, mas não corrigem a falha em si nem impedem exploração por quem já tem acesso administrativo legítimo (ou roubado).
Como detectar
Não há assinatura de tráfego de rede confiável, pois a exploração ocorre localmente, dentro da shell do dispositivo já comprometido — não é uma falha remota. Os indicadores conhecidos vêm da investigação da Mandiant: artefatos residuais como os arquivos ldb.b64/ldb.tar.gz e os binários loader.bin, pc.bin e payload.bin (variante PIC do backdoor 'lmpad', família TinyShell); uso de comandos here-document, base64, gunzip e tar dentro de sessões de shell FreeBSD; e processos anômalos com memória injetada. Rodar o JMRT (Junos Malware Removal Tool) Quick Scan e Integrity Check é a verificação recomendada pela Mandiant e pela Juniper para detectar comprometimento.
Um sinal indireto importante: o malware observado inclui rotina para desabilitar logging no dispositivo — logo, ausência ou lacunas suspeitas nos logs de auditoria de um equipamento Juniper de borda, combinadas com uso privilegiado de shell a partir de terminal servers de gerenciamento, deve ser tratada como indício de comprometimento, não como falta de evidência.