← voltar
CVE-2013-0422criticalsob ataqueransomwareCWE-284

CVE-2013-0422

100Vexday Risk Score

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

ssvc Actcvss 9.8epss 98%
da publicação à arma1 dias
Publicada no NVD10 de jan.
1ª PoC+1d
metasploit10 de jan.
CISA KEV+3422d
probabilidade de exploração
98%top 1% das CVEs
exploração observada
simCISA + VulnCheck
1 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-06-15

Apply updates per vendor instructions.

Resumo

Falha crítica no plugin Java 7 (até a Update 10) que permite a um applet não confiado, executado dentro do navegador, escapar da sandbox e obter execução de código arbitrário sem interação além de visitar uma página maliciosa. Foi explorada ativamente in the wild a partir de janeiro de 2013, incorporada em kits de exploração como Blackhole, Nuclear Pack, Cool EK, Redkit, Sakura e SofosFO antes mesmo de existir patch. O CVSS 9.8 reflete bem o risco real: não exige autenticação, não exige configuração não padrão — só Java habilitado no navegador.

Detalhamento técnico

A vulnerabilidade é, na prática, duas falhas encadeadas dentro do subsistema de reflection/JMX da JVM. A primeira (CWE-284, controle de acesso impróprio) está no método público getMBeanInstantiator() da classe com.sun.jmx.mbeanserver.JmxMBeanServer, que devolve uma referência ao objeto interno MBeanInstantiator — supostamente privado. A partir dele, o método findClass() permite carregar qualquer classe restrita via Class.forName() sem passar pelas checagens normais de Class Loader, dando ao código do applet acesso a classes de sistema que deveriam estar fora de alcance.

A segunda falha explora o uso recursivo da nova Reflection API (java.lang.invoke.*) para contornar a checagem feita por java.lang.invoke.MethodHandles.Lookup.checkSecurityManager. O problema de raiz é que sun.reflect.Reflection.getCallerClass não sabe pular os frames de pilha inseridos pela nova API de reflection, então a verificação de 'quem está chamando' acaba examinando o frame errado — no caso, um frame confiável — e libera a chamada. Isso é reaproveitamento de um vetor já usado por pesquisadores da Security Explorations contra o 'Issue 32', cujo fix de outubro de 2012 (relacionado à mesma família de bugs) foi incompleto: o bloqueio de APIs sensíveis via isCallerSensitive cobria a Core Reflection API (Class.forName, getMethods etc.) mas não a nova Reflection API baseada em MethodHandle.

Combinando as duas: o atacante usa o MBeanInstantiator para obter referência a classes de sistema privilegiadas (por exemplo sun.org.mozilla.javascript.internal.GeneratedClassLoader) e usa o bypass de Reflection API para invocar métodos restritos dessas classes via invokeWithArguments, sem precisar de applet assinado. O objetivo final típico é chamar setSecurityManager(null) ou equivalente, desligando completamente o Security Manager da JVM e ganhando privilégios plenos no processo Java, de onde se derruba um payload nativo (.exe) no disco.

O próprio CVE, segundo o NOTE oficial, cobre as duas vertentes (JMX/MBean e Reflection API) e é distinto de CVE-2012-4681 e CVE-2012-3174, apesar de alguma confusão de mapeamento na comunidade nesse período.

Como é explorada

Vetor é drive-by download: a vítima visita (ou é redirecionada para) uma página HTML com um applet Java malicioso embutido — vista em exploit kits como Blackhole, Nuclear Pack, Cool EK, Redkit, Sakura, SofosFO e ProPack já em janeiro de 2013, entregando ransomware (Reveton, CBeplay) e outros payloads via arquivo .jar seguido de um executável baixado. Não há autenticação, não há necessidade de configuração especial: basta ter o plugin Java 7 (até Update 10) habilitado no navegador. A cadeia de exploração roda inteiramente dentro da JVM sandbox e não depende de engenharia social sofisticada além de fazer a vítima carregar a página/applet.

A CISA lista a falha no catálogo KEV, confirmando exploração ativa documentada, e existe módulo Metasploit e PoC pública, o que baixa ainda mais a barreira de reprodução — qualquer operador de exploit kit da época conseguia reproduzir a cadeia sem pesquisa própria.

Um ponto crítico levantado por pesquisadores (Immunity, Security Explorations) é que o patch oficial da Oracle (Update 11) corrigiu apenas a parte da Reflection API (isCallerSensitive e sun.reflect.misc.MethodUtil), mas não tocou nas classes do pacote com.sun.jmx.mbeanserver — ou seja, o MBeanInstantiator.findClass continuava funcional mesmo após a atualização. Isso significa que um atacante com uma segunda vulnerabilidade de bypass de Reflection (substituindo a parte já corrigida) poderia reconstruir a cadeia completa mesmo em sistemas 'corrigidos' com Update 11.

