Página maliciosa pode instalar outro pacote pela rota de atualização
A rota /global/upgrade aceita um formulário enviado por outro site como text/plain e interpreta seu corpo como JSON, sem conferir uma origem confiável no cabeçalho Origin. O campo target também aceita o endereço de um arquivo de pacote, em vez de limitar a entrada a uma versão. Com o OpenCode instalado por npm, pnpm ou Bun, essa combinação permite que uma página maliciosa acione a instalação de um pacote escolhido pelo atacante. Os scripts de instalação desse pacote podem executar código com as permissões do usuário do sistema que iniciou o servidor. A versão 1.18.22 exige o tipo application/json e um target explícito com uma versão semântica válida, além de rejeitar requisições sem corpo.
Casos de uso afetados
- Você mantém o opencode serve ativo em uma instalação feita por npm, pnpm ou Bun e navega na mesma máquina. Ao abrir uma página controlada pelo atacante, o navegador pode enviar um formulário à rota de atualização, inclusive quando o servidor atende em 127.0.0.1, desde que consiga alcançá-lo.
- Você configurou OPENCODE_SERVER_PASSWORD e já se autenticou no servidor pelo navegador. Se as credenciais de autenticação HTTP Basic continuam armazenadas, o navegador pode incluí-las ao navegar para a rota por um formulário enviado de outro site. Essa condição permite que a requisição maliciosa seja autenticada.
Confira na sua instância
Confira a versão do executável usado para iniciar o servidor e identifique se a instalação foi feita por npm, pnpm ou Bun. Verifique nos processos ativos se há um opencode serve e qual endereço ele atende. Quando houver senha, confira também se o navegador foi autenticado nesse endereço. Aplique a versão corrigida 1.18.22 pelo gerenciador da sua instalação, reinicie o servidor com o executável atualizado e confirme a versão efetivamente carregada. Como conferência adicional de código, compare o tratamento de /global/upgrade com a correção oficial: ele deve exigir application/json, validar target como versão semântica e recusar um corpo ausente.
Versões afetadas e correções
| Linha | Afetadas | Corrigidas |
|---|---|---|
| opencode-ai (npm) | >=1.14.30 | 1.18.22 |
O comando de atualização executado diretamente no terminal não oferece, por si só, esse caminho de ataque pelo navegador. Instalações por curl, Homebrew, Chocolatey ou Scoop não são afetadas por essa instalação de um pacote alternativo. A faixa da API é >=1.14.30, sem limite superior informado, e foi preservada literalmente. O relato menciona 1.14.30 a 1.18.16 como estimativa. A correção publicada não confirma que seu servidor já foi atualizado.
