Communitygithub.com

mstfknn/sast-skills

Ensemble de compétences d'agent qui transforment votre codeur IA en scanner SAST

Qu'est-ce que sast-skills ?

La collection sast-skills transforme n'importe quel assistant de codage LLM (Claude Code, Codex, Opencode, Cursor, etc.) en un scanner SAST complet, sans configuration complexe. Elle fournit 31 compétences couvrant 28 classes de vulnérabilités, allant des injections (SQL, NoSQL, XSS, SSTI) aux failles de contrôle d'accès, crypto faible, problèmes de chaîne d'approvisionnement et risques spécifiques aux LLM (injection de prompts, traitement non sécurisé des sorties). L'orchestration se déroule en quatre phases — reconnaissance, détection parallèle, rapport consolidé et triage avec preuves — tous pilotés via un seul fichier `CLAUDE.md` ou `AGENTS.md`. Chaque phase est idempotente : seules les parties manquantes sont exécutées à chaque reprise. Les résultats sont produits en Markdown lisible par l'humain et en JSON canonique, exportables aux formats JSON, SARIF 2.1.0 ou HTML pour une intégration dans GitHub Code Scanning et les pipelines CI. L'installation se fait via `npx sast-skills install` ou manuellement par copie de fichiers, avec des commandes CLI pour la mise à jour, la désinstallation, le diagnostic et l'export.

Compatible avec✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/mstfknn/sast-skills/tree/main

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Aperçu

Depuis le README du skill

npm version
CI
License: MIT
Node.js

Documentation

Que fait sast-skills ?

npm version CI License: MIT Node.js

Transformez votre assistant de codage LLM en un scanner SAST complet. Compétences prêtes à l'emploi pour Claude Code, Codex, Opencode, Cursor, et tout assistant capable de charger les dossiers de compétences CLAUDE.md / AGENTS.md.

Claude Code avec Opus est recommandé pour la qualité ; tout modèle capable fonctionne.

Points forts

  • 31 compétences couvrant 28 classes de vulnérabilités — injection, contrôle d'accès défaillant, crypto faible, gestion des fichiers, chaîne d'approvisionnement, logique métier et risques spécifiques aux LLM (injection de prompts, traitement non sécurisé des sorties).
  • Orchestration en quatre phases — reconnaissance → détection parallèle → rapport consolidé → triage avec preuves, entièrement pilotée depuis CLAUDE.md / AGENTS.md.
  • Idempotent et reprenable — chaque phase ignore le travail dont la sortie existe déjà ; réexécutez après avoir corrigé des problèmes pour rafraîchir uniquement ce qui est obsolète.
  • Sortie lisible par machine — chaque compétence émet du JSON canonique ; sast-skills export agrège en JSON, SARIF 2.1.0 ou HTML pour GitHub Code Scanning et CI.
  • Multi-assistant — des compétences identiques sont fournies pour Claude Code (.claude/skills) et pour chaque assistant AGENTS.md (.agents/skills).
  • CLI zéro configuration — install / update / uninstall / doctor / export, publié depuis GitHub Actions avec provenance npm (attestation SLSA).

Flux

L'orchestrateur exécute quatre phases — reconnaissance, détection parallèle, synthèse et triage :

