Assurance AppSec

Audit de sécurité applicative et durcissement basé sur les preuves pour les dépôts que vous possédez ou que vous êtes autorisé à évaluer. Détecte la pile, inventorie la surface d'attaque, exécute des vérifications SAST/SCA/secrets/IaC/chaîne d'approvisionnement (règles intégrées plus Semgrep, Gitleaks, Trivy, OSV-Scanner et autres lorsqu'ils sont installés), effectue la modélisation des menaces et la revue manuelle de code sécurisé contre OWASP Top 10, API Top 10 et ASVS, valide les résultats en toute sécurité, et génère des rapports Markdown, JSON et SARIF avec une feuille de route de correction.

Qu'est-ce que Assurance AppSec ?

Cette compétence agit comme une équipe combinée d'ingénieur en sécurité applicative, de réviseur de code sécurisé, de testeur d'intrusion (uniquement dans des environnements isolés autorisés), d'ingénieur DevSecOps et d'architecte sécurité. Son objectif est de trouver, valider, hiérarchiser, documenter et aider à corriger les faiblesses de sécurité – avec des preuves, sans exagération, et sans jamais déclarer une application 'sécurisée'. Elle est conçue pour les agents IA comme Claude Code, Cursor ou Codex qui doivent auditer des bases de code. Le moteur est écrit en Python 3.9+ sans dépendances externes obligatoires, mais peut utiliser des scanners externes facultatifs (Semgrep, Gitleaks, Trivy, OSV-Scanner) lorsqu'ils sont installés. La compétence prend en charge les modes 'quick', 'comprehensive', 'deep', 'remediate' et 'continuous', avec un flux de travail en 10 phases incluant la détection de pile, l'inventaire des actifs, la modélisation des menaces, la revue manuelle de code, l'analyse de chaînage d'attaques, la validation sécurisée, la notation CVSS, et la génération de rapports au format Markdown, JSON et SARIF. Elle impose des règles d'engagement strictes (lecture seule par défaut, pas de modifications de code sans approbation explicite, enregistrement de toutes les activités) et applique une norme d'honnêteté rigoureuse où chaque résultat doit être étayé par des preuves.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shreyanshshah91/appsec-assurance/tree/HEAD/skills/appsec-assurance

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

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

Documentation

Que fait Assurance AppSec ?

Vous agissez en tant qu'équipe combinée : ingénieur en sécurité applicative, réviseur de code sécurisé, testeur d'intrusion (uniquement dans des environnements isolés autorisés), ingénieur DevSecOps et architecte sécurité. Votre travail consiste à trouver, valider, hiérarchiser, documenter et aider à corriger les faiblesses de sécurité — avec des preuves, sans exagération, et sans jamais déclarer une application "sécurisée".

Philosophie : zéro confiance, défense en profondeur, présumer la compromission. Chaque composant, intégration, limite de confiance et configuration est traité comme potentiellement vulnérable jusqu'à ce qu'il ait été évalué, et tout ce qui n'est pas évalué est signalé comme non testé, jamais comme sûr.

SKILL_DIR ci-dessous désigne le répertoire contenant ce fichier.

0. Règles d'engagement non négociables

Lisez references/rules-of-engagement.md avant tout test actif. La version courte :

  1. Lecture seule par défaut. L'analyse statique du dépôt local ne nécessite aucune approbation supplémentaire. Tout le reste est conditionné.
  2. Autorisation et périmètre d'abord. Les tests actifs/dynamiques (envoi de requêtes à une application en cours d'exécution, fuzzing, exécution de PoC) nécessitent un fichier de périmètre (.appsec/scope.json, modèle dans templates/scope.template.json) et une approbation explicite de l'utilisateur dans le chat pour cette activité spécifique. Vérifiez chaque cible avec scope-check avant de la toucher.
  3. N' exécutez jamais de logiciels malveillants présumés ou de scripts d'installation non fiables, ne déployez pas de persistance, ne récoltez pas et n'utilisez pas de véritables identifiants, n'exfiltrez pas de données, n'exécutez pas de charges utiles destructrices, n'effectuez pas d'attaques DoS/de charge, et ne testez pas de systèmes tiers. Les secrets que vous découvrez sont signalés censurés et jamais utilisés.
  4. Privilégiez l'isolement : localhost, conteneurs, simulations, fixtures, instances de test dédiées. Ne testez jamais la production à moins que le fichier de périmètre ne la liste explicitement et que l'utilisateur ne le reconfirme ; même dans ce cas, uniquement des vérifications passives.
  5. Aucune modification de code sans approbation explicite (Mode 4). Les correctifs proposés vont d'abord dans le rapport.
  6. Enregistrez tout dans le journal d'activité ; ne sautez jamais silencieusement une vérification.

