84 paquets npm devenus malveillants lors d'une seule attaque en mai

Laissez votre agent toucher à la prod.Gardez les clés.

Sallyport conserve vos identifiants dans un coffre-fort local et exécute les appels d'API et les commandes SSH à la place de l'agent. Vous approuvez chaque exécution d'un clic ou avec Touch ID. Aucune commande ne révèle une clé stockée, et il n'existe pas non plus de bouton d'export.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon · Apache-2.0 · Gratuit · sans compte · sans cloud

Conçu pour les ingénieurs qui laissent Claude Code, Cursor ou Codex toucher à une véritable infrastructure

Claude CodeCodexCursorWindsurfClineLangChainCrewAIOpenHandsGooseZed
Essayez vous-même

L'approbation là où vous êtes déjà

Cette clé exige une approbation à chaque utilisation. L'appel attend votre décision.

claude · ~/infra

sallyport · http.request

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

key cloudflare · flagged approval per call

en attente d'approbation…

Approbation requise

http.request → api.cloudflare.com

Developer ID Application: Anthropic PBC

claude node zsh

Clé:cloudflarepar appel
Cliquez sur « Approuver » pour laisser passer l'appel.ou appuyez sur A/D
Le problème

Votre agent peut lire vos clés en ce moment même

Jetons d'API dans .env, clés SSH sur le disque, autorisations OAuth dans les fichiers de configuration. L'agent et chaque paquet qu'il installe peuvent tout lire, et un simple README empoisonné suffit à les faire sortir.

Des secrets en pleine vue

Jetons dans .env et les variables du shell, clés SSH sur le disque, jetons OAuth dans les fichiers de configuration. Lisibles par l'agent, ses processus enfants et tout ce que npm a installé aujourd'hui.

L'injection de prompt devient un vol

Une page ou un README malveillant demande à l'agent d'envoyer un jeton vers une nouvelle destination, et l'agent obéit. Il est fait pour suivre les instructions.

Vous l'apprenez sur la facture

Sans passerelle, aucune trace des appels effectués par l'agent, de leur destination ou de leur contenu. Les clés volées refont surface des semaines plus tard, au moment choisi par quelqu'un d'autre.

Ce n'est pas hypothétique

Mai 2026

Attaque npm TanStack

84 versions malveillantes réparties sur 42 paquets ont récolté des identifiants cloud, des jetons GitHub et des clés SSH dès l'installation, puis se sont propagées via les propres paquets de leurs victimes.

Fin 2025

Ver Shai-Hulud

Des paquets npm compromis volaient des secrets à l'installation et utilisaient les identifiants dérobés pour infecter la vague suivante de paquets.

Août 2025

Nx S1ngularity

Un outil de build empoisonné fouillait les machines des développeurs à la recherche de secrets, sollicitait les outils d'IA locaux et exfiltrait le butin via la CLI GitHub.

Les trois ont récolté des clés dans les variables d'environnement et les fichiers sur le disque. Sallyport tient les clés exploitables hors de portée des deux.

Votre agent n'a pas besoin des clés

L'agent envoie une requête : appeler cette API, exécuter cette commande sur cet hôte. Sallyport joint l'identifiant dans l'application, exécute l'appel et renvoie le résultat. La clé n'apparaît jamais dans l'environnement de l'agent, et un journal scellé montre ce qui s'est exécuté et qui l'a approuvé.

Le modèle de confiance

Chaîne de décision fixe

Chaque action gravit la même chaîne de décision compilée. Aucun langage de règles à mal configurer, aucun moteur de règles qui se dégrade ; une allowlist facultative peut ignorer l'invite de session pour les identités de code de confiance.

Le modèle de confiance

1

sas du coffre-fort

Le coffre-fort est absolu

Le coffre-fort démarre verrouillé. La Secure Enclave et Touch ID protègent l'accès à ses données. Jusqu'au déverrouillage, Sallyport refuse toutes les actions.

2

clés par appel

Les clés marquées demandent toujours confirmation

Une clé marquée "Approval per call" exige un clic ou Touch ID à chaque utilisation, y compris dans une session approuvée.

3

sas de session

Une approbation par exécution d'agent

Un nouveau processus d'agent affiche une carte avec son autorité de signature de code. L'approbation reste valide jusqu'à la fin du processus, sa révocation ou le verrouillage du coffre-fort.

4

observer

Exécuter et enregistrer

Quand l'approbation par session est désactivée, les actions s'exécutent sans carte de session et restent dans le journal.

Verrou du coffre-fort, clé par appel, sas de session, observation.

Ce qu'il y a dedans

Tout tient dans une seule app signée

Une seule app Mac signée réunit le coffre-fort, les approbations et le journal. Aucun compte à créer, aucun service cloud derrière.

Sas de coffre-fort absolu

Tant que le coffre-fort est verrouillé, Sallyport refuse chaque action d'agent et toutes les demandes de gestion sauf le statut.

Chiffré au repos

Le coffre-fort chiffre les noms de clés, les fournisseurs, les liaisons d'hôtes, l'inventaire SSH, les réglages et les valeurs secrètes.

Provenance du processus

Chaque carte affiche l'autorité de signature de code de l'appelant et la chaîne de processus parents, y compris tout processus non signé.