Versões

Afetadas
Oracle Java SE 7 Update 10 e versões anteriores da linha 7 (JRE/JDK 7). OpenJDK 7 e, por extensão, IcedTea também afetados. Java 6 foi originalmente reportado como vulnerável, mas essa afirmação foi retratada pelo próprio relator: o método invokeWithArguments explorado foi introduzido apenas no Java 7, então Java 6 não é explorável por esta cadeia.
Corrigidas em
Oracle Java 7 Update 11 corrige oficialmente a CVE (segundo o fornecedor), mas análise independente da Immunity mostra que apenas a vulnerabilidade de Reflection API foi corrigida (mudanças em java.lang.invoke.MethodHandleNatives.isCallerSensitive e sun.reflect.misc.MethodUtil); a vulnerabilidade de MBeanInstantiator.findClass permanecia presente no bytecode do Update 11 sem alterações no pacote com.sun.jmx.mbeanserver. Para OpenJDK/IcedTea, correção nas versões IcedTea 2.1.4, 2.2.4 e 2.3.4.

Como se proteger

O fornecedor lançou Java 7 Update 11, que também endureceu o nível de segurança padrão do painel de controle Java para 'High' (exige confirmação do usuário antes de rodar applets não assinados ou autoassinados). Ainda assim, pesquisadores demonstraram que esse update corrigiu apenas o componente de Reflection API do exploit encadeado, deixando o findClass do MBeanInstantiator intacto — não trate a atualização como fechamento total do vetor de abuso via JMX/MBean.

O paliativo mais efetivo, recomendado inclusive pelo CERT/CC, é desabilitar Java como plugin do navegador inteiramente (a partir da Update 10 isso é possível via o applet Java Control Panel, ou via instalador com a opção de linha de comando que desativa o componente web) — a menos que exista dependência de negócio que exija Java no navegador. Isso neutraliza não só esta falha como qualquer outra vulnerabilidade futura de plugin, ao custo de quebrar aplicações internas legadas baseadas em applet.

Onde desabilitar Java não é viável, um controle compensatório de rede é filtrar/bloquear requisições para arquivos .jar e .class em proxies, e inspecionar/bloquear o User-Agent característico do Java Web Start, restringindo o uso a intranets confiáveis. Isso reduz superfície de ataque via exploit kits externos mas não elimina o risco caso o atacante já tenha ponto de apoio interno. Para ambientes OpenJDK/IcedTea, o fix correspondente está nas versões 2.1.4, 2.2.4 e 2.3.4.

Como detectar

Não há assinatura confiável de exploração no nível de log da aplicação Java em si; os sinais úteis estão na camada de rede/proxy: requisições HTTP com download sequencial de páginas de 'landing' seguidas de arquivo .jar e depois um executável Windows (.exe) vindo do mesmo host ou domínio associado — padrão característico de exploit kits da época (Blackhole, Nuclear Pack, Cool EK, Redkit, Sakura, SofosFO, ProPack, todos documentados explorando esta CVE em janeiro de 2013). User-Agent contendo string de cliente Java (Java Web Start/plugin) fazendo requisições a domínios externos incomuns é outro indicador.

Hashes de payload e domínios de C2 específicos das campanhas de 2013 (Reveton, CBeplay, Zaccess) estão documentados nas fontes de threat intel da época, mas são artefatos daquela onda de campanhas, não indicadores genéricos da vulnerabilidade — não servem para detectar reuso atual do bug.

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.
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using the public getMBeanInstantiator method in the JmxMBeanServer class to obtain a reference to a private MBeanInstantiator object, then retrieving arbitrary Class references using the findClass method, and (2) using the Reflection API with recursion in a way that bypasses a security check by the java.lang.invoke.MethodHandles.Lookup.checkSecurityManager method due to the inability of the sun.reflect.Reflection.getCallerClass method to skip frames related to the new reflection API, as exploited in the wild in January 2013, as demonstrated by Blackhole and Nuclear Pack, and a different vulnerability than CVE-2012-4681 and CVE-2012-3174. NOTE: some parties have mapped the recursive Reflection API issue to CVE-2012-3174, but CVE-2012-3174 is for a different vulnerability whose details are not public as of 20130114. CVE-2013-0422 covers both the JMX/MBean and Reflection API issues. NOTE: it was originally reported that Java 6 was also vulnerable, but the reporter has retracted this claim, stating that Java 6 is not exploitable because the relevant code is called in a way that does not bypass security checks. NOTE: as of 20130114, a reliable third party has claimed that the findClass/MBeanInstantiator vector was not fixed in Oracle Java 7 Update 11. If there is still a vulnerable condition, then a separate CVE identifier might be created for the unfixed issue.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Produtos afetados
n/a · n/a
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.