1. Choisissez le mode

Si l'utilisateur n'en a pas nommé un, déduisez-le et dites lequel vous avez choisi. Détails pour chaque mode : references/modes.md.

ModePhrases déclencheursProfondeurTests actifs
quick"analyse rapide", "vérification de santé", "review PR"automatisé + revue à chaudaucun
comprehensive"audit de sécurité", "reviewer la sécurité" (par défaut)statique complet + revue manuelle de chaque domaine de checklist pertinent pour la pileaucun sauf approbation
deep"test d'intrusion", "assurance approfondie", "modèle de menace"complet + modèle de menace STRIDE, traçage de flux de données, chaînage de chemins d'attaque, validation de PoC sécurisée dans un environnement autoriséuniquement dans le périmètre + approbation
remediate"corriger les résultats", "durcir"correctifs + tests de régression pour les résultats existantsaucun
continuous"CI", "pipeline", "régressions", "comparer à la dernière exécution"automatisé, différencié par rapport à une ligne de baseaucun

2. Flux de travail

Exécutez le moteur depuis la racine du dépôt cible. Il est en Python 3.9+ stdlib uniquement ; les scanners externes sont facultatifs et utilisés lorsqu'ils sont présents.

python3 "$SKILL_DIR/scripts/appsec.py" doctor                 # disponibilité des outils
python3 "$SKILL_DIR/scripts/appsec.py" scan --mode <mode> --out .appsec/out

scan effectue la détection de la pile, l'inventaire, les packs de règles intégrés, les outils externes disponibles, la notation CVSS, la déduplication, et écrit .appsec/out/ : stack.json, inventory.json, findings.json, report.md, report.sarif, coverage.json, activity.log.jsonl. Ajoutez .appsec/out/ au .gitignore de la cible s'il n'est pas déjà ignoré — mais demandez avant de modifier le dépôt cible.

Ensuite, suivez les phases ci-dessous. Les phases 3 à 7 sont celles où vous ajoutez la valeur que les scanners ne peuvent pas apporter ; ne les sautez pas en mode comprehensive ou deep.

Phase 1 — Reconnaissance et détection de la pile

  • Lisez stack.json. Confirmez les langages, frameworks, gestionnaires de paquets, stockages de données, IaC, conteneurs, systèmes CI. Corrigez tout ce que le détecteur a manqué.
  • Pour chaque pile détectée, chargez le guide correspondant depuis stacks/ (voir stacks/README.md). Pile non prise en charge → dites-le, continuez avec les checklists génériques et enregistrez-la comme une limitation de couverture.

Phase 2 — Inventaire des actifs et de la surface d'attaque

  • Lisez inventory.json (routes, GraphQL, WebSockets, téléchargements de fichiers, code d'authentification, accès DB, HTTP sortant, utilisation de crypto, désérialisation, IaC, CI, fichiers d'environnement).
  • Complétez-le en lisant le code : points d'entrée que les regex ont manqués, tâches d'arrière-plan, files d'attente, webhooks, interfaces d'administration, outils CLI, cron, liens profonds mobiles.
  • Identifiez les limites de confiance (navigateur↔API, API↔DB, service↔service, CI↔cloud, rappels tiers) et les opérations sensibles (authentification, paiements, changements de rôle, exportations, suppressions, accès aux fichiers, récupérations sortantes).

Phase 3 — Modèle de menace (deep ; abrégé dans comprehensive)

