CVE-2020-7961
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
Apply updates per vendor instructions.
Resumo
Falha de deserialização insegura (CWE-502) no serviço JSON Web Services (JSONWS) do Liferay Portal, que permite a um atacante remoto e não autenticado enviar um objeto Java serializado malicioso e obter execução arbitrária de código no servidor. É crítica de fato, não só no papel: está na CISA KEV, tem exploração confirmada em campanha de botnet real (FreakOut) e EPSS próximo de 1.
Detalhamento técnico
O JSONWS é a camada de API do Liferay Portal que expõe métodos de serviço via HTTP/JSON para integração remota. Parte dessa camada aceita e desserializa objetos Java enviados pelo cliente sem validar o tipo ou a origem dos dados antes de reconstruí-los em memória — o clássico padrão de 'unmarshalling' inseguro (CWE-502).
Como em outras vulnerabilidades de desserialização Java da época (Struts, WebLogic, Jenkins), o problema não está em uma única classe vulnerável isolada, mas na combinação entre um ponto de entrada que aceita bytes serializados controlados pelo atacante e a presença, no classpath da aplicação, de classes ('gadgets') que podem ser encadeadas para executar código arbitrário no momento em que o objeto é reconstruído — antes de qualquer verificação de autenticação ou de lógica de negócio ser aplicada.
O atacante controla integralmente o payload serializado enviado ao endpoint JSONWS. Não é necessário autenticar-se nem ter uma sessão válida: o ponto vulnerável processa o objeto durante a desserialização, etapa que ocorre antes de qualquer checagem de permissão.
Como é explorada
O vetor é uma requisição HTTP direta ao endpoint JSONWS exposto pela instância Liferay, sem necessidade de autenticação, interação do usuário ou configuração não padrão — daí o vetor CVSS AV:N/AC:L/PR:N/UI:N. Isso torna a superfície de ataque qualquer instância do Liferay Portal acessível pela rede com a versão vulnerável.
A exploração ativa mais documentada é a campanha de botnet FreakOut (Check Point Research, janeiro de 2021), que combinou CVE-2020-7961 com CVE-2020-28188 (TerraMaster TOS) e CVE-2021-3007 (Zend Framework) em varreduras automatizadas. Nesses ataques, a exploração da desserialização é usada para injetar comandos de sistema que baixam e executam um script Python ('out.py', hospedado em domínio controlado pelo atacante) via Python 2. O script resultante integra o host a uma botnet IRC com capacidades de port scanning, coleta de fingerprint do sistema, ARP poisoning, força bruta via Telnet com credenciais padrão e, em variantes posteriores, mineração de criptomoeda (XMRig) — ou seja, o objetivo final observado na prática é controle total do host para uso como plataforma de ataque recursiva, não roubo de dados pontual.
A presença de módulo Metasploit, template Nuclei e PoC pública reduz a complexidade de exploração a praticamente zero para quem já sabe da falha: qualquer scanner automatizado consegue identificar e explorar instâncias expostas.
Versões
Como se proteger
O fornecedor corrige a falha na versão Liferay Portal 7.2.1 CE GA2 (Community Edition). Atualizar para essa versão ou posterior é a mitigação real, sem substituto equivalente conhecido — não há flag de configuração documentada que desative a desserialização vulnerável do JSONWS sem quebrar funcionalidade.
As fontes analisadas não trazem confirmação de números de build específicos para Liferay DXP (edição enterprise); quem roda DXP deve consultar diretamente o advisory oficial do fornecedor (portal.liferay.dev/learn/security/known-vulnerabilities) para o backport correspondente à sua linha de suporte, em vez de assumir que a correção da CE se aplica automaticamente.
Caso a atualização não seja imediata, restringir o acesso de rede ao endpoint JSONWS (bloqueio por firewall/reverse proxy a `/api/jsonws` e caminhos equivalentes, permitindo apenas origens confiáveis) reduz a exposição, mas é paliativo — não corrige a falha, apenas diminui a superfície até a atualização. Não depender de WAF genérico como solução definitiva: assinaturas para payloads de desserialização Java têm alta taxa de falso negativo contra variações de gadget chain.
Como detectar
Procurar por requisições HTTP (tipicamente POST) direcionadas a endpoints JSONWS (caminhos como `/api/jsonws` ou equivalentes na instalação) cujo corpo contenha um blob binário ou base64 com a assinatura de serialização Java (bytes mágicos 0xAC 0xED, que em base64 aparecem como prefixo 'rO0AB'). Esse padrão é o indicador mais confiável de tentativa de exploração de desserialização.
Em nível de host, sinais associados à campanha FreakOut incluem processos filhos do servidor de aplicação Liferay executando comandos de shell, download de scripts via wget/curl, uso de `chmod` seguido de invocação de `python2`, e conexões de saída para domínios ou IPs não corporativos logo após uma requisição JSONWS suspeita. Esses indicadores são específicos daquela campanha e não cobrem exploração futura com payloads diferentes — na ausência desses padrões, não se pode concluir que a instância não foi explorada por outro método de pós-exploração.