flowchart TD
    U(["Utilisateur : Lancer scan de vulnérabilités"]) --> R{"Orchestrateur CLAUDE.md / AGENTS.md"}
    R --> S1["Étape 1 — sast-analysis<br/>Carte du code source et de l'architecture"]
    S1 -->|sast/architecture.md| S2["Étape 2 — Scan parallèle de vulnérabilités<br/>28 compétences : reconnaissance, vérification par lots, fusion"]
    S2 -->|sast/*-results.md et *-results.json| S3["Étape 3 — sast-report<br/>Consolider et classer"]
    S3 -->|sast/final-report.md| S4["Étape 4 — sast-triage<br/>Élimination des faux positifs,<br/>ajustement de la sévérité avec preuves"]
    S4 -->|sast/final-report-triaged.md et triaged.json| EXP["npx sast-skills export<br/>JSON, SARIF, HTML"]
    EXP --> CS(["GitHub Code Scanning, CI, tableaux de bord"])

Chaque étape est idempotente : si son fichier de sortie existe déjà, l'orchestrateur l'ignore. Réexécutez le scan après avoir corrigé des problèmes pour rafraîchir uniquement ce qui est obsolète.


Ce qu'il détecte

Toutes les compétences suivent le même schéma en trois phases : reconnaissance → vérification par lots (sous-agents parallèles, 3 par lot) → fusion. Chacune écrit un rapport Markdown lisible par l'humain et un fichier JSON canonique des résultats que sast-skills export agrège.

Reconnaissance et Synthèse

CompétenceRôle
sast-analysisReconnaissance du code source, cartographie de l'architecture, modèle de menace
sast-reportConsolider les résultats par classe en un rapport classé
sast-triageSupprimer les faux positifs et ajuster les sévérités avec des preuves du code source

Injection

CompétenceClasse de vulnérabilité
sast-sqliInjection SQL
sast-nosqlInjection NoSQL (Mongo, Firestore, DynamoDB)
sast-ldapInjection de filtre LDAP / DN
sast-graphqlConstruction non sécurisée de documents GraphQL
sast-xssCross-Site Scripting
sast-sstiInjection de templates côté serveur
sast-rceExécution de code à distance (injection de commandes, eval, désérialisation non sécurisée)
sast-xxeEntité externe XML
sast-ssrfServer-Side Request Forgery
sast-openredirectRedirection ouverte (phishing / vol de jetons OAuth)

Contrôle d'accès et Auth

CompétenceClasse de vulnérabilité
sast-idorRéférence directe non sécurisée à un objet
sast-missingauthAuthentification manquante / autorisation au niveau des fonctions défaillante
sast-jwtImplémentations JWT non sécurisées
sast-csrfCross-Site Request Forgery
sast-corsMauvaise configuration CORS

Fichiers, crypto et runtime

CompétenceClasse de vulnérabilité
sast-pathtraversalTraversée de chemin / répertoire
sast-fileuploadTéléchargement de fichier non sécurisé
sast-cryptoPrimitives faibles, mauvais modes, réutilisation de IV, PRNG faible
sast-prototypePollution de prototype JavaScript
sast-redosDéni de service par expression régulière à retour arrière catastrophique
sast-raceConditions de concurrence et TOCTOU

Exposition des données et chaîne d'approvisionnement

CompétenceClasse de vulnérabilité
sast-hardcodedsecretsClés API / jetons / identifiants dans le code exposé au client
sast-piiFuite de PII et d'identifiants vers les logs / télémétrie / pages d'erreur
sast-depsDépendances avec des vulnérabilités connues (CVE dans les lockfiles)
sast-iacIaC non sécurisé (Dockerfile / Terraform / Kubernetes / GitHub Actions)

Logique métier et spécifique aux LLM

CompétenceClasse de vulnérabilité
sast-businesslogicManipulation de prix, contournement de flux, abus de récompenses
sast-promptinjectionTexte non fiable atteignant un prompt LLM (OWASP LLM #1)
sast-llmoutputSortie LLM non validée atteignant des terminaux code / HTML / SQL / shell (OWASP LLM #2)

Installation

npx sast-skills install

L'installateur demande quel assistant cibler (claude / agents / all) et s'il faut installer dans le projet actuel ou votre répertoire personnel (project / global). Pour ignorer les invites :

npx sast-skills install --yes --assistant claude --scope project

Si votre projet contient déjà un CLAUDE.md ou AGENTS.md, l'installateur refuse de l'écraser par défaut — sauvegardez-le ou passez --force.

Installation manuelle (sans npx / npm)

Utilisez ce chemin si vous ne pouvez pas exécuter npx (proxy d'entreprise, registre npm inaccessible, environnement hors ligne) ou si vous souhaitez vous épingler à la source de ce fork plutôt qu'au package npm publié. L'installateur CLI ne fait que deux choses — déposer le fichier d'entrée de l'orchestrateur à la racine du projet et copier chaque SKILL.md de compétence dans le bon répertoire caché — donc un simple cp -R le reproduit exactement.

1. Obtenir les fichiers groupés

git clone https://github.com/mstfknn/sast-skills.git

Tout ce dont vous avez besoin se trouve sous sast-skills/sast-files/ :

sast-files/
├── CLAUDE.md                       # Point d'entrée de l'orchestrateur pour Claude Code
├── AGENTS.md                       # Point d'entrée de l'orchestrateur pour Gemini CLI / Codex / OpenCode / Cursor
├── .claude/skills/sast-*/SKILL.md  # 31 compétences au format Claude Code
└── .agents/skills/sast-*/SKILL.md  # Mêmes 31 compétences reflétées pour les assistants AGENTS.md