Touch ID pour les modifications

Les changements de configuration peuvent exiger Touch ID. Un clic synthétique ne peut pas valider l'invite biométrique.

Journal à écriture aveugle

Sallyport chiffre les exécutions d'agents et les activités à l'écriture, puis relie le texte chiffré par une chaîne de hachage.

Un SSH qui voit la commande

Sallyport voit la commande SSH complète, vérifie la clé de l'hôte et scelle un enregistrement de la session. La clé privée reste dans l'application.

Mode observation

Le mode observation retire les cartes de session, mais conserve le verrou du coffre-fort, l'approbation par appel et le journal.

Aucune récupération

Le coffre-fort n'a ni export, ni affichage, ni clé de récupération. Si vous le perdez, réémettez les identifiants stockés chez leurs fournisseurs.

Canaux

HTTP, SSH et MCP

Votre agent se connecte à Sallyport comme à un serveur MCP ordinaire. Tout ce qu'il fait suit la même échelle vers le même journal.

API HTTP

http.request → api.github.com

L'app effectue l'appel HTTPS et injecte les identifiants uniquement pendant l'exécution. Les redirections vers un autre hôte ne les transmettent pas.

SSH

ssh.exec → deploy@prod-03

Un assistant sans état ouvre la connexion. L'app signe les demandes SSH, épingle les clés d'hôte et scelle un enregistrement de session ; la clé privée n'entre pas dans l'assistant.

Serveurs MCP

github.create_issue

Faites passer les serveurs MCP locaux en stdio ou distants par le même sas. Sallyport scelle et renouvelle les jetons OAuth 2.1.

En chiffres

Ce qui est en jeu

84

versions de paquets malveillantes dans une seule attaque npm partie à la chasse aux identifiants

0

compte, service cloud ou télémétrie : Sallyport s'exécute entièrement sur votre Mac

1 geste

Touch ID approuve un appel marqué ; un clic synthétique ne peut pas le simuler

~2 min

de brew install à votre premier appel filtré

Limites

Ce que Sallyport ne promet pas

Les outils de sécurité adorent trop promettre ; voici donc nos limites, noir sur blanc.

Limites

Une session approuvée peut quand même mal se comporter

L'approbation de session autorise le processus, pas le sens de chaque requête. Utilisez l'approbation par appel pour les clés qui exigent un examen individuel.

Il ne peut pas arrêter du code natif s'exécutant sous votre identité

Sallyport n'est pas un antivirus. Du code exécuté avec vos droits utilisateur peut encore attaquer l'app ou le système d'exploitation.

Il ne peut pas regarder à votre place

Les cartes affichent l'autorité de signature de code et la chaîne de processus de l'appelant. Vous devez toujours examiner la requête.

FAQ

Questions fréquentes

Sous quelle licence Sallyport est-il publié ?
Sallyport est gratuit à télécharger et à utiliser. Le cœur est open source sous Apache-2.0. Les composants d'entreprise prévus utiliseront une licence commerciale.
Où résident mes secrets ?
Dans un coffre-fort local sur votre Mac. La Secure Enclave et Touch ID protègent l'accès à la clé de chiffrement du coffre-fort. Sallyport chiffre les valeurs secrètes et les métadonnées au repos et ne téléverse aucune donnée du coffre-fort.
Fait-il des remontées de données ?
Non. Aucun service cloud, aucun compte, aucune télémétrie. Sallyport fonctionne hors ligne, sauf pour les services que vous ciblez et le flux de mise à jour.
Quelle est la configuration requise ?
Un Mac avec Apple Silicon sous macOS 14 ou plus récent. Les Mac Intel ne sont pas pris en charge.
Que se passe-t-il quand le coffre-fort est verrouillé ?
Les actions des agents s'arrêtent. Les demandes de gestion ne renvoient que le statut ; toutes les autres opérations sont refusées. Le déverrouillage exige Touch ID. Le verrouillage efface les sessions et les approbations en attente.
Fonctionne-t-il avec Claude Code et d'autres agents ?
Tout client MCP peut utiliser le shim sp mcp fourni pour accéder à http.request, ssh.exec et aux serveurs MCP en amont configurés.
L'agent peut-il un jour voir mes clés ?
Non. Aucune commande ne révèle un identifiant stocké, et il n'existe ni export ni récupération. Une réserve en toute honnêteté : Sallyport renvoie les réponses des serveurs telles qu'elles arrivent, donc si un service cible renvoie un secret dans sa réponse, l'agent voit cette réponse.
Et si je perds l'accès à mon Mac ?
Il n'y a pas de clé de récupération. Réinitialisez le coffre-fort et réémettez les identifiants chez leurs fournisseurs.

Votre agent n'est qu'à une injection de prompt de vos clés.

Téléchargement gratuit. Apple Silicon, macOS 14 ou plus récent. Aucun compte, jamais.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon

Sallyport

Sallyport exécute les appels d'API et les commandes SSH à la place de votre agent IA. Les clés restent dans un coffre-fort local sur votre Mac ; vous approuvez chaque exécution et chaque action est consignée dans un journal scellé.

© 2026 Sallyport · Open source sous Apache-2.0 · Oleg Sotnikov