84 pacotes npm ficaram maliciosos em um único ataque em maio

Deixe seu agente mexer na produção.Guarde as chaves.

O Sallyport guarda suas credenciais em um cofre local e executa chamadas de API e comandos SSH pelo agente. Você aprova cada execução com um clique ou o Touch ID. Não existe comando que revele uma chave guardada, nem botão de exportar.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon · Apache-2.0 · Grátis · sem conta · sem nuvem

Feito para engenheiros que deixam o Claude Code, o Cursor ou o Codex mexer em infraestrutura real

Claude CodeCodexCursorWindsurfClineLangChainCrewAIOpenHandsGooseZed
Experimente

Aprove de onde você já está

Esta chave exige aprovação em cada uso. A chamada aguarda sua decisão.

claude · ~/infra

sallyport · http.request

PATCH api.cloudflare.com/client/v4/zones/…/dns_records

key cloudflare · flagged approval per call

aguardando aprovação...

Aprovação necessária

http.request → api.cloudflare.com

Developer ID Application: Anthropic PBC

claude node zsh

Chave:cloudflarepor chamada
Clique em Aprovar para permitir a chamada.ou pressione A/D
O problema

Seu agente pode ler suas chaves

Tokens de API no .env, chaves SSH no disco, concessões OAuth em arquivos de configuração. O agente e cada pacote que ele instala podem ler tudo isso, e um único README envenenado pode levar tudo embora.

Segredos expostos

Tokens no .env e em variáveis do shell, chaves SSH no disco, tokens OAuth em arquivos de configuração. Legíveis pelo agente, por seus processos filhos e por tudo o que o npm instalou hoje.

Injeção de prompt vira roubo

Uma página ou um README malicioso manda o agente enviar um token para um novo destino, e o agente obedece. Ele foi feito para seguir instruções.

Você descobre pela fatura

Sem um gateway, não há registro de quais chamadas o agente fez, para onde as enviou ou o que elas carregavam. Chaves roubadas aparecem semanas depois, no tempo de outra pessoa.

Três que já aconteceram

Maio de 2026

Ataque npm ao TanStack

84 versões maliciosas em 42 pacotes coletaram credenciais de nuvem, tokens do GitHub e chaves SSH na instalação e depois se espalharam pelos próprios pacotes das vítimas.

Fim de 2025

Worm Shai-Hulud

Pacotes npm comprometidos roubaram segredos na instalação e usaram as credenciais roubadas para infectar a rodada seguinte de pacotes.

Agosto de 2025

Nx S1ngularity

Uma ferramenta de build envenenada vasculhou máquinas de desenvolvedores em busca de segredos, testou ferramentas de IA locais e mandou o roubo para fora pela CLI do GitHub.

Os três coletaram chaves de variáveis de ambiente e de arquivos no disco. O Sallyport mantém chaves utilizáveis fora dos dois.

Seu agente não precisa das chaves

O agente envia uma solicitação: chame esta API, rode este comando naquele host. O Sallyport anexa a credencial dentro do aplicativo, executa a chamada e retorna o resultado. A chave nunca aparece no ambiente do agente, e um registro selado mostra o que rodou e quem aprovou.

O modelo de confiança

Escada de decisão fixa

Cada ação sobe a mesma escada compilada. Não há linguagem de políticas para configurar errado nem motor de regras para apodrecer; uma lista de permissões opcional pode dispensar a solicitação de sessão para identidades de código em que você confia.

O modelo de confiança

1

portão do cofre

O cofre é absoluto

O cofre inicia bloqueado. A Secure Enclave e o Touch ID protegem o acesso aos dados. Até o desbloqueio, o Sallyport nega todas as ações.

2

chaves por chamada

Chaves marcadas sempre pedem aprovação

Uma chave marcada como "Aprovação por chamada" exige um clique ou Touch ID em cada uso, mesmo dentro de uma sessão aprovada.

3

portão de sessão

Uma aprovação por execução do agente

Um novo processo de agente mostra um cartão com sua autoridade de assinatura de código. A aprovação dura até o processo terminar, você revogá-la ou bloquear o cofre.

4

observação

Execute e registre

Com a aprovação por sessão desligada, as ações rodam sem cartões de sessão e permanecem no registro.

Portão do cofre, chave com aprovação por chamada, portão de sessão, observar. Se você precisar traduzir isso para um documento de compras: privilégios permanentes zero para uma identidade não humana, acesso just-in-time e uma pessoa no circuito.

Incluído

Tudo vem em um único app assinado

Um único app assinado para Mac contém o cofre, as aprovações e o registro. Não há conta para criar nem serviço na nuvem por trás dele.

Portão de cofre absoluto

Enquanto está bloqueado, o Sallyport nega todas as ações do agente e operações de gerenciamento, exceto status.

Cifrado em repouso

O cofre cifra nomes de chaves, provedores, hosts vinculados, inventário SSH, configurações e valores secretos.

Procedência do processo

Cada cartão mostra a autoridade de assinatura de código e a cadeia de processos do solicitante, incluindo processos não assinados.

Touch ID para alterações

Alterações de configuração podem exigir Touch ID. Um clique sintético não satisfaz a solicitação biométrica.

Registro cifrado na escrita

O Sallyport cifra as execuções do agente e a atividade de cada chamada no momento da escrita, e liga o texto cifrado por uma cadeia de hashes.

SSH que enxerga o comando

O Sallyport vê o comando SSH completo, verifica a chave do host e sela uma gravação da sessão. A chave privada permanece no aplicativo.

Modo de observação

O modo de observação remove os cartões de sessão, mas mantém o portão do cofre, a aprovação por chamada e o registro.

