← voltar
CVE-2020-14871criticalsob ataqueCWE-787

CVE-2020-14871

100Vexday Risk Score

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

ssvc Actcvss 10epss 80%
da publicação à arma55 dias
Publicada no NVD21 de out.
1ª PoC+55d
metasploit20 de out.
CISA KEV+378d
probabilidade de exploração
80%top 1% das CVEs
exploração observada
simCISA + VulnCheck
11 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-05-03

Apply updates per vendor instructions.

Resumo

Buffer overflow (CWE-787, escrita fora de limites) no módulo PAM do Oracle Solaris, na função de parsing do nome de usuário (parse_user_name), explorável remotamente e sem autenticação via SunSSH e outros serviços que invocam PAM. Atribuída CVSS 10.0 porque permite takeover completo do sistema sem nenhuma pré-condição de acesso, mas a própria Oracle nota que a falha não existe mais a partir do Solaris 11.1 — ou seja, o CVSS 10.0 só se aplica a Solaris 10 e a builds antigas de Solaris 11 ainda em suporte estendido. Está no catálogo KEV da CISA e foi usada por um grupo de ameaça (UNC1945, documentado pela Mandiant) contra servidores Solaris com SSH exposto à internet.

Detalhamento técnico

A falha está na implementação Sun/Oracle do PAM (Pluggable Authentication Module), especificamente no tratamento do nome de usuário recebido pelo daemon SSH (SunSSH) antes de ser passado para pam_start(). O nome de usuário não tem limite de tamanho sensato imposto antes de entrar na pilha de chamadas do PAM, permitindo que um atacante envie uma string de nome de usuário extremamente longa (relatos de exploits públicos usam strings da ordem de dezenas a ~128KB) que sobrescreve estruturas de memória além do buffer alocado.

O commit de mitigação do OpenSSH portátil (8.5, novembro de 2020) descreve o problema como 'buffer overflow in Solaris' PAM username handling', corrigido no lado do cliente/servidor SSH checando strlen(user) contra PAM_MAX_RESP_SIZE antes de repassar ao PAM, mas apenas quando a implementação de PAM é identificada como 'Sun-derived' (flag PAM_SUN_CODEBASE). Isso confirma que o bug reside no PAM da Oracle, não no OpenSSH — o OpenSSH apenas evita ser um dos vetores de disparo.

Exploits públicos catalogados no Packet Storm nomeiam a função vulnerável como 'parse_user_name' dentro do PAM do SunSSH, com variantes para Solaris 10 x86 e Solaris 11.0 x86/libpam, indicando que a rota de heap overflow (técnicas como 'House of Mind' foram citadas em discussões relacionadas de exploração de PAM em glibc/Solaris) foi adaptada para diferentes versões e arquiteturas.

Por ser um componente PAM, e não exclusivamente o SSH, a Oracle descreve o vetor como 'via multiple protocols' — qualquer serviço de rede em Solaris que autentique via PAM e passe o nome de usuário sem sanitização (login, telnet, ftp, além de sshd) é uma superfície de ataque potencial, embora o exploit documentado publicamente seja via SunSSH.

Como é explorada

O vetor documentado e com exploits públicos é o daemon SunSSH do Solaris: o atacante conecta-se ao serviço SSH exposto e envia, no campo de nome de usuário durante a negociação de autenticação, uma string malformada e excessivamente longa. Não é necessária autenticação prévia, nem chave, nem conta válida — o overflow ocorre antes de qualquer verificação de credencial, na fase de parsing do username pelo PAM. Não há interação do usuário nem configuração não padrão exigida: basta o serviço estar acessível na rede.

Existem múltiplos exploits públicos catalogados (Packet Storm) com variantes específicas por versão e arquitetura (Solaris 10 x86, Solaris 11.0 x86 com libpam, Solaris 11.0 genérico), e um módulo Metasploit, o que reduz a complexidade prática de exploração a quase zero para quem tem acesso de rede ao serviço. Sucesso na exploração resulta em execução de código com privilégios do processo que chama o PAM — tipicamente root, já que sshd e serviços de login rodam com privilégios elevados durante a fase de autenticação.

A exploração ativa está confirmada: a Mandiant documentou o grupo UNC1945 comprometendo servidores Solaris com SSH exposto à internet, com dwell time de cerca de 519 dias antes da detecção, instalando um backdoor (SLAPSTICK) para capturar credenciais. A CISA incluiu a CVE no catálogo KEV com prazo de correção em 2022-05-03, confirmando exploração no mundo real, não apenas prova de conceito.

