O OpenClaw está vivendo seu momento. O agente de IA autônomo — que você talvez conheça como Clawdbot ou Moltbot, dependendo de quando o encontrou pela primeira vez — subiu nas paradas do GitHub nas últimas semanas, e as pessoas estão levantando instâncias em todo lugar. A partir da semana passada, ele também vive seu primeiro momento real de segurança: a CVE-2026-25253 foi divulgada, um RCE de 1 clique, com um patch chegando apenas alguns dias depois. Se você roda essas instâncias, ou é responsável por uma rede onde alguém pode fazer isso, agora é a hora de descobrir onde estão.
Contexto rápido
O OpenClaw conecta LLMs (Claude, GPT-4, os modelos do Google) à sua máquina e a um navegador real, permitindo que um agente faça trabalho em seu nome — conversar no Telegram/Slack, executar tarefas na web, rodar comandos. O componente que interessa a este template é o serviço de gateway, que se anuncia para descoberta local via DNS multicast (mDNS) na porta 5353/UDP.
Uma nota sobre nomenclatura, porque os matchers dependem disso: o projeto é OpenClaw agora, mas foi lançado como Clawdbot e, anteriormente, como Moltbot — mesma base de código, e os nomes de serviço mDNS ainda carregam a nomenclatura antiga (_clawdbot-gw, _openclaw-gw). O template faz match nos dois para que a renomeação não o cegue.
O template
id: openclaw-exposure
info:
name: Openclaw (formerly Clawdbot / Moltbot) - Detect
author: rxerium
severity: info
description: |
Clawdbot Gateway service was detected exposing configuration information via mDNS including DNS settings, gateway details, and service configuration.
classification:
cwe-id: CWE-200
metadata:
verified: true
max-request: 1
shodan-query: product:openclaw
fofa-query: body="ClawdBot"
tags: network,openclaw,gateway,exposure,udp,mdns,js,discovery
javascript:
- pre-condition: |
isUDPPortOpen(Host,Port);
code: |
let c = require("nuclei/net");
let conn = c.Open('udp', `${Host}:${Port}`);
// mDNS query for _clawdbot-gw._tcp.local PTR record
let packet = "000000000001000000000000095f7365727669636573075f646e732d7364045f756470056c6f63616c00000c0001"
conn.SendHex(packet);
let resp = conn.RecvString(2048);
resp;
args:
Host: "{{Host}}"
Port: 5353
matchers:
- type: dsl
dsl:
- "contains(response, '_openclaw-gw') && success == true"
- "contains(response, 'clawdbot') && success == true"
condition: or
extractors:
- type: regex
part: response
name: server
group: 1
regex:
- 'displayName=([a-zA-Z0-9._-]+)'
Como funciona
É um template de protocolo JavaScript, não HTTP. A maioria dos templates de exposição dispara um GET e faz match no corpo da resposta. Este usa a biblioteca nuclei/net do Nuclei para abrir um socket bruto e falar um protocolo binário diretamente — necessário, porque mDNS não é algo que se consegue expressar com matchers HTTP.
A pré-condição controla tudo. isUDPPortOpen(Host, Port) verifica que 5353/UDP está realmente escutando antes de qualquer pacote ser enviado. Se estiver fechado, o template faz curto-circuito e você não gasta uma requisição — o que mantém os scans baratos quando você aponta isso para um grande intervalo onde a maioria dos hosts não vai estar rodando um gateway.
O código envia uma query mDNS bruta e lê a resposta. Ele abre uma conexão UDP para Host:5353, envia um pacote DNS codificado em hex com SendHex, e lê até 2048 bytes de volta. O payload decodificado é uma query DNS-SD de enumeração de serviços — uma pergunta PTR para _services._dns-sd._udp.local, a meta-query padrão "liste tudo que você anuncia". Um host rodando o gateway responde com os serviços anunciados, e o nome de serviço OpenClaw/Clawdbot volta nessa resposta.
Os matchers confirmam que é um gateway. Dois checks DSL combinados em or: contains(response, '_openclaw-gw') ou contains(response, 'clawdbot'), cada um condicionado a success == true para que um socket semi-aberto ou uma leitura vazia não produza falso positivo. Qualquer uma das strings na resposta mDNS confirma que você está olhando para um gateway OpenClaw, qualquer que seja o branding que ele carregue.
O extractor puxa o nome de exibição do dispositivo. Um regex captura displayName=... do anúncio e o exibe como server na sua saída. Então um hit não é só "um gateway existe" — você obtém o nome legível que o operador deu a ele, que vale ouro para inventário e triagem.
Severidade é info, CWE-200. Esta é a classificação honesta: o template detecta uma exposição de informação (CWE-200, Information Exposure) — um gateway anunciando sua configuração onde não deveria — não exploração ativa. O mDNS vazando para uma interface alcançável é o achado; o que um atacante faz a seguir é um problema separado.
verified: true significa que o template foi confirmado contra uma instância real, não apenas escrito de acordo com especificações — então um match é confiável.
Por que ter detecção mDNS vale a pena
Fingerprinting HTTP é a forma óbvia de encontrar esses gateways, e funciona. Mas o mDNS captura uma fatia diferente. Um gateway pode estar vazando descoberta de serviço para um segmento de rede que um atacante consegue alcançar mesmo quando o lado HTTP está bloqueado por firewall, atrás de um proxy, ou em uma porta não padrão que o seu scan HTTP não cobriu. É especialmente relevante para avaliações internas e redes planas, onde multicast cruza alegremente segmentos que não deveria e o gateway está efetivamente anunciando "Estou aqui, e esse é meu nome" para tudo no cabo. Execute isso junto com um fingerprint HTTP e você obtém cobertura que nenhum dos dois tem sozinho.
Rodando em escala
Sua própria rede e perímetro primeiro — autorização mais limpa, e os achados mDNS são mais acionáveis dentro das redes que você controla.
nuclei -t openclaw-exposure.yaml -l targets.txt -o openclaw-hits.txt
O template já afixa a porta 5353 nos seus args, e a pré-condição isUDPPortOpen significa que você pode jogar uma lista ampla de hosts sem massacrar nada — portas fechadas são puladas antes de um pacote ser enviado.
Pré-filtre com um scan UDP para grandes intervalos. Scan UDP é mais lento que TCP, então em escopos grandes vale a pena encontrar os listeners 5353 ativos primeiro e passar apenas esses para o Nuclei:
# naabu doesn't do UDP; use nmap for the 5353/udp sweep
nmap -sU -p 5353 --open -iL ranges.txt -oG - | awk '/Up$/{print $2}' > mdns-hosts.txt
nuclei -t openclaw-exposure.yaml -l mdns-hosts.txt -o openclaw-hits.txt
Em escala de internet, use dados de scan. Não dispare UDP ativamente pela internet toda — é barulhento, lento e juridicamente arriscado. Use as queries de metadata embutidas no template (product:openclaw no Shodan, body="ClawdBot" no FOFA) para enumerar instâncias expostas, depois rode o template apenas contra candidatos no seu escopo autorizado.
Rode continuamente, não uma só vez. A base de instalação do OpenClaw está crescendo dia a dia agora, o que significa que novos gateways aparecem o tempo todo — um scan pontual fica desatualizado rápido. E associe cada hit a duas ações: tire o gateway de qualquer interface alcançável, e rotacione as credenciais que ele carrega.
Por que isso importa
Vazamento de mDNS é o achado que o template produz, mas o motivo para se preocupar agora mesmo é o que está por trás de um gateway exposto.
O timing é a história. A CVE-2026-25253 foi divulgada em 26 de janeiro e corrigida no OpenClaw 2026.1.29, lançado no final da semana passada. É uma execução remota de código de 1 clique: a Control UI aceita um gatewayUrl de uma query string de URL e abre automaticamente um WebSocket para ele sem confirmação, vazando o token de autenticação da instância para quem controlar essa URL. Rouba o token, sequestra o WebSocket, executa comandos. Não precisa de autenticação prévia, está avaliado como CVSS 8.8 (CWE-669, Incorrect Resource Transfer Between Spheres), e — a parte desagradável — funciona mesmo contra instâncias rodando apenas em localhost, porque o ataque pivoteia através do próprio navegador da vítima. Pesquisadores estão chamando de "kill chain RCE de 1 clique." Código de prova de conceito já é público, e a ampla cobertura da imprensa está chegando agora mesmo enquanto escrevo.
Esse é o problema agudo, mas o permanente é a exposição em geral. O OpenClaw armazena credenciais para os modelos de nuvem que conduz — Claude, OpenAI, Google AI — além de tokens para quaisquer integrações de mensagens e ferramentas que você tenha conectado. Um gateway exposto é SSH aberto sem senha, exceto que a senha é uma pilha de credenciais de IA pagas e uma posição no host. E como um agente é uma identidade com acesso, quem o assume herda seus tokens e concessões OAuth, e pode dar a ele instruções que ele executará sem questionar. As credenciais são o prêmio imediato; a posição persistente dentro de um agente privilegiado é a duradoura. Um gateway transmitindo seu próprio displayName via mDNS está apenas se tornando mais fácil de encontrar. Essa é a lacuna que este template preenche.
Mitigação
Se você roda OpenClaw, a lista de tarefas desta semana:
- Aplique o patch agora. Atualize para 2026.1.29 ou posterior — corrige a CVE-2026-25253. Patchear não desfaz a exposição anterior, então trate isso como passo um, não como o trabalho completo.
- Rotacione o token do gateway e cada credencial armazenada. Novo
authToken, novas chaves de API para Claude/OpenAI/Google AI, e verifique os logs de uso. Se estava alcançável, assuma que está comprometido. - Tire-o de qualquer interface alcançável. Faça bind no loopback, ou coloque atrás de VPN, bastion ou ZTNA, e bloqueie 5353/UDP nas fronteiras de segmento para que o mDNS pare de cruzar redes onde não tem nada que fazer. Loopback é o piso, não o teto — o RCE pivoteia pelo navegador, então só-localhost não é um salvo-conduto.
- Rode o agente com privilégio mínimo. Sem "modo deus". Reduza o acesso dele ao sistema, arquivos e chaves, e monitore-o como qualquer conta com concessões permanentes de API e OAuth.
- Fique de olho no padrão de exploit. Sinalize conexões WebSocket inesperadas de navegadores para domínios externos, e alerte sobre mudanças de configuração do gateway.
A detecção em si não é exótica — uma pré-condição, uma query mDNS bruta, dois matchers de string. O valor é o timing: ela captura gateways se anunciando na rede mesmo quando o lado HTTP está bloqueado, exatamente quando um RCE público de 1 clique torna urgente encontrá-los. Rode cedo, rode com frequência, rotacione chaves em cada hit. Runtimes de agentes são identidades com chaves; encontrar os expostos rapidamente é o jogo todo.