Sem recuperação

O cofre não permite exportar nem revelar dados e não tem chave de recuperação. Se você perdê-lo, reemita as credenciais nos provedores.

Canais

HTTP, SSH e MCP

O agente se conecta ao Sallyport como um servidor MCP comum. Todas as ações seguem a mesma escada e chegam ao mesmo registro.

APIs HTTP

http.request → api.github.com

O app faz a chamada HTTPS e injeta a credencial apenas durante a execução. Redirecionamentos para outro host não a incluem.

SSH

ssh.exec → deploy@prod-03

Um helper sem estado abre a conexão. O app faz as assinaturas SSH, fixa as chaves de host e sela uma gravação da sessão; a chave privada não entra no helper.

Servidores MCP

github.create_issue

Execute servidores MCP locais por stdio ou remotos pelo mesmo portão. O Sallyport sela e renova os tokens OAuth 2.1.

Em números

O que está em jogo

84

versões maliciosas de pacotes em um único ataque npm que caçava credenciais

0

contas, serviços na nuvem ou telemetria: o Sallyport roda inteiramente no seu Mac

1 toque

o Touch ID aprova uma chamada marcada; um clique sintético não consegue falsificá-lo

~2 min

do brew install à sua primeira chamada com portão

Código aberto

Leia o código que guarda suas chaves

O cofre, o portão de aprovação, o registro e o executor que toca suas credenciais são todos públicos sob Apache-2.0. Clone e acompanhe uma chave do seu Touch ID até o fio.

Apache-2.0 · tudo inteiro

Audite você mesmo

Cada linha que guarda, destranca ou gasta uma credencial está no GitHub. Leia as partes que te preocupam e depois decida.

Nada liga para casa

Sem conta, sem serviço em nuvem, sem telemetria. O Sallyport fala com os hosts para os quais você apontar e com mais ninguém.

Seu para sempre

Apache-2.0 quer dizer: bifurque, corrija e rode dentro da sua empresa. Sua cópia continua funcionando aconteça o que acontecer conosco.

Perguntas frequentes

Perguntas frequentes

Qual é a licença do Sallyport?
O Sallyport é gratuito para baixar e usar. O núcleo é de código aberto sob Apache-2.0. Os componentes empresariais planejados usarão uma licença comercial.
Onde meus segredos ficam?
Em um cofre local no seu Mac. A Secure Enclave e o Touch ID protegem o acesso à chave de criptografia do cofre. O Sallyport cifra os valores secretos e seus metadados em repouso e não envia os dados do cofre.
Ele envia dados para o Sallyport?
Não. Não há serviço na nuvem, conta nem telemetria. O Sallyport funciona offline, exceto pelos serviços para os quais você o aponta e pelo feed de atualizações.
Quais são os requisitos de sistema?
Um Mac com Apple Silicon e macOS 14 ou mais recente. Macs com Intel não são compatíveis.
O que acontece enquanto o cofre está bloqueado?
As ações do agente param. As solicitações de gerenciamento retornam apenas o status; todas as outras operações são negadas. O Touch ID desbloqueia o cofre. Bloquear apaga as sessões e aprovações pendentes.
Funciona com o Claude Code e outros agentes?
Qualquer cliente MCP pode usar o shim sp mcp incluído para acessar http.request, ssh.exec e os servidores MCP upstream configurados. Claude Code, Cursor e Codex são os que testamos.
Posso rodar o Claude Code com --dangerously-skip-permissions?
A flag que todo mundo chama de modo YOLO desliga as confirmações do próprio Claude Code. Ela não muda nada nas suas credenciais: elas continuam em arquivos .env e variáveis de shell que o agente já conseguia ler. Essas confirmações nunca foram o que protegia suas chaves. Aponte o agente para o Sallyport e não sobra chave nenhuma no ambiente dele para pular.
É seguro instalar um servidor MCP que alguém publicou na internet?
Trate como qualquer dependência: ele roda com as suas permissões, e as descrições das ferramentas dele caem no contexto do modelo como instruções. Passe pelo Sallyport e cada chamada que ele fizer precisa de aprovação e cai no registro. Servidores stdio locais recebem a credencial que você vincular, então vincule a mais estreita que tiver e marque para aprovação por chamada.
Qual a diferença para o HashiCorp Vault ou a CLI do 1Password?
Esses guardam segredos muito bem e depois entregam. op run e vault read terminam com a credencial no ambiente do que rodar em seguida, que na sua máquina é o agente. O Sallyport não entrega: ele faz a chamada e devolve a resposta. Use os dois, se quiser: deixe a fonte da verdade onde está e deixe o Sallyport com a cópia que o seu agente usa.
O agente pode ver minhas chaves?
Não. Não existe comando que revele uma credencial guardada, nem exportação, nem rota de recuperação. O Sallyport devolve o que o serviço de destino respondeu, então um serviço que devolve a sua chave dentro da própria resposta está te mostrando o bug dele, e o registro te mostra a chamada que pegou isso.
O que acontece se eu perder acesso ao Mac?
Não há chave de recuperação. Reinicialize o cofre e reemita as credenciais nos provedores.

Seu agente está a uma injeção de prompt de distância das suas chaves.

Download grátis. Apple Silicon, macOS 14 ou mais recente. Sem conta, nunca.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon

Sallyport

O Sallyport executa chamadas de API e comandos SSH pelo seu agente de IA. As chaves ficam em um cofre local no seu Mac; você aprova cada execução e toda ação vai para um registro selado.

© 2026 Sallyport · Código aberto sob Apache-2.0 · Oleg Sotnikov