Page:
Security-Model
Clone
1
Security-Model
Augustin ROUX edited this page 2026-04-27 08:46:46 +00:00
Modèle de menace & posture sécurité
Muyue est un outil local : il tourne sur la machine de l'utilisateur (TUI ou serveur HTTP local pour l'UI web). Le modèle de menace ci-dessous décrit ce qui est protégé et ce qui ne l'est pas.
Posture par défaut
- Le serveur HTTP écoute sur
127.0.0.1. Pas d'authentification (l'accès suppose qu'on a déjà la session locale de l'utilisateur). - Toutes les communications avec les fournisseurs AI passent par TLS (HTTPS) ; les clés API sont chiffrées au repos (
internal/secret, AES-GCM avec clé dérivée du système).
Risques pris en compte (et mitigations v0.6.0)
| Vecteur | Mitigation |
|---|---|
| Site web malveillant ouvert dans le browser tente d'appeler l'API locale (CSRF) | CORS restreint à localhost/127.0.0.1/[::1] (HTTP+HTTPS) ; PR-only dispositif |
Fuite de clé API via GET /api/providers |
Champ api_key masqué "***" dans toutes les réponses ; les saves ignorent "***" |
Fuite de mot de passe SSH via GET /api/terminal/sessions |
Champ password masqué "***" ; updates avec "***" préservent le mot de passe stocké |
sshpass exposant le mot de passe dans ps (argv) |
Utilisation exclusive de sshpass -e + variable d'env SSHPASS |
Path traversal via project_dir (LSP auto-install) |
filepath.Abs + check préfixe ~ ; refus sinon |
Path traversal via id d'image (GET /api/images/{id}) |
filepath.Base(id) neutralise les segments .. |
Injection de commande dans WSL (wsl -d <distro> -u <user>) |
wsl_distro et wsl_user validés ^[a-zA-Z0-9._-]+$ avant argv |
DoS par body géant sur /api/chat |
MaxBytesReader 50 MB ; chaque image ≤ 10 MB |
Crash AI provider renvoyant Choices == [] |
Bornage explicite, retour d'erreur propre (pas de panic) |
Race condition sur conversation_multi.Add |
Save synchrone sous le lock existant (plus de fire-and-forget) |
| Workflow infini si dépendance échoue | Court-circuit sur StatusFailed / StatusSkipped |
| Sudo invoqué sans mot de passe disponible | Détection NeedsSudoPassword + interception préfixe sudo/doas/run0/pkexec ; message clair à l'utilisateur |
Risques non couverts
- Utilisateur local malveillant sur la machine : rien ne sépare Muyue d'un autre processus de l'utilisateur. Les clés chiffrées au repos sont déchiffrables par tout processus de l'utilisateur (la clé maîtresse vit dans son scope).
- Compromission du provider AI : un provider AI qui retourne du HTML/JS est rendu dans Studio via
dangerouslySetInnerHTML(formatText fait un nettoyage best-effort mais incomplet). Pour un threat model durci, il faudrait ajouterDOMPurify. - Attaque sur Crush/Claude délégués :
crush_run/claude_runexécutent des binaires tiers ; leurs vulnérabilités ne sont pas dans le scope de Muyue.
Changelog sécurité — v0.6.0
Voir le CHANGELOG section v0.6.0.
Reporting
Une vulnérabilité ? Ouvrir un ticket privé sur Gitea ou écrire à muyue@legion-muyue.fr.