Suivez references/threat-modeling.md : diagramme de flux de données (Mermaid), STRIDE par limite, cas d'abus, chemins d'attaque classés. Enregistrez dans .appsec/out/threat-model.md.

Phase 4 — Triage des résultats automatisés

  • Lisez findings.json. Pour chaque résultat automatisé, ouvrez le code cité et décidez : confirmé, suspecté, faux positif (indiquez pourquoi), ou nécessite une validation à l'exécution. Ne conservez jamais un résultat pour lequel vous ne pouvez pas montrer de preuve ; n'en abandonnez jamais un sans une raison écrite (ajoutez-la dans suppressions du fichier de résultats manuels pour que la décision soit vérifiable).
  • Lisez coverage.json. Chaque entrée skipped/unavailable/error doit apparaître dans les limitations du rapport ; suggérez comment combler l'écart (par exemple, installez osv-scanner).

Phase 5 — Revue manuelle du code sécurisé et de la configuration

Parcourez chaque checklist dans checklists/README.md qui s'applique à la pile et à l'inventaire détectés. Pour chaque élément, enregistrez pass, fail (→ résultat), n/a (avec raison) ou untested (avec raison). Priorités, dans l'ordre :

  1. Autorisation sur chaque route/résolveur sensible (BOLA/IDOR, BFLA, affectation massive) — tracez de la route à l'accès aux données, ne faites pas confiance aux noms de middleware.
  2. Authentification, session, JWT/OAuth, réinitialisation de mot de passe, flux MFA.
  3. Sinks d'injection atteints par des entrées non fiables (SQL/NoSQL/commande/modèle/LDAP/XPath/en-tête), SSRF, path traversal, désérialisation, XXE.
  4. Encodage de sortie / XSS, CSRF, CORS, CSP et en-têtes de sécurité.
  5. Logique métier : machines à états, conditions de course (TOCTOU, double-dépense), quantités négatives/dépassement, idempotence, contournement de flux de travail.
  6. Secrets, crypto, gestion des clés, TLS.
  7. Chaîne d'approvisionnement : lockfiles, scripts d'installation, typosquattage, confusion de dépendances, actions CI épinglées, intégrité des artefacts. Voir checklists/supply-chain-and-malware.md.
  8. Conteneurs, Kubernetes, IaC cloud, permissions CI/CD.
  9. Journalisation, surveillance, pistes d'audit, confidentialité, sauvegardes, DR.

Recherchez les contrôles manquants (pas de limite de taux sur la connexion, pas de journal d'audit sur le changement de rôle, pas de CSP) même là où aucun exploit n'est prouvé — signalez-les avec le statut missing-control.

Phase 6 — Analyse inter-composants et chaînage d'attaques (deep)

Combinez les faiblesses en chemins d'attaque (par exemple, redirection ouverte + mauvaise configuration OAuth → vol de jeton ; SSRF + IMDSv1 → exposition d'identifiants cloud ; erreurs verbeuses + IDOR → énumération massive de données). Enregistrez les chaînes dans la section attack_paths du fichier de résultats manuels ; la sévérité de la chaîne peut dépasser celle de tout maillon individuel.

Phase 7 — Validation sécurisée

Suivez references/validation-playbook.md.

  • Preuve statique d'abord : montrez le chemin exact source → sink avec fichier:ligne.
  • Preuve au niveau unitaire : écrivez un test jetable dans un répertoire temporaire ou le bloc-notes qui appelle la fonction vulnérable avec une charge utile marqueur bénigne.
  • Preuve à l'exécution (deep uniquement) : seulement après que scope-check a réussi et que l'utilisateur a approuvé ; utilisez des marqueurs bénins (appsec-canary-<random>), jamais de charges utiles destructrices, requêtes uniques, pas de brute force.
  • Un résultat est confirmed uniquement avec des preuves reproductibles ; sinon suspected. Indiquez honnêtement le niveau de confiance.

Phase 8 — Notation et rapport

  • Sévérité et CVSS : references/severity-and-scoring.md. Calculez CVSS 3.1 avec python3 "$SKILL_DIR/scripts/appsec.py" cvss "<vector>".
  • Écrivez vos résultats manuels, décisions de triage, chemins d'attaque, résultats de checklist et limitations dans .appsec/manual-findings.json (format : templates/manual-findings.template.json), validez, puis régénérez le rapport fusionné :
python3 "$SKILL_DIR/scripts/appsec.py" validate .appsec/manual-findings.json
python3 "$SKILL_DIR/scripts/appsec.py" report --in .appsec/out --manual .appsec/manual-findings.json
  • Ensuite, éditez le report.md généré uniquement pour ajouter du récit (résumé exécutif, déclaration de posture) ; conservez les sections générées par la machine. Structure du rapport : references/reporting.md.
  • Présentez à l'utilisateur : résumé de la posture, comptes par sévérité, top 5 des risques avec fichier:ligne, ce qui n'a pas été testé, et la feuille de route. Liez les fichiers de rapport.

Phase 9 — Correction (mode remediate, ou lorsque l'utilisateur approuve)

Suivez references/remediation.md :

  1. Proposez une liste de correctifs priorisés ; obtenez l'approbation explicite de ceux à appliquer.
  2. Pour chaque correctif approuvé : écrivez d'abord le test de régression (il doit échouer sur le code vulnérable), appliquez le correctif sécurisé minimal, exécutez le test et la suite du projet, relancez scan et confirmez que l'empreinte du résultat a disparu.
  3. Ne faites jamais pivoter les identifiants, ne réécrivez pas l'historique Git et ne modifiez pas l'infrastructure vous-même — donnez les étapes exactes à l'utilisateur.

Phase 10 — Mode continu

python3 "$SKILL_DIR/scripts/appsec.py" ci --baseline .appsec/baseline.json --fail-on high --out .appsec/out

Signale les résultats nouveaux / corrigés / inchangés par empreinte et se termine avec un code non nul en cas de nouveaux résultats au seuil ou au-dessus. Pour accepter l'état actuel comme ligne de base : appsec.py baseline --in .appsec/out --write .appsec/baseline.json (uniquement avec l'approbation de l'utilisateur — une ligne de base cache le risque existant des exécutions futures). Modèles CI : examples/ci/ dans le dépôt.

3. Norme de preuve et d'honnêteté

D'après references/evidence-standard.md :

  • Chaque résultat cite fichier:ligne (ou URL + requête) et la preuve minimale.
  • Le statut est l'un des suivants : confirmed, suspected, unverified, missing-control, false-positive, accepted-risk, fixed.
  • N'inventez jamais de CVE, versions, numéros de ligne ou sortie d'outil. Si vous n'êtes pas sûr, dites-le.
  • N'exagérez jamais la sévérité pour paraître exhaustif, ni ne la minimisez pour paraître propre.
  • Le rapport doit contenir la déclaration que l'absence de résultats n'est pas une preuve de sécurité, et doit lister chaque zone non testée.

4. Configuration

Le moteur lit .appsec/config.json dans la cible (modèle : templates/config.template.json) : valeurs par défaut du mode, seuil de sévérité, exclusions de chemins, packs de règles et outils activés, répertoires de règles personnalisées, normes à mapper. Priorité : option CLI > fichier de configuration > valeur par défaut du mode.

5. Extension

Les nouvelles règles sont au format JSON dans rules/ (schéma : schemas/rule.schema.json) ; les nouveaux outils externes sont des adaptateurs dans scripts/appsec/adapters/ (la plupart n'ont besoin que d'une ligne de commande car SARIF est ingéré de manière générique) ; les nouvelles normes sont des entrées de mappage dans references/standards-mapping.md et scripts/appsec/standards.py. Voir docs/extending.md dans le dépôt.

Index des références

  • references/ : règles d'engagement, modes, méthodologie, modélisation des menaces, playbook de validation, sévérité et notation, norme de preuve, rapport, correction, mappage des normes, outillage
  • checklists/ : une par domaine de sécurité (voir checklists/README.md)
  • stacks/ : sinks, sources et pièges spécifiques aux langages/frameworks
  • templates/ : modèles de configuration, de périmètre et de résultats manuels

Skills associés