Les deux arbres de compétences sont synchronisés par npm run sync — le contenu est identique, seul le nom du répertoire diffère.

2a. Installer pour Claude Code

Définissez SAST_SRC sur le chemin du clone pour que les commandes ci-dessous restent copiables :

export SAST_SRC=/chemin/absolu/vers/sast-skills
cd /chemin/vers/votre-projet

Portée projet (recommandée — versionnée avec votre dépôt) :

cp "$SAST_SRC/sast-files/CLAUDE.md" ./CLAUDE.md
cp -R "$SAST_SRC/sast-files/.claude" ./

Si vous utilisez déjà un CLAUDE.md au niveau du projet, ne l'écrasez pas — Claude Code ne lit qu'un seul CLAUDE.md par projet. Fusionnez plutôt le contenu de l'orchestrateur (le flux en quatre phases) dans votre fichier existant.

Portée globale (compétences disponibles dans chaque projet ; l'orchestrateur est toujours copié par projet) :

mkdir -p ~/.claude/skills
cp -R "$SAST_SRC/sast-files/.claude/skills/." ~/.claude/skills/
# Ensuite, dans tout projet où vous souhaitez le flux de scan :
cp "$SAST_SRC/sast-files/CLAUDE.md" /chemin/vers/votre-projet/CLAUDE.md

2b. Installer pour Gemini CLI (et autres assistants AGENTS.md)

export SAST_SRC=/chemin/absolu/vers/sast-skills
cd /chemin/vers/votre-projet
cp "$SAST_SRC/sast-files/AGENTS.md" ./AGENTS.md
cp -R "$SAST_SRC/sast-files/.agents" ./

AGENTS.md est la convention multi-assistant suivie par Gemini CLI, Codex CLI, OpenCode et Cursor. Si votre version de Gemini CLI cherche GEMINI.md à la place, renommez-le — le contenu est inchangé :

mv AGENTS.md GEMINI.md

3. Vérifier l'installation

# Portée projet (Claude Code)
ls CLAUDE.md && ls .claude/skills/ | head

# Portée projet (Gemini / AGENTS.md)
ls AGENTS.md && ls .agents/skills/ | head

# Portée globale (Claude Code)
ls ~/.claude/skills/ | head

Vous devriez voir les 31 répertoires de compétences sast-*. Ouvrez le projet dans votre assistant et demandez "Lancer un scan de vulnérabilités" — l'orchestrateur dans CLAUDE.md / AGENTS.md pilotera les quatre phases à partir de là.

4. Maintenir une installation manuelle à jour

cd "$SAST_SRC" && git pull
# Réexécutez les commandes cp de l'Étape 2a / 2b pour rafraîchir — elles sont idempotentes.

Si vous conservez le clone, cd "$SAST_SRC" && git pull && <réexécuter cp> est l'équivalent manuel de npx sast-skills update.

Commandes CLI

CommandeCe qu'elle fait
npx sast-skills installCopie CLAUDE.md / AGENTS.md et l'arbre de compétences dans votre projet ou $HOME
npx sast-skills updateRafraîchit une installation existante avec les fichiers de compétences actuellement groupés
npx sast-skills uninstallSupprime les compétences installées ; refuse de supprimer un CLAUDE.md modifié sans --force
npx sast-skills doctorVérifie une installation et rapporte OK / MANQUANT / MODIFIÉ par fichier ; sort avec un code non nul en cas de problème
npx sast-skills export --input sast/ --format sarif --output report.sarifAgrège les sast/*-results.json en JSON, SARIF 2.1.0 ou HTML
npx sast-skills export --input sast/ --triaged --format sarifPréfère le sast/triaged.json trié aux résultats bruts par compétence
npx sast-skills --versionAffiche la version CLI installée

Options d'installation

OptionObjectif
--yesNon interactif ; requis lorsque stdin n'est pas un TTY
--assistant <claude|agents|all>Quel arbre de compétences installer
--scope <project|global>Installer dans ./.claude/skills/ ou $HOME/.claude/skills/
--target <chemin>Cible d'installation explicite (remplace --scope)
--forceÉcraser un CLAUDE.md / AGENTS.md préexistant
--dry-runAffiche le plan de fichiers sans écrire

Exécuter un scan

Après l'installation, ouvrez le projet dans votre assistant IA et demandez :

Lancer un scan de vulnérabilités

ou

Trouver des vulnérabilités dans ce code source

L'orchestrateur prend le relais. Il exécute automatiquement les quatre phases, respecte l'idempotence (les réexécutions ne prennent que ce qui manque) et écrit tout dans sast/ à la racine de votre projet.

Fichiers de sortie

FichierDescription
sast/architecture.mdPile technologique, architecture, points d'entrée, flux de données
sast/*-results.mdRésultats par classe de vulnérabilité (lisibles par l'humain)
sast/*-results.jsonRésultats canoniques lisibles par machine (fournis à sast-skills export)
sast/final-report.mdRapport brut consolidé classé par sévérité
sast/final-report-triaged.mdRapport trié — faux positifs supprimés, sévérités ajustées avec preuves
sast/triaged.jsonRésultats triés canoniques (préférés par sast-skills export --triaged)

Schéma des résultats

Chaque compétence écrit sast/<skill>-results.json comme une liste brute de résultats :

{
  "findings": [
    {
      "id": "sast-sqli-0001",
      "skill": "sast-sqli",
      "severity": "critical|high|medium|low|info",
      "title": "Injection SQL dans /api/user",
      "description": "…",
      "location": { "file": "src/api/user.js", "line": 42, "column": 10 },
      "remediation": "…"
    }
  ]
}

sast-skills export agrège ces fichiers en un seul document enveloppé dans un objet run — { "run": { "tool": "sast-skills", "version": "<version-cli>" }, "findings": [...] } — en estampillant la version de la CLI qui a produit le rapport. L'étape de triage écrit sast/triaged.json dans cette même forme enveloppée.

Les résultats triés ajoutent triage_status (confirmed|upgraded|downgraded|false_positive), triage_original_severity (lorsque la sévérité a changé) et triage_evidence avec des citations concrètes du code source.


Intégrations CI

GitHub Code Scanning (SARIF)

Action composite dans .github/actions/scan/action.yml :

- uses: mstfknn/sast-skills/.github/actions/scan@main
  with:
    input: sast/
    output: sast-skills.sarif

Ceci exécute sast-skills export --format sarif et télécharge le résultat vers Code Scanning via github/codeql-action/upload-sarif@v3.

Hook Pre-commit

Copiez hooks/pre-commit dans .git/hooks/pre-commit pour que sast-skills doctor protège chaque commit.

Docker

docker build -t sast-skills .
docker run --rm -v "$PWD:/work" sast-skills export --input sast/ --format sarif --output report.sarif

Le Dockerfile fourni est basé sur node:20-alpine avec sast-skills comme point d'entrée.


Vérifier et dépanner

# L'installation est-elle dans la forme attendue ?
npx sast-skills doctor --target . --assistant claude

# Vérification de version
npx sast-skills --version
npm view sast-skills version    # dernière version sur le registre

# Mise à niveau
npx sast-skills update

doctor se termine avec 0 si chaque fichier groupé dans la cible correspond à la copie de la version installée, et 1 si un fichier est MANQUANT ou MODIFIÉ. MODIFIÉ signifie que le fichier a divergé de la copie groupée — attendu si vous modifiez le fichier d'entrée, sinon un signal pour exécuter update.


Contribuer

Voir CONTRIBUTING.md. Boucle de développement :

npm install
npm test                                  # suite vitest (protection TDD activée)
npm run sync                              # synchronise .claude/skills → .agents/skills
node scripts/scaffold-skill.js sast-foo   # crée une nouvelle compétence dans les deux arbres
node scripts/register-skill.js sast-foo foo "Foo" "Description de l'injection Foo"
npm run lint:md                           # markdownlint

(contenu tronqué pour la traduction)

Skills associés