Vulnerabilidade crítica no Marimo permitia controle remoto de servidores sem autenticação

Uma falha de segurança crítica descoberta no Marimo permitia que invasores assumissem o controle completo de servidores remotos sem a necessidade de credenciais. Catalogada como CVE-2026-39987, a vulnerabilidade começou a ser explorada ativamente menos de dez horas após sua divulgação pública, em abril de 2026.

O Marimo é uma plataforma de notebooks Python amplamente utilizada em projetos de ciência de dados, aprendizado de máquina e inteligência artificial. Nesse contexto, um notebook é um ambiente interativo que reúne código executável, documentação, gráficos, tabelas e resultados analíticos em uma única interface.

Como a plataforma opera por meio de um servidor web acessível pelo navegador, muitas implementações acabam expostas à internet para facilitar o trabalho colaborativo. O problema é que esses ambientes frequentemente compartilham espaço com informações sensíveis, incluindo credenciais de serviços em nuvem, bancos de dados e variáveis de ambiente contendo senhas e chaves de acesso. Assim, uma invasão ao servidor pode comprometer não apenas os notebooks, mas toda a infraestrutura associada.

O papel do WebSocket na vulnerabilidade

A origem da falha estava relacionada ao uso de WebSockets, tecnologia responsável por manter uma comunicação contínua entre navegador e servidor.

Ao contrário das requisições HTTP tradicionais, que funcionam em um modelo de solicitação e resposta, o WebSocket estabelece um canal permanente de comunicação bidirecional. Essa abordagem é amplamente utilizada em aplicações que exigem atualizações em tempo real, como sistemas de mensagens instantâneas, jogos online e painéis de monitoramento.

No Marimo, diversos canais WebSocket são utilizados para diferentes funcionalidades da plataforma. A maioria deles exigia autenticação adequada. No entanto, o endpoint responsável pelo terminal integrado — recurso que oferece acesso direto à linha de comando do servidor — não realizava qualquer verificação de identidade.

Como a invasão acontecia

A exploração da vulnerabilidade era extremamente simples.

Bastava que um atacante estabelecesse uma conexão WebSocket com o endpoint /terminal/ws. O servidor aceitava a solicitação, criava uma sessão de terminal e concedia acesso à linha de comando sem exigir login, senha ou qualquer outro mecanismo de autenticação.

A partir desse momento, o invasor podia executar comandos diretamente no sistema operacional com os mesmos privilégios do processo que executava o Marimo. Em instalações padrão utilizando Docker, isso frequentemente significava acesso como root, o nível mais elevado de permissões em sistemas Linux.

Não era necessário utilizar técnicas como phishing, roubo de cookies, sequestro de sessão ou exploração de falhas complexas. Um simples handshake WebSocket — procedimento que transforma uma conexão HTTP em uma conexão WebSocket persistente — já era suficiente para abrir uma sessão interativa no servidor comprometido.

Exploração começou poucas horas após a divulgação

A gravidade da falha foi refletida em sua pontuação CVSS v4.0, que atingiu 9,3 de 10 pontos.

Em 23 de abril de 2026, a vulnerabilidade foi incluída no catálogo de vulnerabilidades exploradas ativamente da CISA, agência responsável pela cibersegurança e infraestrutura crítica dos Estados Unidos. Órgãos federais receberam prazo até 7 de maio para aplicar as correções necessárias.

Pesquisadores do Sysdig Threat Research Team identificaram a primeira tentativa de exploração apenas 9 horas e 41 minutos após a divulgação do aviso de segurança. Em um dos incidentes monitorados, os criminosos conseguiram executar uma operação completa de coleta de credenciais em menos de três minutos.

Malware utilizava blockchain para comunicação

Durante as investigações, os pesquisadores observaram campanhas que utilizavam a vulnerabilidade para instalar uma variante do backdoor NKAbuse.

O diferencial dessa ameaça está em sua infraestrutura de comando e controle baseada em blockchain. Em vez de depender de servidores tradicionais para receber instruções, o malware utiliza redes descentralizadas para comunicação, dificultando significativamente a detecção, o bloqueio e o rastreamento das atividades maliciosas.

Essa característica torna a operação mais resiliente contra ações de defesa, uma vez que não existe um único ponto central que possa ser derrubado para interromper a comunicação entre os invasores e os sistemas comprometidos.

Como proteger ambientes Marimo

A vulnerabilidade foi corrigida na versão 0.23.0 do Marimo, que passou a exigir autenticação para o terminal integrado da mesma forma que ocorre nos demais componentes da plataforma.

A atualização pode ser realizada por meio do seguinte comando:

pip install --upgrade "marimo>=0.23.0"

Além da atualização imediata, especialistas recomendam evitar a exposição de instâncias do Marimo em modo de edição para redes públicas ou não confiáveis. Também é aconselhável limitar a escuta do serviço apenas às interfaces necessárias e realizar uma análise completa em ambientes que permaneceram vulneráveis após a divulgação da falha.

Diante da rapidez com que os ataques começaram a ocorrer, organizações que ainda utilizavam versões anteriores à 0.23.0 devem considerar seus ambientes potencialmente comprometidos até que uma investigação de segurança confirme o contrário.