← voltar
CVE-2025-21590mediumsob ataqueCWE-653

Junos OS: An local attacker with shell access can execute arbitrary code

43Vexday Risk Score

Priorize a correção. Ela está sob exploração confirmada pelo CISA.

ssvc Attendcvss 6.7epss 1.7%
da publicação à arma
Publicada no NVD12 de mar.
CISA KEV+1d
probabilidade de exploração
1.7%top 26% das CVEs
exploração observada
simCISA + VulnCheck
Ação exigida pela CISAprazo federal: 2025-04-03

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

Afetadas
Todas as versões anteriores a 21.2R3-S9; 21.4 anteriores a 21.4R3-S10; 22.2 anteriores a 22.2R3-S6; 22.4 anteriores a 22.4R3-S6; 23.2 anteriores a 23.2R2-S3; 23.4 anteriores a 23.4R2-S4; 24.2 anteriores a 24.2R1-S2, e a versão 24.2R2.
Corrigidas em
21.2R3-S9; 21.4R3-S10; 22.2R3-S6; 22.4R3-S6; 23.2R2-S3; 23.4R2-S4; 24.2R1-S2 (para a branch 24.2 antes de R1-S2) — a Juniper lista também 24.2R2 dentro do intervalo afetado, indicando necessidade de versão posterior a esta na mesma branch.

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.

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.
An Improper Isolation or Compartmentalization vulnerability in the kernel of Juniper Networks Junos OS allows a local attacker with high privileges to compromise the integrity of the device. A local attacker with access to the shell is able to inject arbitrary code which can compromise an affected device. This issue is not exploitable from the Junos CLI. This issue affects Junos OS:  * All versions before 21.2R3-S9, * 21.4 versions before 21.4R3-S10,  * 22.2 versions before 22.2R3-S6,  * 22.4 versions before 22.4R3-S6,  * 23.2 versions before 23.2R2-S3,  * 23.4 versions before 23.4R2-S4, * 24.2 versions before 24.2R1-S2, 24.2R2.
CVSS:4.0/AV:L/AC:L/AT:N/PR:H/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N