← volver
CVE-2013-0422criticalbajo ataqueransomwareCWE-284

CVE-2013-0422

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 9.8epss 98%
de la publicación al arma1 días
Publicada en NVD10 ene
1ª PoC+1d
metasploit10 ene
CISA KEV+3422d
probabilidad de explotación
98%top 1% de las CVE
explotación observada
CISA + VulnCheck
1 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-06-15

Apply updates per vendor instructions.

Resumen

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.

Detalle 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.

Cómo se explota

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.

Versiones

Afectadas
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.
Corregidas en
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.

Cómo protegerse

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.

Cómo 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.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
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
Productos afectados
n/a · n/a
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.