84 paquetes npm se volvieron maliciosos en un solo ataque de mayo

Deja que tu agente toque producción.Quédate con las claves.

Sallyport guarda tus credenciales en una bóveda local y ejecuta las llamadas de API y los comandos SSH por el agente. Tú apruebas cada ejecución con un clic o Touch ID. No hay ningún comando que revele una clave guardada, ni tampoco botón de exportar.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon · Apache-2.0 · Gratis · sin cuenta · sin nube

Hecho para ingenieros que dejan que Claude Code, Cursor o Codex toquen infraestructura real

Claude CodeCodexCursorWindsurfClineLangChainCrewAIOpenHandsGooseZed
Pruébalo

Aprueba desde donde ya estás

Esta clave exige aprobación en cada uso. La llamada espera tu decisión.

claude · ~/infra

sallyport · http.request

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

key cloudflare · flagged approval per call

esperando aprobación...

Aprobación necesaria

http.request → api.cloudflare.com

Developer ID Application: Anthropic PBC

claude node zsh

Clave:cloudflarepor llamada
Haz clic en Aprobar para permitir la llamada.o pulsa A/D
El problema

Tu agente puede leer tus claves

Tokens de API en .env, claves SSH en disco, permisos OAuth en archivos de configuración. El agente y cada paquete que instala pueden leerlo todo, y un solo README envenenado basta para sacarlo por la puerta.

Secretos a la vista

Tokens en .env y variables del shell, claves SSH en disco, tokens OAuth en archivos de configuración. Los puede leer el agente, sus procesos secundarios y lo que sea que npm instaló hoy.

La inyección de prompts se convierte en robo

Una página o un README malicioso le dice al agente que envíe un token a otro sitio, y el agente obedece. Se creó para seguir instrucciones.

Te enteras por la factura

Sin una pasarela no queda registro de qué llamadas hizo el agente, adónde las envió ni qué llevaban. Las claves robadas aparecen semanas después, cuando le conviene a otro.

Tres que ya ocurrieron

Mayo de 2026

Ataque a npm de TanStack

84 versiones maliciosas en 42 paquetes recopilaron credenciales de la nube, tokens de GitHub y claves SSH al instalarse, y luego se propagaron a través de los propios paquetes de sus víctimas.

Finales de 2025

Gusano Shai-Hulud

Paquetes npm comprometidos robaban secretos al instalarse y usaban las credenciales robadas para infectar la siguiente tanda de paquetes.

Agosto de 2025

Nx S1ngularity

Una herramienta de compilación envenenada rastreaba las máquinas de los desarrolladores en busca de secretos, probaba herramientas de IA locales y sacaba el botín a través de la CLI de GitHub.

Los tres recopilaron claves de variables de entorno y archivos en disco. Sallyport mantiene fuera de ambos las claves utilizables.

Tu agente no necesita las claves

El agente envía una solicitud: llama a esta API, ejecuta este comando en ese host. Sallyport adjunta la credencial dentro de la aplicación, ejecuta la llamada y devuelve el resultado. La clave nunca aparece en el entorno del agente, y un registro sellado muestra qué se ejecutó y quién lo aprobó.

El modelo de confianza

Escalera de decisión fija

Cada acción sube por la misma escalera compilada. No hay lenguaje de políticas que configurar mal ni motor de reglas que se pudra; una lista permitida opcional puede omitir la solicitud de sesión para las identidades de código en las que confías.

El modelo de confianza

1

puerta de la bóveda

La bóveda es absoluta

La bóveda empieza bloqueada. Secure Enclave y Touch ID protegen el acceso a sus datos. Hasta que la desbloqueas, Sallyport deniega todas las acciones.

2

claves por llamada

Las claves marcadas siempre piden confirmación

Una clave marcada con "Aprobación por llamada" exige un clic o Touch ID en cada uso, incluso dentro de una sesión aprobada.

3

puerta de sesión

Una aprobación por ejecución del agente

Un nuevo proceso de agente muestra una tarjeta con su autoridad de firma de código. La aprobación dura hasta que el proceso termina, la revocas o bloqueas la bóveda.

4

observación

Ejecuta y registra

Con la aprobación por sesión desactivada, las acciones se ejecutan sin tarjetas de sesión y permanecen en el registro.

Puerta de la bóveda, clave con aprobación por llamada, puerta de sesión, observar. Si tienes que traducirlo a un documento de compras: privilegios permanentes cero para una identidad no humana, acceso justo a tiempo y una persona en el bucle.

Incluido

Todo viene en una sola app firmada

Una sola app firmada para Mac contiene la bóveda, las aprobaciones y el registro. No hay cuenta que crear ni servicio en la nube detrás.

Puerta de bóveda absoluta

Mientras está bloqueada, Sallyport deniega todas las acciones del agente y las operaciones de gestión salvo el estado.

Cifrado en reposo

La bóveda cifra nombres de claves, proveedores, hosts vinculados, inventario SSH, ajustes y valores secretos.

Procedencia del proceso

Cada tarjeta muestra la autoridad de firma de código y la cadena de procesos del solicitante, incluidos los procesos sin firmar.

Touch ID para los cambios

Los cambios de configuración pueden exigir Touch ID. Un clic sintético no satisface la solicitud biométrica.

Registro cifrado al escribir

Sallyport cifra las ejecuciones del agente y la actividad de cada llamada al escribirlas, y enlaza el texto cifrado mediante una cadena de hashes.

SSH que ve el comando

Sallyport ve el comando SSH completo, comprueba la clave del host y sella una grabación de la sesión. La clave privada permanece en la aplicación.

Modo observación

