Retour aux mises à jour
New releaseJul 25, 2026

node9-proxy v1.65.1

La couche de sécurité d'exécution pour l'ère agentique. Fournissant une gouvernance « Sudo » déterministe et des journaux d'audit pour les agents IA autonomes.

Partager

🛡️ Node9

Qu'est-ce que votre agent IA a réellement fait ? Découvrez-le.

npm version monthly downloads License: Apache 2.0 Documentation OpenSSF Best Practices node9 self-scanned

Node9 se place entre votre agent IA et les outils qu'il peut utiliser — découvrez ce qu'il a déjà fait, protégez contre les actions risquées en temps réel, et examinez ce qui s'est passé sur n'importe quelle période.

Fonctionne avec Claude Code · Codex CLI · Antigravity (agy) · GitHub Copilot CLI · Gemini CLI · Cursor · Windsurf · VSCode · Claude Desktop · Opencode · Pi · Hermes Agent · tout serveur MCP.

Ce que fait Node9

  • 🔍 Découvrir — analysez chaque session IA passée pour détecter les fuites d'identifiants, les boucles d'agents, les opérations bloquées, et chaque secret sur disque qu'un agent pourrait atteindre dès maintenant
  • 🛡 Protéger — examinez ou bloquez les commandes risquées avant qu'elles ne s'exécutent — rm -rf, git push --force, DROP TABLE, lectures d'identifiants, curl | bash, fuites de clés AWS/GitHub/Stripe
  • 📊 Examiner — rapport par période (aujourd'hui / semaine / mois / 90 jours) — coût par agent, outils les plus utilisés, boucliers déclenchés, rayon d'impact

Analyse rétrospective

Voici ma propre machine — 90 jours pendant le développement de Node9. Score 25/100, 5 fichiers d'identifiants qu'un agent IA pourrait atteindre dès maintenant.```bash npx node9-ai scan # before installation, runs in ~10s, nothing uploads node9 scan # after installation, same output

<p align="center">
  Node9 scan scorecard
</p>

## Tableau de bord de la posture de sécurité

`node9 posture` évalue le niveau d'exposition de cette machine à un agent compromis — isolation, trafic sortant, secrets sur disque, chaîne d'approvisionnement, privilèges — et vous fournit la commande exacte pour corriger chaque constat.```bash
node9 posture          # scorecard with the #1 risk and a fix for every finding
node9 posture --ship   # send a redacted snapshot to your node9 dashboard (fleet view)

Les constatations sont regroupées par qui peut les corriger : 🔒 celles que node9 réduit (il suffit d’exécuter la commande) et 🧱 celles que vous seul pouvez résoudre. Chacune comporte un quoi / pourquoi / qui en langage clair et une véritable remédiation — par exemple, la constatation « l’agent s’exécute sans sandbox sur l’hôte » pointe directement vers node9 sandbox run (ci-dessous).```text 🛡️ Node9 Posture — agent on this host Score: 100/100 (Good) 2 advisories below don't affect the score — OS-level exposure, yours to weigh.

🟢 node9 is already protecting you ✅ Secrets node9 DLP is blocking this ✅ Egress node9 egress is approval-gating this ✅ Approval gate node9 is blocking this ✅ Privilege node9 is approval-gating this

🔒 node9 reduces these — run the command, the rest is yours ⚠️ Isolation Running directly on the host — no container The agent runs loose on your whole machine, not in a sandbox. → node9 sandbox run — jail it: kernel egress + scoped mounts + node9 inside → node9 shield enable project-jail — or shrink the blast radius, keep host access ⚠️ Network exposure 4 services on 0.0.0.0 (node :3000/:4000, PostgreSQL :5432, Redis :6379) Reachable from your whole network, not just this laptop. → node9 shield enable postgres|redis — node9 blocks DROP TABLE / FLUSHALL → bind to 127.0.0.1 / firewall the port (your part)

✅ Supply chain no issues found ✅ Coverage no issues found

Track this across your fleet & keep it green → node9.ai

## Analyser un dépôt — sécurité agent-CI

`node9 scan-repo` vérifie tout dépôt (ou dossier local) pour détecter les façons dont un agent IA connecté à GitHub Actions pourrait être **détourné par un tiers** — workflows injectables, secrets accessibles à l'agent, serveurs MCP non épinglés, configuration d'agent trop permissive, et fichiers d'instructions empoisonnés. Analyse statique et uniquement par lecture : il ne lit que la configuration validée, n'exécute jamais le code du dépôt. Aucune installation ni jeton requis pour les dépôts publics.```bash
npx node9-ai scan-repo <owner/repo>   # any public repo, no install
node9 scan-repo .                      # a local checkout — no network
node9 scan-repo <owner/repo> --json    # machine-readable

I'm ready to translate the Kitploit tool content from English to French. Please provide chunk 9 of 33.```text 🛡️ node9 scan-repo · node9-ai/agent-security-demo · ⚠️ agent-security risk found inspected 2 config file(s), 2 finding(s)

🔴 CRITICAL Injectable agent workflow — untrusted input reaches a tool-using agent with secrets .github/workflows/vulnerable-example.yml · CI-2 • runs with base-repo secrets (pull_request_target) • checks out the untrusted PR head into the workspace root • allowed_non_write_users: "*" — any user can trigger the agent • no effective actor gate

🔴 CRITICAL Exfiltratable secrets reachable by an injectable agent .github/workflows/vulnerable-example.yml · CI-4 • agent has arbitrary shell (bare Bash) → can read env and exfiltrate

Ce qu'il vérifie :

| Vérification | Signale                                                                      |
| ------------- | ---------------------------------------------------------------------------- |
| **CI-1**      | config d'agent commitée qui pré-autorise des outils larges ou exécute des hooks distants |
| **CI-2**      | workflows d'agent injectables — un outsider peut déclencher l'agent et le détourner |
| **CI-3**      | serveurs MCP non épinglés / `@latest` ou identifiants en ligne (chaîne d'approvisionnement) |
| **CI-4**      | secrets qu'un agent injecté pourrait exfiltrer                               |
| **CI-6**      | instructions empoisonnées ou dangereuses dans `CLAUDE.md` / `AGENTS.md` / compétences |

**Bloquez chaque PR** — le même moteur qu'une GitHub Action, afin qu'une config détournable ne puisse pas être fusionnée :```yaml
# .github/workflows/agent-security.yml
- uses: node9-ai/node9-proxy@v2
  with:
    fail-on: high # or 'never' to just comment

Marketplace : node9 Agent Security

Vous l’utilisez ? Ajoutez le badge scanned by node9 à votre README.

Surveillance en direct

Node9 monitor dashboard

node9 monitor ouvre un tableau de bord terminal interactif avec deux vues :

  • [1] Temps réel — activité en direct, approbations, alertes de sécurité, score de risque actuel
  • [2] Rapport — résumé par fenêtre de période : coût, principaux outils, boucliers déclenchés, rayon d’impact

Rapport

Appuyez sur [2] dans le moniteur pour obtenir un résumé par fenêtre de période. Basculez la fenêtre avec [A]ujourd’hui · [S]emaine · [M]ois · [Q]uatre-vingt-dix — mêmes panneaux que l’analyse ci-dessus, pilotés par votre journal d’audit post-installation.

Node9 monitor [2] Report

```bash node9 monitor # press [2] for Report view node9 report --period 7d # CLI form, no TUI ``` ## Installation```bash # macOS / Linux brew tap node9-ai/node9 && brew install node9

or via npm (any platform)

npm install -g node9-ai

📦 Installation

Option 1: Install via pip

pip install kitploit

Option 2: Install from source

git clone https://github.com/kitploit/kitploit.git
cd kitploit
pip install -r requirements.txt
python setup.py install

Option 3: Use with Docker

docker pull kitploit/kitploit
docker run -it --rm kitploit/kitploit

🚀 Quick Start

After installation, you can start using Kitploit immediately:

kitploit --help

To search for a specific tool:

kitploit search nmap

To get detailed information about a tool:

kitploit info metasploit

📚 Usage Examples

Searching for tools

kitploit search "web scanner"
kitploit search --category network
kitploit search --tag exploit

Managing your tool collection

kitploit add https://github.com/example/tool
kitploit remove tool-name
kitploit update

Exporting results

kitploit export --format json
kitploit export --format csv
kitploit export --format markdown

🔧 Configuration

Kitploit can be configured via a configuration file located at ~/.kitploit/config.yaml:

# Example configuration
api:
  base_url: "https://api.kitploit.com"
  timeout: 30
  retries: 3

cache:
  enabled: true
  ttl: 3600

output:
  default_format: "table"
  color: true

🛠️ Development

Setting up the development environment

git clone https://github.com/kitploit/kitploit.git
cd kitploit
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -e ".[dev]"

Running tests

pytest tests/
pytest --cov=kitploit tests/

Building documentation

cd docs
make html

🤝 Contributing

We welcome contributions from the community! Here's how you can help:

  1. Fork the repository and create your branch from main.
  2. Write clear, documented code following our style guide.
  3. Add tests for any new functionality.
  4. Update documentation as needed.
  5. Submit a pull request with a clear description of changes.

Development workflow

# Create a feature branch
git checkout -b feature/amazing-feature

# Make your changes and commit them
git add .
git commit -m "Add amazing feature"

# Push to your fork
git push origin feature/amazing-feature

# Open a pull request on GitHub

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgements

  • Thanks to all contributors who have helped shape this project.
  • Special thanks to the open-source security community for their continuous support and feedback.
  • Built with ❤️ for security professionals worldwide.

📬 Contact


Made with ❤️ by the Kitploit team

node9 init       # auto-wires all detected agents + MCP servers
node9 login      # connect this machine to your workspace (approve it in the browser)
node9 doctor     # verify everything is wired and reporting
```
Nécessite Node.js 18+.

`init` seul vous offre un contrôle local complet : règles, boucliers, DLP et
approbations fonctionnent tous hors ligne, sur cette machine.

`login` est ce qui connecte la machine à votre tableau de bord. Il affiche un code, ouvre
le navigateur, et vous approuvez la machine là-bas ; si vous n'avez pas encore de compte,
la création de compte en cours de processus vous ramène à la même approbation avec le code
intact. Tant que vous ne l'exécutez pas, tout est appliqué localement mais rien n'atteint
Mission Control, donc le tableau de bord reste vide.

`node9 logout` déconnecte à nouveau une machine. Il révoque la clé de cette machine ;
le contrôle local continue de fonctionner.

## Boucliers — packs de règles organisés

Chaque bouclier est un ensemble de règles organisé pour un service ou un domaine. Activez uniquement ce dont vous avez besoin.

| Bouclier          | Ce qu'il détecte                                                                 | Activation                              |
| ----------------- | ------------------------------------------------------------------------------- | --------------------------------------- |
| `project-jail`    | Bloque les lectures de `~/.ssh`, `~/.aws`, `.env`, identifiants via Bash et l'outil Read | `node9 shield enable project-jail`      |
| `bash-safe`       | `curl \| bash`, `rm -rf /`, écrasement de disque, `eval` de contenu distant     | `node9 shield enable bash-safe`         |
| `postgres`        | `DROP TABLE`, `TRUNCATE`, `DROP COLUMN`, `DELETE` sans `WHERE`                   | `node9 shield enable postgres`          |
| `mongodb`         | `dropDatabase`, `drop()`, `deleteMany({})`, suppressions d'index                 | `node9 shield enable mongodb`           |
| `redis`           | `FLUSHALL`, `FLUSHDB`, `CONFIG SET` sur un serveur en direct                     | `node9 shield enable redis`             |
| `aws`             | Suppression S3, arrêt EC2, modifications IAM, destruction RDS                     | `node9 shield enable aws`               |
| `k8s`             | Suppression de namespace, `helm uninstall`, effacements de rôles de cluster      | `node9 shield enable k8s`               |
| `docker`          | `system prune`, `volume prune`, `rm -f` de conteneurs                            | `node9 shield enable docker`            |
| `github`          | `gh repo delete`, suppression de branche distante, modifications de paramètres   | `node9 shield enable github`            |
| `filesystem`      | `chmod 777`, écritures sous `/etc/`, `/boot/`, `/usr/`                           | `node9 shield enable filesystem`        |
| `mcp-tool-gating` | Outils MCP non approuvés activant silencieusement de nouvelles capacités         | `node9 shield enable mcp-tool-gating`   |```bash
node9 shield list    # show all shields + status
```
## Toujours actif — aucune configuration requise

- **Git** — intercepte `git push --force`, `git reset --hard`, `git clean -fd`
- **SQL** — intercepte `DELETE` / `UPDATE` sans `WHERE`, `DROP TABLE`, `TRUNCATE`
- **Shell** — intercepte `curl | bash`, `sudo` non autorisé
- **DLP** — signale les clés AWS, les jetons GitHub, les clés Stripe, les clés privées PEM dans tout argument d'outil, contenu de fichier ou configuration shell (`~/.zshrc`, `~/.bashrc`)
- **DLP de réponse** — un analyseur en arrière-plan lit l'historique de conversation de Claude et vous alerte si Claude a _écrit_ un secret dans son texte de réponse
- **Épinglage des compétences** — vérification SHA-256 des compétences / plugins Claude installés entre les sessions

## Invites de révision — approuvez en ligne, dans votre agent

Lorsque node9 signale une action pour **révision** (par ex. `git push --force`, un `DROP TABLE`), l'invite d'approbation/refus s'affiche **en ligne dans la conversation de l'agent** — aucune session figée, aucun terminal séparé, aucune course contre le délai d'expiration du hook. node9 exécute toujours l'évaluateur complet et prend la décision ; seule la _surface_ de l'invite se déplace vers l'agent.

- **Activé par défaut** pour **Claude Code** et **GitHub Copilot CLI** — les agents dont le contrat de hook prend en charge un `ask` natif. Tous les autres agents (Codex, Gemini, Antigravity, Hermes, Cursor, OpenCode, Pi) utilisent l'approbateur propre à node9.
- **Contrôlez-le** avec `reviewChannel` dans `~/.node9/config.json` (ou `--no-ask` sur le hook) :```jsonc
{
  "settings": {
    "reviewChannel": "ask", // "ask" = inline agent prompt (default) | "approver" = node9's own approver
  },
}
```
- **Configurations d’équipe :** lorsqu’un approbateur cloud/équipe est configuré (`approvers.cloud: true`), les revues sont routées vers cet approbateur à la place — node9 ne laissera pas une auto-approbation en ligne contourner une approbation routée/de seconde partie.

## Sandbox — exécuter un agent dans une cage

Lorsque la surveillance ne suffit pas, **`node9 sandbox`** exécute l’agent dans un conteneur jetable avec une **liste blanche de sortie appliquée par le noyau** et des **montages limités** — tandis que les hooks de node9 gouvernent et auditent chaque appel d’outil _à l’intérieur_ de la boîte. La version dure de la protection : l’agent ne peut toucher que le dossier que vous montez et atteindre les hôtes que vous autorisez ; tout le reste est abandonné au niveau du noyau.```bash
cd ~/my-project
node9 sandbox new        # write node9.sandbox.yaml — what to mount + which hosts to allow
node9 sandbox run        # build + boot the jailed agent (your project at /workspace)
node9 sandbox tail       # watch the agent's actions live, from the host
```
- **Jetable** — le conteneur est détruit à la sortie ; vos modifications de projet atterrissent sur votre disque réel, rien d'autre ne survit.
- **Même politique** — vos règles de shields / egress / approbations existantes s'appliquent dans la boîte, diffusées vers le même journal d'audit et le même tableau de bord.
- **Ferme la boucle de posture** — son exécution fait passer les findings Isolation / Egress au vert.

Périmètre honnête (Phase 1) : conteneur unique, **Claude d'abord** (Codex ensuite) ; l'agent conserve toujours ses _propres_ identifiants dans la boîte (le mur egress les confine aux hôtes autorisés) — _"l'agent ne détient jamais de secret"_ est la phase de courtier d'identifiants sur la feuille de route. Nécessite Docker.

## Passerelle MCP

Enveloppez n'importe quel serveur MCP de manière transparente. L'agent voit le même serveur — Node9 intercepte chaque appel d'outil.```json
{
  "mcpServers": {
    "postgres": {
      "command": "node9",
      "args": ["mcp", "--upstream", "npx -y @modelcontextprotocol/server-postgres postgresql://..."]
    }
  }
}
```
Ou lancez simplement `node9 init` — il enveloppe automatiquement vos serveurs MCP existants.

<details>
<summary><strong>🔐 Épinglage des outils MCP — défense contre les retraits de tapis</strong></summary>

Les serveurs MCP peuvent modifier leurs définitions d'outils entre les sessions. Un serveur compromis ou malveillant pourrait silencieusement ajouter, supprimer ou modifier des outils après que vous lui ayez fait confiance initialement — une attaque par **retrait de tapis**.

Node9 épingle les définitions d'outils lors de la première utilisation :

1. **Première connexion** — la passerelle enregistre un hachage SHA-256 du nom, de la description et du schéma de chaque outil
2. **Connexions ultérieures** — le hachage est comparé ; si les outils ont changé, la session est **mise en quarantaine** et chaque appel d'outil est bloqué jusqu'à ce qu'un humain examine et approuve le changement
3. **État d'épingle corrompu** — échec en mode fermé (blocage), jamais de re-confiance silencieuse```bash
node9 mcp pin list                # show all pinned servers and hashes
node9 mcp pin update <serverKey>  # remove pin, re-pin on next connection
node9 mcp pin reset               # clear all pins
```
</details>

## Autres commandes

Au-delà des trois commandes de flux ci-dessus (`scan` / `monitor` / `report`) :

| Commande          | Ce qu'elle affiche                                             | Quand l'utiliser                             |
| ---------------- | --------------------------------------------------------- | --------------------------------------- |
| `node9 blast`    | Ce qu'un agent IA peut atteindre à l'instant — fichiers, identifiants, variables d'environnement | Première chose à exécuter sur toute machine       |
| `node9 tail`     | Flux en direct de chaque appel d'outil (texte uniquement, sans TUI)        | Pour rediriger vers d'autres outils, CI, journaux       |
| `node9 sessions` | Historique des sessions avec invite, trace d'outil et coût         | Pour examiner une passation ou un travail passé        |
| `node9 dlp`      | Résultats de fuite d'identifiants dans le texte de réponse de Claude          | À chaque fois qu'une alerte DLP du bureau se déclenche      |
| `node9 mask`     | Masquer les secrets en clair des fichiers d'historique de session locaux | Après un résultat DLP — nettoie le disque local |

Plus un **HUD en direct** dans la barre d'état de votre Claude Code :```
🛡 node9 | standard | [bash-safe] | ✅ 12 allowed  🛑 2 blocked  🚨 0 dlp | ~$0.43
📊 claude-opus-4-7 | ctx [████████░░░] 54% | 5h [██░░░░░░░░] 12% | 7d [█░░░░░░░] 7%
🗂 2 CLAUDE.md | 8 rules | 3 MCPs | 4 hooks
```
## Lecture des données — ce que signifient les chiffres

Node9 fait remonter le signal. Voici les schémas à connaître :

| Signal                                         | Signification probable                                                                             |
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| `Would have blocked` ≥ 5 en une semaine        | L'agent tente des opérations à fort impact ; les boucliers méritent d'être revus                   |
| Une seule règle `review-git-push` >50% des résultats | Votre propre règle se déclenche comme prévu — pas un risque, juste une supervision                 |
| Résultat DLP dans l'outil `user-prompt`        | Vous avez collé un secret dans votre propre invite — faites pivoter la clé                          |
| Boucle d'agent ×50+ sur le même fichier        | L'agent est bloqué dans un cycle édition/test/correction — vérifiez le contexte ou ralentissez     |
| Inadéquation de l'épingle d'outil MCP          | Le serveur a modifié ses outils — examinez avant de refaire confiance                              |
| Avertissement de réponse MCP volumineuse       | Ce serveur gonfle votre fenêtre de contexte à chaque tour suivant                                  |
| Alerte `Response DLP`                          | Claude a écrit un secret dans son texte de réponse — non bloqué, faites pivoter immédiatement      |
| Résultat DLP dans `tool-result`                | Claude a lu un fichier contenant un secret (`.env`, identifiants) — faites pivoter la clé et exécutez `node9 mask` |
| Résultat DLP dans `[Shell]`                    | Secret en clair dans `~/.zshrc` ou `~/.bashrc` — chaque session IA peut le voir                    |

Les signaux ponctuels sont normaux ; ce sont les schémas persistants sur lesquels vous agissez.

## SDK Python — gouvernez n'importe quel agent Python```python
from node9 import configure, protect

configure(agent_name="my-agent", policy="require_approval")

@protect("bash")
def run_command(cmd: str) -> str:
    ...
```
**[Python SDK →](https://github.com/node9-ai/node9-python)** · **[Exemple d'agent de revue de code CI →](https://github.com/node9-ai/node9-pr-agent)**

## Sous le capot

- **Scan** lit l'historique brut des agents depuis `~/.claude/projects/`, `~/.gemini/tmp/`, `~/.gemini/antigravity-*/brain/`, `~/.copilot/session-state/`, `~/.codex/sessions/` — aucun appel API, entièrement hors ligne
- **Runtime** intercepte les appels d'outils via des hooks de pré-exécution (Claude Code, Codex, Antigravity, GitHub Copilot CLI, Gemini CLI, Opencode, Pi) ou via la passerelle MCP (Cursor, Windsurf, VSCode, Claude Desktop). Toutes les décisions aboutissent dans `~/.node9/audit.log` de manière atomique.
- **Passerelle MCP** est un proxy stdio ; elle intercepte `tools/list` + `tools/call` JSON-RPC, et transmet le reste
- **Moteur de politiques** utilise [mvdan-sh](https://github.com/mvdan/sh) pour l'analyse AST bash — il neutralise l'obfuscation via l'échappement par antislash, la substitution de variables, l'évaluation de téléchargements distants
- **Sandbox** génère un Dockerfile + point d'entrée qui scellent un mur de sortie `ipset`/`iptables` refusant tout par défaut, puis bascule vers un agent non-root avec le démon et les hooks de node9 exécutés à l'intérieur ; seul le fichier d'identifiants de l'agent est monté, jamais tout votre `~/.claude`

## Documentation complète

Référence de configuration, règles intelligentes, règles avec état, hôtes de confiance, modes d'approbation, référence CLI — sur **[node9.ai/docs](https://node9.ai/docs)**.

## Projets associés

- **[node9-python](https://github.com/node9-ai/node9-python)** — SDK Python
- **[node9-pr-agent](https://github.com/node9-ai/node9-pr-agent)** — Action GitHub qui examine les PR via Node9

## Entreprise

**Node9 Pro** ajoute le verrouillage de gouvernance, SAML/SSO, l'export d'audit centralisé et le déploiement VPC. Voir [node9.ai](https://node9.ai).

## Licence

Apache-2.0

<p align="center">
  <sub>Conçu avec ☕ et une paranoïa saine.</sub>
</p>

Catégories