Privacidade Por Equipe DevBras

Capa do artigo: Claude Dispatch: extensão vira RCE no Desktop

Claude Dispatch: extensão vira RCE no Desktop

Extensão em claude.ai usa Dispatch para mandar tarefas ao Desktop (até outra máquina). Fluxo ThisBash, checagem de extensões e mitigações sem esperar o vendor.

Em 4 de novembro de 2026 a Forever Security publicou a pesquisa ThisBash: uma falha de autorização no Claude Dispatch permite que uma extensão de browser com content script em claude.ai envie tarefas ao Claude Desktop — e, se o mesmo account tiver Dispatch cross-device ligado, a outro computador. Sem CVE. Sem bug bounty. Anthropic reconheceu o achado em maio de 2026, fechou como duplicata interna e disse que ia aposentar o Dispatch até o fim de outubro de 2026. The Register e a Cyber Security News confirmaram em novembro: a feature ainda aparece como beta limitada para quem já usava.

O ponto não é “extensão maliciosa lê a página”. Isso a extensão já faz. O ponto é a ponte: permissão de falar com um site vira comando no sistema operacional via agente com acesso a arquivos, shell e pacotes. Abaixo: o fluxo confirmado, o alcance (mesma máquina, outra máquina, laptop de trabalho), o que checar hoje e as mitigações que não dependem da Anthropic aposentar o produto. O mesmo tipo de superfície aparece em pesquisas sobre extensões que sequestram a busca e sobre extensão Claude Code / Cursor com backdoor SSH — aqui o canal é o Dispatch, não um plugin de IDE.

O que o Dispatch deveria fazer

Claude Dispatch é o recurso que manda trabalho do celular (ou de outro cliente) para o Claude Desktop, um agente Electron que lê arquivos locais e executa comandos. No par app móvel ↔ Desktop a Forever Security não encontrou falha no enlace peer-to-peer. O problema aparece quando o mesmo fluxo é alcançado a partir de uma aba autenticada em claude.ai.

