# Tsuba: Jette un œil au code inconnu avant sa première exécution.

> Une app gratuite pour la barre des menus de macOS qui vérifie les installations npm, les scripts curl | bash, les DMG téléchargés, les extensions d’éditeur et les plugins d’outils d’IA avant leur exécution, pour intercepter les malwares de faux entretiens comme Contagious Interview, la campagne nord-coréenne.

- URL: https://oliverz.dev/fr/products/tsuba
- Author: Oliver Zhang (https://oliverz.dev)
- Language: fr
- Platform: macOS app
- Status: live
- Price: Free
- License: Apache-2.0
- Version: 0.3.0
- First released: 2026-10-28
- Latest release: 2026-10-31
- Requirements: macOS 13+
- Télécharger pour Apple silicon: https://github.com/chihyungchang/Tsuba/releases/download/v0.3.0/Tsuba_0.3.0_aarch64.dmg
- Télécharger pour Intel: https://github.com/chihyungchang/Tsuba/releases/download/v0.3.0/Tsuba_0.3.0_x64.dmg
- Source: https://github.com/chihyungchang/Tsuba

La tsuba (鍔) est la garde d’un sabre japonais. Celle-ci se loge dans votre barre des menus et intervient aux moments où du code inconnu s’exécute pour la première fois : elle détermine ce que le code s’apprête à faire, d’où il vient et s’il ressemble à une attaque connue, puis décide d’**Autoriser**, d’**Avertir** ou de **Bloquer**.

Je l’ai construite après que de faux clients Upwork ont tenté à deux reprises d’infecter mon Mac. La première fois, ils ont réussi, et ni XProtect ni l’antivirus n’ont rien remarqué. [Voici toute l’histoire](https://oliverz.dev/fr/blog/upwork-contagious-interview).

![Tsuba en 24 secondes.](https://oliverz.dev/products/tsuba/demo.en.mp4?v=d8f6a21d)

![Le tableau de bord : état de la protection, ce qui demande votre attention, et un journal en direct de chaque vérification.](https://oliverz.dev/products/tsuba/1-overview.en.webp?v=e341faf4)

## Pourquoi les antivirus ratent ces attaques

Faux projets d’entretien, fausses apps de réunion, paquets npm piégés et extensions d’éditeur malveillantes arrivent chaque fois sous un nouvel emballage. Ils passent par des outils ordinaires comme node, curl et bash : un scanner traditionnel n’a rien à signaler. Tsuba surveille plutôt les points d’entrée.

L’ampleur du phénomène :

- La campagne nord-coréenne **Contagious Interview** sévit depuis au moins décembre 2022. Le « projet de test » est un projet npm sur GitHub, GitLab ou Bitbucket, et dès que vous faites confiance au dépôt, VS Code exécute de lui-même son fichier de tâches ([Microsoft, mars 2026](https://www.microsoft.com/en-us/security/blog/2026/03/11/contagious-interview-malware-delivered-through-fake-developer-job-interviews/)).
- Socket recense **plus de 1 700 paquets malveillants** liés à la campagne depuis janvier 2025, sur npm, PyPI, Go, crates.io et Packagist ([Socket, avril 2026](https://socket.dev/blog/contagious-interview-campaign-spreads-across-5-ecosystems)).
- Les extensions GlassWorm cachaient leur code dans des caractères Unicode invisibles et ont atteint environ **35 800 installations** avant d’être repérées ([Koi Security, octobre 2025](https://web.archive.org/web/20260101202601/https://www.koi.ai/blog/glassworm-first-self-propagating-worm-using-invisible-code-hits-openvsx-marketplace)).
- Sonatype a enregistré **16 279 nouveaux paquets open source malveillants** en un seul trimestre, 845 204 au total ([Sonatype, T2 2025](https://www.sonatype.com/press-releases/q2-2025-open-source-malware-index)).

## Avant d’exécuter un projet envoyé par un recruteur

1. Ne l’ouvrez pas encore dans votre éditeur. Un dossier approuvé peut exécuter son `.vscode/tasks.json` à l’ouverture.
2. Lisez `package.json` : scripts `preinstall` et `postinstall`, et dépendances dont vous n’avez jamais entendu parler ou publiées la semaine dernière.
3. Cherchez du code qui n’a rien à faire dans un test technique : adresses IP codées en dur, `eval` de texte téléchargé, lecture des profils de navigateur, des portefeuilles ou du trousseau.
4. Ne collez jamais dans votre terminal une ligne `curl … | bash` reçue dans une discussion sans avoir lu le script.
5. Si vous l’avez déjà exécuté, considérez la machine comme compromise : cherchez des traces, puis changez mots de passe, tokens et clés depuis un appareil sain.

Tsuba fait les étapes 1 à 4 pour vous au moment où elles comptent, et son Bilan de santé couvre l’étape 5.

## Ce qu’elle vérifie

| Point d’entrée | Exemples | Ce que Tsuba examine |
| --- | --- | --- |
| Commandes du terminal | `curl … \| bash`, `npm install`, `npx`, `npm start`, `git clone` | Télécharge le script distant sans l’exécuter ; vérifie les paquets npm contre les listes de paquets malveillants, leur ancienneté et leurs scripts d’installation ; analyse le projet à la recherche de code caché, de serveurs codés en dur et de lectures de portefeuilles ou de gestionnaires de mots de passe |
| Collage dans le terminal | Une page vous dit de « copier cette commande dans votre terminal » | Avertit dès que vous collez ; les commandes obfusquées envoyées dans un shell sont signalées à haut risque |
| Dossier Téléchargements | Nouveaux fichiers `.dmg`, `.pkg`, `.vsix` | Signature, notarisation, source du téléchargement et scripts d’installation |
| Extensions d’éditeur | VS Code, Cursor, Windsurf, VSCodium | La liste officielle des extensions malveillantes, l’activation au démarrage, le code caché dans des caractères invisibles ; les extensions à haut risque partent en quarantaine |
| Outils de code IA | Serveurs MCP, skills et hooks pour Claude Code, Cursor, Codex | Paquets malveillants connus, lancements depuis des dossiers cachés, instructions cachées à l’utilisateur |
| Bilan de santé | Barre des menus → Bilan de santé | Traces laissées par des attaques connues et éléments d’ouverture suspects |

Les projets dont vous doutez peuvent d’abord être essayés dans un bac à sable : un faux dossier personnel garni de leurres, des requêtes réseau enregistrées mais jamais envoyées, et une limite de 60 secondes.

![L’installation bloquée d’une fausse app de réunion : le verdict, les raisons et les preuves, ligne par ligne.](https://oliverz.dev/products/tsuba/2-history.en.webp?v=f0168298)

![Analysez des dossiers à la demande ou selon un calendrier. Tout ce qui est risqué part en quarantaine.](https://oliverz.dev/products/tsuba/3-scan.en.webp?v=2f8accaf)

![Le Bilan de santé cherche les traces d’attaques connues et audite les extensions d’éditeur et les outils d’IA.](https://oliverz.dev/products/tsuba/4-doctor.en.webp?v=8a48a5e3)

## Tsuba face aux autres outils

La plupart des outils couvrent une seule porte d’entrée. Tsuba couvre chaque première exécution sur un Mac, et fonctionne en complément des autres.

| Outil | Ce qu’il vérifie | Quand |
| --- | --- | --- |
| **Tsuba** | Commandes du terminal, npm et npx, projets clonés, `.dmg` / `.pkg` / `.vsix`, extensions d’éditeur, serveurs MCP, skills et hooks, commandes collées | Avant la première exécution du code |
| npq, Socket Firewall, Aikido Safe Chain | Les paquets npm (et, pour certains, PyPI et d’autres) | À l’installation |
| mcp-scan et autres scanners MCP | Serveurs MCP et outils d’agent | Quand vous lancez une analyse |
| LuLu, BlockBlock, KnockKnock (Objective-See) | Connexions sortantes et logiciels qui s’installent pour démarrer à l’ouverture de session | Après l’exécution du code |
| Antivirus et XProtect | Signatures de malwares connus | Quand un fichier correspond à un échantillon connu |

## Comment elle décide

Les règles hors ligne s’exécutent toujours en premier, appuyées par des renseignements publics sur les menaces mis à jour chaque jour, dont plus de 230 000 paquets npm et PyPI signalés comme malveillants par l’[OpenSSF](https://ossf.github.io/malicious-packages/stats/). Un modèle d’IA peut ensuite juger les preuves en contexte. Claude donne les meilleurs résultats, d’autres fournisseurs et des modèles locaux sont pris en charge, et vous pouvez désactiver complètement l’IA.

Seules les preuves dont une vérification a besoin sont envoyées au modèle. Les commentaires du code sont retirés au préalable, et les secrets ne sont jamais envoyés. La configuration et l’historique restent dans `~/.tsuba`, sur votre Mac.

![Réglages : activez ou désactivez chaque défense, et choisissez comment les verdicts sont rendus, avec ou sans IA.](https://oliverz.dev/products/tsuba/5-settings.en.webp?v=ce24d1bc)

## Disponibilité

Tsuba est disponible, gratuite et open source sous licence Apache 2.0 ([sur GitHub](https://github.com/chihyungchang/Tsuba)). Il existe deux versions : choisissez **Apple silicon** pour les Mac M1 et plus récents, **Intel** pour les plus anciens. Vous ne savez pas lequel vous avez ? Menu Apple → À propos de ce Mac → Puce.

L’app parle dix langues, dont le français : English, 简体中文, 繁體中文, 日本語, 한국어, Español, Français, Deutsch, Português et Русский. L’interface, les notifications, les vérifications dans le terminal, les explications des règles et les réponses de l’IA suivent la langue de macOS, ou choisissez-en une dans **Réglages → Apparence**.

Tsuba n’est pas encore signée ni notarisée par Apple : macOS la bloque donc la première fois que vous l’ouvrez. Allez dans **Réglages Système → Confidentialité et sécurité** et cliquez sur **Ouvrir quand même**. Merci de ne pas retirer plutôt l’attribut de quarantaine avec `xattr` : Tsuba avertit à propos des installeurs qui vous le demandent, et le sien ne doit pas faire exception.

Vous ne le faites qu’une fois. Ensuite, Tsuba se met à jour toute seule : elle vous prévient quand une nouvelle version sort, et ne l’installe que si sa signature correspond à la clé intégrée à l’app.

Pour vérifier que votre DMG est bien celui que GitHub a compilé à partir du code public, comparez `shasum -a 256 Tsuba_*.dmg` avec `SHA256SUMS.txt` sur [la page de la version](https://github.com/chihyungchang/Tsuba/releases/latest).

## FAQ

### Puis-je exécuter sans risque un projet envoyé par un recruteur ?

Considérez-le comme non fiable tant qu’il n’a pas été vérifié : dans les faux entretiens d’embauche, le projet de test est le malware. Glissez le dossier sur la fenêtre de Tsuba, ou clonez-le avec Tsuba connectée à votre terminal : elle vérifie les dépendances, les scripts d’installation et les tâches VS Code avant que quoi que ce soit ne s’exécute. Si vous l’avez déjà exécuté, lancez un **Bilan de santé** et lisez [ce qui m’est arrivé](https://oliverz.dev/fr/blog/upwork-contagious-interview).

### Comment vérifier un paquet npm avant de l’installer ?

Avec Tsuba connectée à votre terminal, `npm install` et `npx` sont vérifiés avant leur exécution : paquets malveillants connus de la liste OpenSSF, paquets publiés il y a quelques jours à peine, et scripts d’installation. Des outils en ligne de commande comme npq font une vérification similaire, pour npm seulement.

### Pourquoi macOS dit-il que Tsuba ne peut pas être ouverte ?

Tsuba n’est pas encore signée ni notarisée par Apple : la première fois que vous l’ouvrez, allez dans **Réglages Système → Confidentialité et sécurité** et cliquez sur **Ouvrir quand même**. Merci de ne pas retirer plutôt l’attribut de quarantaine avec `xattr` : Tsuba avertit justement à propos des installeurs qui le demandent. Pour vérifier votre téléchargement, comparez-le au SHA-256 indiqué sous Journal des modifications.

### Tsuba envoie-t-elle mon code ?

Aucun fichier n’est envoyé. Si vous activez l’IA, seules les preuves dont une vérification a besoin partent vers le modèle que vous avez choisi, sans les commentaires du code et sans les secrets. IA désactivée, les vérifications tournent sur votre Mac avec les règles hors ligne. La configuration et l’historique restent dans `~/.tsuba`. La [politique de confidentialité](https://oliverz.dev/fr/products/tsuba/privacy) liste tout ce que Tsuba envoie, et quand.

### Faut-il un abonnement à une IA ou une clé d’API ?

Non. Les règles hors ligne s’exécutent toujours en premier et fonctionnent seules. L’IA est facultative : Claude donne les meilleurs résultats, et d’autres fournisseurs ainsi que des modèles locaux sont pris en charge.

### Remplace-t-elle mon antivirus ?

Non. La reconnaissance des malwares connus est laissée à XProtect de macOS et aux renseignements ouverts sur les menaces. Tsuba couvre ce qui leur échappe : du code sous un nouvel emballage que personne n’a encore vu, comme les faux projets d’entretien, les fausses apps de réunion, les paquets piégés et les extensions malveillantes, et elle intervient avant que ce code ne s’exécute.

### Sur quels Mac fonctionne-t-elle ?

macOS 13 ou version ultérieure, sur Apple silicon et Intel, avec un téléchargement distinct pour chacun. Menu Apple → À propos de ce Mac → Puce vous indique lequel vous avez.

### Et si elle signale quelque chose qui est en fait sûr ?

Chaque « Avertir » et chaque « Bloquer » affiche ses preuves (quel fichier, quelle ligne, ce qui a correspondu) pour que vous puissiez juger par vous-même, et un avertissement que vous avez vérifié peut être ignoré, ou ce en quoi vous avez confiance ajouté à la liste d’autorisation. Merci de [signaler le faux positif](#feedback) : chacun devient un test de régression.