Versões

Afetadas
Oracle Solaris 10 (todas as versões suportadas) e Oracle Solaris 11 em releases anteriores a 11.1; também impacta Oracle ZFS Storage Appliance (ZFSSA) em versões anteriores a 8.7, que embute componentes Solaris.
Corrigidas em
Solaris 11.1 e releases posteriores, e ZFSSA 8.7 e releases posteriores, não são exploráveis para esta CVE segundo a Oracle. Para os ramos ainda vulneráveis (Solaris 10 e Solaris 11 pré-11.1), a correção é o patch distribuído no Critical Patch Update de outubro de 2020 (cpuoct2020) da Oracle — consulte o advisory oficial para o identificador de patch exato por plataforma. Separadamente, OpenSSH portátil 8.5+ adiciona mitigação client/server-side (não é a correção do PAM em si).

Como se proteger

A correção definitiva é migrar para uma versão de Solaris onde a falha não existe: a própria Oracle afirma que Solaris 11.1 e posteriores, e Oracle ZFS Storage Appliance (ZFSSA) 8.7 e posteriores, já não são vulneráveis a esta CVE. Para Solaris 10 e para instalações de Solaris 11 anteriores a 11.1 ainda sob suporte, é necessário aplicar o Critical Patch Update de outubro de 2020 da Oracle (cpuoct2020) — não há número de patch específico detalhado nas fontes consultadas aqui; siga o advisory oficial da Oracle para o identificador exato do patch aplicável à sua versão e arquitetura.

Como paliativo parcial quando o patch da Oracle não pode ser aplicado imediatamente: atualizar para OpenSSH portátil 8.5 ou posterior no lado do cliente/servidor SSH adiciona uma verificação que rejeita nomes de usuário excessivamente longos antes de repassá-los ao PAM, mas essa mitigação só se aplica quando o próprio OpenSSH (não o SunSSH nativo da Oracle) é usado como daemon SSH, e só protege contra o vetor via sshd — não fecha a falha no PAM em si, que continua explorável por qualquer outro serviço PAM (login, ftp, telnet) que aceite nome de usuário de rede.

Controles compensatórios reais quando não é possível corrigir: restringir acesso de rede aos serviços autenticados via PAM (SSH, login, ftp) do Solaris afetado por firewall/ACL, limitando exposição a redes confiáveis; monitorar e limitar o tamanho de campos de autenticação em proxies/gateways na frente do serviço, quando existirem. Não funciona como mitigação: apenas trocar de shell, desabilitar contas específicas, ou confiar em autenticação por chave SSH — o overflow ocorre antes da verificação de credencial, então nenhuma configuração de conta impede o ataque.

Como detectar

Em nível de rede/aplicação, procure tentativas de autenticação SSH (ou outros serviços PAM: login, ftp, telnet) com campos de nome de usuário anormalmente longos — muito além do que qualquer conta legítima teria (exploits documentados usam desde poucos KB até ~128KB). Logs do sshd ou do PAM que mostrem falhas de autenticação truncadas, crashes do processo de autenticação, ou reinícios inesperados do daemon sshd/pam em hosts Solaris são indícios fortes de tentativa de exploração.

Não há assinatura única confiável para todas as variantes, já que existem múltiplos exploits públicos com técnicas e tamanhos de payload diferentes por versão/arquitetura; ambientes que já sofreram comprometimento real (caso UNC1945) foram detectados por indicadores de pós-exploração — backdoors, credenciais capturadas, atividade lateral — e não pela assinatura do exploit em si, o que reforça a importância de monitorar comportamento pós-autenticação em hosts Solaris expostos à internet, não apenas o tráfego de exploração.

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.
Vulnerability in the Oracle Solaris product of Oracle Systems (component: Pluggable authentication module). Supported versions that are affected are 10 and 11. Easily exploitable vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Oracle Solaris. While the vulnerability is in Oracle Solaris, attacks may significantly impact additional products. Successful attacks of this vulnerability can result in takeover of Oracle Solaris. Note: This CVE is not exploitable for Solaris 11.1 and later releases, and ZFSSA 8.7 and later releases, thus the CVSS Base Score is 0.0. CVSS 3.1 Base Score 10.0 (Confidentiality, Integrity and Availability impacts). CVSS Vector: (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.