O Desktop reutiliza interface e API da web. A versão web só escondia o link do Dispatch; não bloqueava o acesso. Quem extraiu a URL do app (por exemplo https://claude.ai/cowork/agent) abria a página numa sessão logada e enviava pedidos como se fossem do usuário. Uma extensão com host_permissions / content script em claude.ai/* faz o mesmo com os cookies da sessão — sem exploit de sandbox do Chrome.

Cadeia do PoC (o que as fontes confirmaram)

A cadeia publicada pela Forever Security, ecoada pela Cyber Security News e pelo The Register, tem seis passos. Não é um “payload mágico”: é a combinação de sessão autenticada + UI clicável + agente poderoso.

  1. A extensão registra um content script (MAIN ou ISOLATED) em https://claude.ai/*, no mesmo contexto da página e da sessão.
  2. Abre Dispatch numa janela popup pequena e fora de foco (200×200) — o único rastro visível.
  3. Chama GET /v1/sessions?tags=cowork-dispatch-local com os cookies ambientes e obtém o session ID do agente Desktop.
  4. Injeta prompts no composer e espera a resposta antes do próximo (a pesquisa chama isso de prompt forcing: o atacante controla o canal que o modelo trata como “o usuário”).
  5. Um setInterval clica em qualquer botão “Allow” a cada segundo, para a aprovação humana não interromper a cadeia.
  6. Repete até o agente executar o que pediram. No PoC, um npm install -g de pacote com hook preinstall abriu a Calculadora — prova de execução local. Em um ataque real o mesmo passo pode exfiltrar arquivos, plantar chave SSH ou instalar persistência.
# Ideia do auto-Allow (ilustrativo; não rode em produção)
# A pesquisa descreve um loop que encontra o botão Allow e clica.
# O problema de desenho: a confirmação mora na mesma UI que o atacante controla.
setInterval(() => {
  const allow = [...document.querySelectorAll('button')]
    .find(b => b.innerText === 'Allow');
  if (allow) allow.click();
}, 1000);

Os guardrails do modelo atrapalham um pouco: na primeira tentativa o Claude hesitou em instalar pacote desconhecido. Como o atacante lê a resposta e reescreve o próximo prompt “na voz do usuário”, a hesitação vira atraso, não bloqueio. Isso é diferente de prompt injection clássica (uma tentativa escondida num documento): aqui o canal de entrada inteiro está sob controle.

Até onde chega

  • Mesma máquina: escape de sandbox do browser via agente Desktop — a extensão não sai do Chrome; o Claude Desktop executa no SO.
  • Outra máquina no mesmo account: Dispatch foi feito para ligar dispositivos. Browser em casa, Desktop no notebook do trabalho: o comando atravessa a nuvem de sessão.
  • Conta pessoal no endpoint corporativo: Forever Security relatou a The Register percentuais de contas pessoais Claude vistas em ambientes de cliente (em um subconjunto, de ~18% a ~71%). Conta pessoal + Dispatch cross-device no laptop gerenciado = ponte de comprometimento de extensão doméstica para o endpoint da empresa.

Não há CVE atribuída nas fontes conferidas. Anthropic não pagou bounty e classificou o reporte (14/05/2026) como duplicata de issue interna (ack em 19/05). Em 13/10/2026 disse que aposentaria o Dispatch com alvo fim de outubro; em 30/10 a página de suporte ainda listava beta limitada (“se você já usa, pode continuar por enquanto”). Em 5–6/11 The Register e Cyber Security News relatam a feature ainda explorável para quem a tem. A pesquisa também aponta o mesmo padrão de confiança em Claude Code Remote Control e sessões Cowork — aposentar só o Dispatch não fecha o desenho.

Roteiro de checagem (sem abrir GUI de força)

Três checagens leves cabem numa sexta à noite. Ajuste os caminhos do perfil Chrome do seu time.

# 1) Extensões instaladas no perfil (Chrome/Chromium no Linux)
# Troque o caminho do User Data se o perfil for outro
PROF="${HOME}/.config/google-chrome/Default"
# ou: ~/.config/chromium/Default  |  Chrome for Testing / "DevBras" no box
ls "$PROF/Extensions" 2>/dev/null | head
# Preferences guarda o estado enabled/disabled
python3 - <<'PY'
import json, os, pathlib
p = pathlib.Path(os.path.expanduser("~/.config/google-chrome/Default/Preferences"))
if not p.exists():
    print("Preferences não encontrado — ajuste o caminho do perfil")
else:
    data = json.loads(p.read_text(encoding="utf-8", errors="replace"))
    settings = data.get("extensions", {}).get("settings", {})
    for eid, meta in settings.items():
        state = meta.get("state")
        name = (meta.get("manifest") or {}).get("name") or meta.get("path") or eid
        perms = (meta.get("manifest") or {}).get("permissions") or []
        hosts = (meta.get("manifest") or {}).get("host_permissions") or []
        risky = any("claude.ai" in str(h) or h == "<all_urls>" or h == "*://*/*" for h in hosts)
        if state == 1:  # enabled
            print(f"{eid[:12]}… | {name} | hosts={hosts[:3]} | perms={perms[:4]} | claude_or_all={risky}")
PY
# 2) No Desktop / conta Claude (roteiro humano, um minuto)
# - Dispatch / remote control cross-device: desligado se não for requisito de negócio
# - Conta no laptop de trabalho: corporativa via SSO, não pessoal
# - Aprovações sensíveis: não deixar o agente sozinho com Allow automático na UI web
# - Extensões: só allowlist; revisar quem tem scripting + host_permissions amplos
  1. Invente as extensões com <all_urls>, *://*/* ou match em claude.ai. Qualquer uma delas é candidata a content script no mesmo modelo do PoC — o mesmo cuidado vale para o que já cobrimos em plugins Postman / agentes de IA.
  2. Confirme no app Claude Desktop e na conta se Dispatch / remote control entre dispositivos está ativo. Sem requisito de negócio: desligue.
  3. Separe identidades: conta pessoal fora do endpoint gerenciado; conta de trabalho fora do browser da casa com extensões livres.
  4. Monitore o que o agente faz de verdade: npm install -g inesperado, mudança em ~/.ssh, leitura de cofres, outbound estranho durante “tarefa AFK”.

Mitigações que não esperam o vendor

  • Desligar Dispatch cross-device (e equivalentes de remote control) onde não há necessidade. Pareamento e revogação de clientes entram na política de identidade, não só no “hábito do usuário”.
  • Governar extensão como software de endpoint: instalação por allowlist, revisão de permissões, alerta quando update pede host amplo. 99% dos usuários enterprise amostrados pela LayerX (citada na pesquisa) tinham ao menos uma extensão; 53% com permissões altas ou críticas.
  • Não misturar conta pessoal Claude no laptop de trabalho com Dispatch ligado. A ponte ThisBash existe exatamente nesse desenho.
  • Aprovação que o atacante não clica: confirmação dentro da mesma UI controlada pela extensão não é consentimento. Ações destrutivas precisam de canal fora dessa superfície (ou de política que negue install/shell sem segundo fator humano fora da página).
  • Monitorar ações do agente: package install, mudança de config, acesso a credencial e rede saída correlacionados à sessão do agente — teclado ocioso não prova ausência de ataque.

Extensão maliciosa já é incidente grave dentro do browser (leitura de página, session riding). ThisBash mostra o degrau a mais: a sessão web autenticada foi tratada como autorização para o Desktop agir. Sessão prova quem está logado; não prova que a pessoa pediu o comando. Enquanto o Dispatch (ou o mesmo padrão em Cowork / Remote Control) permanecer alcançável da web com a sessão do usuário, a checagem de extensões e de contas cross-device é trabalho de endpoint — não de “esperar o changelog”.

Fontes conferidas em 6–7 de novembro de 2026: Forever Security — ThisBash, Cyber Security News (cybersecuritynews.com/claude-dispatch-vulnerability/), The Register (5/11/2026). The Hacker News (matéria de novembro/2026 sobre extensões e Dispatch) citada pelo texto (HTTP 403 ao coletor). Sem CVE pública nas fontes acima. Equipe DevBras.

Avalie este artigo