El modo observación elimina las tarjetas de sesión, pero mantiene la puerta de la bóveda, la aprobación por llamada y el registro.

Sin recuperación

La bóveda no permite exportar ni revelar datos y no tiene clave de recuperación. Si la pierdes, vuelve a emitir las credenciales con sus proveedores.

Canales

HTTP, SSH y MCP

El agente se conecta a Sallyport como un servidor MCP normal. Todas las acciones siguen la misma escalera y llegan al mismo registro.

API HTTP

http.request → api.github.com

La app hace la llamada HTTPS e inyecta la credencial solo durante la ejecución. Las redirecciones a otro host no la incluyen.

SSH

ssh.exec → deploy@prod-03

Un helper sin estado abre la conexión. La app gestiona las firmas SSH, fija las claves de host y sella una grabación de la sesión; la clave privada no entra en el helper.

Servidores MCP

github.create_issue

Ejecuta servidores MCP locales por stdio o remotos a través de la misma puerta. Sallyport sella y renueva los tokens OAuth 2.1.

En cifras

Lo que está en juego

84

versiones maliciosas de paquetes en un solo ataque de npm que cazaba credenciales

0

cuentas, servicios en la nube o telemetría: Sallyport se ejecuta por completo en tu Mac

1 toque

Touch ID aprueba una llamada marcada; un clic sintético no puede falsificarlo

~2 min

de brew install a tu primera llamada controlada

Código abierto

Lee el código que guarda tus claves

La bóveda, la puerta de aprobación, el registro y el ejecutor que toca tus credenciales son públicos bajo Apache-2.0. Clónalo y sigue una clave desde tu Touch ID hasta el cable.

Apache-2.0 · todo entero

Audítalo tú mismo

Cada línea que guarda, desbloquea o gasta una credencial está en GitHub. Lee las partes que te preocupan y luego decide.

Nada llama a casa

Sin cuenta, sin servicio en la nube, sin telemetría. Sallyport habla con los hosts a los que lo apuntes y con nadie más.

Tuyo para siempre

Apache-2.0 significa que puedes bifurcarlo, parchearlo y desplegarlo dentro de tu empresa. Tu copia sigue funcionando hagamos lo que hagamos después.

Preguntas frecuentes

Preguntas frecuentes

¿Qué licencia usa Sallyport?
Sallyport es gratis para descargar y usar. El núcleo es de código abierto bajo Apache-2.0. Los componentes empresariales previstos usarán una licencia comercial.
¿Dónde se guardan mis secretos?
En una bóveda local de tu Mac. Secure Enclave y Touch ID protegen el acceso a la clave de cifrado de la bóveda. Sallyport cifra los valores secretos y sus metadatos en reposo, y no sube los datos de la bóveda.
¿Envía datos a Sallyport?
No. No hay servicio en la nube, ni cuenta, ni telemetría. Sallyport funciona sin conexión salvo por los servicios a los que lo apuntes y el canal de actualizaciones.
¿Cuáles son los requisitos del sistema?
Un Mac con Apple Silicon y macOS 14 o posterior. Los Mac con Intel no son compatibles.
¿Qué ocurre mientras la bóveda está bloqueada?
Las acciones del agente se detienen. Las solicitudes de gestión solo devuelven el estado; todas las demás operaciones se deniegan. Touch ID desbloquea la bóveda. Al bloquearla se borran las sesiones y aprobaciones pendientes.
¿Funciona con Claude Code y otros agentes?
Cualquier cliente MCP puede usar el shim sp mcp incluido para acceder a http.request, ssh.exec y los servidores MCP upstream configurados. Claude Code, Cursor y Codex son contra los que probamos.
¿Puedo ejecutar Claude Code con --dangerously-skip-permissions?
La opción que todo el mundo llama modo YOLO desactiva las confirmaciones de Claude Code. No cambia nada respecto a tus credenciales: siguen en archivos .env y variables de shell que el agente ya podía leer. Esas confirmaciones nunca fueron lo que protegía tus claves. Apunta el agente a Sallyport y en su entorno no queda ninguna clave que saltarse.
¿Es seguro instalar un servidor MCP que alguien publicó en internet?
Trátalo como cualquier dependencia: se ejecuta con tus permisos, y sus descripciones de herramientas aterrizan en el contexto del modelo como instrucciones. Pásalo por Sallyport y cada llamada que haga necesita aprobación y queda en el registro. Los servidores stdio locales reciben la credencial que les vincules, así que vincula la más estrecha que tengas y márcala para aprobación por llamada.
¿En qué se diferencia de HashiCorp Vault o de la CLI de 1Password?
Esos guardan secretos muy bien y luego los entregan. op run y vault read terminan con la credencial en el entorno de lo que se ejecute a continuación, que en tu máquina es el agente. Sallyport no la entrega: hace la llamada y devuelve la respuesta. Usa los dos si quieres: deja la fuente de verdad donde está y que Sallyport tenga la copia con la que trabaja tu agente.
¿Puede el agente ver mis claves?
No. No hay comando que revele una credencial guardada, ni exportación, ni ruta de recuperación. Sallyport devuelve lo que respondió el servicio de destino, así que un servicio que devuelve tu clave dentro de su propia respuesta te está enseñando su fallo, y el registro te enseña la llamada que lo pilló.
¿Qué ocurre si pierdo el acceso a mi Mac?
No hay clave de recuperación. Reinicia la bóveda y vuelve a emitir las credenciales con sus proveedores.

Tu agente está a una inyección de prompts de tus claves.

Descarga gratis. Apple Silicon, macOS 14 o posterior. Sin cuenta, nunca.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon