aeon-skill-security-scan
Les skills indiquent aux agents ce qu'il faut faire. Un skill malveillant ou bâclé peut faire de l'injection de shell, exfiltrer des secrets, contourner les instructions ou exécuter des commandes destructrices. Ce skill scanne tous les SKILL.md installés et les scripts associés et met en évidence les risques avant qu'ils ne s'exécutent.
Scope
<skills-dir>/*/SKILL.md— primaire.<skills-dir>/*/scripts/*.shet*.py— scripts compagnons.<skills-dir>/*/references/*— documents chargés à l'exécution.
Le <skills-dir> par défaut est le répertoire de travail courant.
Patterns de menace
| Catégorie | À quoi ça ressemble |
|---|---|
| Injection de shell | Expansion de variable sans guillemets, eval, backticks, $(...) avec données utilisateur. |
| Exfiltration de secrets | Variables d'environnement ou contenus de fichiers envoyés par HTTP. |
| Traversée de répertoires | Chaînes ../.., chemins absolus sortant du répertoire du skill. |
| Contournement d'instruction | « Ignore les instructions précédentes », changements de persona, instructions dans du contenu récupéré. |
| Commandes destructrices | Suppressions récursives depuis / ou ~, écritures sur périphérique. |
| Obfuscation | U+200B / U+FEFF / U+202E (Trojan Source), base64-decode-into-shell, hosts SSRF (ngrok, interact.sh, webhook.site, pipedream). |
Traitement
- Le scanner de patterns produit des correspondances
{file, line, pattern, severity}. - Rétrogradation de bloc de code — les correspondances à l'intérieur de blocs délimités baissent d'un niveau. Les vrais blocs
run:ne sont jamais rétrogradés. - Suppression de baseline — supprime les tuples (file, pattern, line) dans
scan-baseline.yml. - Filtre d'éditeur de confiance — les entrées dans
trusted-publishers.txtne reçoivent qu'une validation de format. Opt-in uniquement. - Delta par rapport à
scan-state.json— empreinte parsha256(file + line_content + pattern). Classe en NEW / RESOLVED / PERSISTENT.
Correction par découverte
| Pattern | Correction |
|---|---|
eval / backticks / $(...) avec variable |
Citer la variable ; remplacer eval par une fonction. |
curl avec secret dans l'URL |
Déplacer le secret dans un script de prefetch ; jamais interpoler dans le shell. |
| Traversée de répertoires | Validation par allow-list ; rejeter les chemins absolus. |
| Formulation de contournement d'instruction | Documentation → suppression de baseline ; payload → supprimer le skill. |
Suppression récursive depuis / ou ~ |
Limiter au répertoire de travail du skill lui-même. |
| Obfuscation | Supprimer sauf documentation et review. |
Sortie
Verdict CLEAN / ATTENTION / DEGRADED. Section needs-attention par NEW HIGH avec correction en une ligne. Section resolved-since-last-scan. Par skill PASS / WARN / FAIL.
Écrite seulement quand NEW, RESOLVED, ou un HIGH actuel quelconque.
Règles
- N'auto-supprime jamais une suppression de baseline.
- N'édite jamais la bibliothèque de patterns depuis le skill.
- Ne notifie jamais sur une semaine pure no-op.
- Scanning en lecture seule.