CVE-2018-1000861
Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.
Apply updates per vendor instructions.
Resumen
Falha no framework Stapler, usado pelo núcleo do Jenkins para expor objetos Java via HTTP, que permite invocar via URL métodos (getters e alguns do*) nunca destinados a serem chamados pela web. É pré-autenticação e afeta qualquer instância Jenkins não corrigida, o que explica a exploração massiva por scanners automatizados — mas o próprio advisory do Jenkins deixa claro que o impacto confirmado no momento da publicação era mais restrito (invalidação de sessões, criação de objetos de usuário em memória, disparo antecipado de tarefas periódicas) do que o RCE genérico sugerido pelo CVSS 9.8 e por manchetes posteriores.
Detalle técnico
O Stapler roteia requisições HTTP para métodos Java com base em convenções de nomenclatura: qualquer método público começando com get (e, em outros contextos, do) que aceite String, int, long ou nenhum argumento pode ser invocado reflexivamente a partir de uma URL, desde que o objeto seja alcançável pela árvore de roteamento do Stapler. O bug está em stapler/core/src/main/java/org/kohsuke/stapler/MetaClass.java: a lógica de descoberta de métodos roteáveis não distinguia métodos que coincidentemente seguem essa convenção de nomes (padrão comum em Java) daqueles de fato pensados para exposição web. Isso torna qualquer getter 'acidental' em qualquer objeto acessível pela cadeia de navegação do Stapler um vetor potencial de invocação remota.
A correção mudou o modelo: o Stapler passou a ter uma SPI (Service Provider Interface) que permite excluir explicitamente métodos e campos do roteamento, e o Jenkins implementou essa SPI restringindo quais getters, métodos do* e campos podem ser invocados reflexivamente. Como efeito colateral esperado, algumas URLs de plugins passaram a retornar 404 ou respostas diferentes das anteriores.
O CISA classifica esta CVE sob CWE-502 (Deserialization of Untrusted Data) no catálogo KEV, mas a descrição técnica do próprio Jenkins não descreve desserialização — é invocação reflexiva não intencionada de métodos via roteamento de URL, mais próxima de CWE-749 (Exposed Dangerous Method or Function) ou de um controle de acesso ausente sobre superfícies reflexivas. Essa é uma divergência de classificação entre a fonte primária (Jenkins) e o catalogador (CISA), não uma nova informação técnica.
O Jenkins reconhece explicitamente que a superfície de ataque exposta por esse padrão é vasta e que provavelmente existem outros vetores de exploração além dos catalogados na época — motivo dado pelo próprio time de segurança do Jenkins para atribuir a pontuação alta ao invés de limitá-la ao impacto conhecido.
Cómo se explota
Pré-requisito de rede: acesso HTTP ao endpoint do Jenkins, sem necessidade de autenticação (PR:N) nem interação do usuário. O atacante monta uma URL que force o Stapler a resolver e invocar, dentro da árvore de objetos alcançável pelo roteador, um getter ou método do* que não foi pensado para exposição — usando exatamente a convenção de nomenclatura que o framework usa para despachar requisições.
No momento da publicação do advisory, o Jenkins listou impactos concretos já identificados nas versões então mais recentes ainda sem o fix: usuários não autenticados podiam invalidar todas as sessões ativas quando o Jenkins rodava com o servidor Winstone-Jetty embutido; usuários com permissão Overall/Read podiam criar objetos de usuário em memória; e usuários com Overall/Read podiam disparar manualmente execuções de AsyncPeriodicWork que deveriam ocorrer apenas periodicamente. Versões mais antigas (antes de correções parciais em LTS 2.121.3/2.138 e 2.138.2/2.146) tinham vetores mais graves já fechados, incluindo bypass de Overall/Read e Job/Read para acessar logs de build e variáveis de ambiente do controller/agentes, e enumeração de credenciais armazenadas.
A CISA incluiu a CVE no catálogo KEV confirmando exploração ativa (data de inclusão 2022-02-10, prazo de correção 2022-08-10), e existem módulo Metasploit, template Nuclei e PoC pública — sinal de que a exploração em massa via scanners automatizados contra instâncias expostas na internet é o padrão observado, tipicamente associada a campanhas de varredura oportunista contra Jenkins desatualizado, e não a ataques direcionados sofisticados.
Versiones
Cómo protegerse
A correção definitiva é atualizar o núcleo do Jenkins para uma versão posterior às listadas como afetadas (Jenkins 2.153 e anteriores; LTS 2.138.3 e anteriores), aplicando o release do advisory de 2018-12-05. O Jenkins recomenda fortemente não desabilitar as melhorias de segurança introduzidas nos releases anteriores (LTS 2.121.3/2.138 e 2.138.2/2.146), já que desabilitá-las reabre vetores já mitigados nessas versões.
Se a atualização imediata não for possível, não há paliativo de configuração documentado pelo fornecedor que neutralize a classe de falha em si — a exposição é estrutural ao modelo de roteamento do Stapler antes da correção. O controle compensatório realista é reduzir a superfície de exposição: não expor a interface web do Jenkins diretamente à internet, restringir acesso por rede/VPN, e monitorar por comportamento anômalo (sessões invalidadas em massa, criação inesperada de usuários). Essas medidas reduzem a chance de exploração oportunista, mas não corrigem a falha para quem já tem acesso de rede permitido.
Mito a descartar: exigir autenticação básica no Jenkins não é mitigação suficiente, porque parte dos vetores documentados no advisory (por exemplo, invalidação de sessão) funciona sem autenticação alguma, e outros exigem apenas permissões mínimas (Overall/Read) que muitas instalações concedem amplamente a usuários internos.
Cómo detectar
Não há assinatura de exploração universalmente confiável porque o vetor é uma URL manipulando o roteamento reflexivo do Stapler, cuja forma varia conforme o objeto/método alvo — não existe um payload fixo único. Em logs de acesso do Jenkins (access log do container ou do proxy reverso na frente), procurar por padrões de URL fora do uso normal da UI/API, especialmente requisições GET a caminhos que tentam alcançar objetos internos via getters (nomes de métodos Java expostos em segmentos de URL), picos de erros 404 após tentativas de varredura, invalidação de sessões em massa sem ação administrativa correspondente, ou criação de contas de usuário sem correlação com fluxo de login legítimo. A existência de módulo Metasploit e template Nuclei sugere que ferramentas de varredura automatizada geram tráfego repetitivo e sistemático contra o endpoint raiz do Jenkins, o que pode aparecer como rajadas de requisições de uma mesma origem testando múltiplos caminhos em sequência.