Resources
Simulator Journal Glossary Extensions Trust Service status ContactChange language
Ce que nous protégeons, contre qui, comment, et ce que nous ne protégeons pas. Mieux vaut un périmètre nommé que des promesses cachées.
Version v1.0 · révisée le 16/06/2026 · révisée à chaque release majeure.
Méthodologie : STRIDE (Spoofing / Tampering / Repudiation / Information disclosure / Denial of service / Elevation of privilege) appliquée à cinq surfaces du produit. Chaque ligne : menace → mitigation Aegirex → trade-off assumé.
Document destiné aux RSSI, auditeurs et chercheurs en sécurité. Le code source AGPL est public sur github.com/aegirex/server. Les runbooks opérationnels détaillés restent réservés aux design partners sous NDA.
Les neuf profils d'attaquant pris en compte dans le modèle.
| Acteur | Description | Capacités |
|---|---|---|
| Attaquant externe | Internet, aucun accès initial | Force brute, phishing, exploits web, MITM réseau |
| Utilisateur phishé | Utilisateur cible d'un site clone | Soumet ses credentials à un domaine attaquant |
| Co-locataire malveillant | Utilisateur d'une autre organisation Aegirex | Tente de lire les secrets d'organisations voisines |
| Navigateur compromis | Navigateur infecté par malware ou extension malveillante | Accès au DOM, peut lire les champs de saisie |
| Administrateur serveur | Opérateur d'infrastructure avec accès SSH au serveur | Lit la base de données, lit la mémoire, modifie le code |
| Exfiltration de base de données | Backup volé, dump SQL fuité | Snapshot complet de la base de données |
| Autorité judiciaire | Réquisition légale, mandat administratif | Force l'hébergeur à fournir les données stockées |
| Insider Aegirex | Salarié ou prestataire futur de la EI | Revue de code, accès déploiement, lecture des logs |
| Adversaire quantique | Ordinateur quantique opérationnel (horizon > 2030) | Casse RSA / ECC en temps polynomial (Shor) |
Classification des données et niveau de protection au repos.
| Donnée | Sensibilité | Stockage |
|---|---|---|
| Mot de passe maître utilisateur | Critique | Hash Argon2id uniquement (RFC 9106) |
| Contenu des secrets (payload) | Critique | Chiffré de bout en bout (OpenPGP), serveur stocke un blob opaque |
| Clé privée OpenPGP utilisateur | Critique | Jamais sur le serveur. Stockée localement, protégée par passphrase utilisateur |
| Secrets TOTP au repos | Critique | Chiffrés XChaCha20-Poly1305 (clé hors base de données) |
| Secrets webhook au repos | Critique | Chiffrés XChaCha20-Poly1305 (clé hors base de données) |
| Noms de secrets et de dossiers | Modérée | En clair côté serveur. Trade-off documenté §5.1 |
| Journal d'audit | Élevée | Chaîne HMAC-SHA-256, tamper-evidence en O(1) |
| Menace | Mitigation | Statut |
|---|---|---|
| Force brute sur le mot de passe | Rate limiter 5 tentatives / 15 min par IP + Argon2id (256 MiB, 5 passes) ≈ 1 s par tentative locale | Livré |
| Credential stuffing | Même rate limiter + scan HIBP opt-in après login (consentement RGPD explicite) | Livré |
| Bypass 2FA | TOTP RFC 6238 avec issuer pinning + codes de récupération à usage unique + WebAuthn PRF | Livré |
| XSS stocké ou réfléchi | CSP stricte (script-src 'self' 'wasm-unsafe-eval'), Trusted Types activés, échappement automatique Twig | Livré |
| Compromission de la dépendance OpenPGP.js | Bibliothèque vendorée avec empreinte SHA-256 vérifiée au build (manifeste d'intégrité SRI) | Livré |
| Phishing du mot de passe maître | Mitigation forte à venir : passkeys WebAuthn PRF, qui suppriment la transmission du mot de passe et sont liées au domaine d'origine par le navigateur. En attendant : formation utilisateur + indicateurs UI. | À venir |
| Menace | Mitigation | Statut |
|---|---|---|
| Dump de la base de données volé | Payload chiffré OpenPGP E2E illisible sans la clé privée utilisateur. Mots de passe en hash Argon2id non récupérables | Livré |
| Backup volé | Backups chiffrés (Argon2id + ChaCha20-Poly1305), multi-destinataires. Test de restauration automatisé en CI | Livré |
| Administrateur serveur lit le contenu d'un secret | Impossible sans la clé privée utilisateur. Le serveur ne stocke que des blobs opaques | Livré |
| Altération du journal d'audit (tampering) | Chaîne HMAC-SHA-256, détection en O(1) à la vérification. Détail de la chaîne | Livré |
| Menace | Mitigation | Statut |
|---|---|---|
| Fuite de données cross-organisation | Chaque jeton API lié à une organisation unique. Filtrage systématique à chaque endpoint. Tests d'isolation explicites en CI à chaque commit | Livré |
| Vol de jeton API | Jeton hashé Argon2id en base. Rotation libre par l'utilisateur. Scope minimal (lecture / écriture) configurable | Livré |
| Déni de service applicatif | Rate limiter par jeton et par IP (cadre Symfony) | Livré |
| Menace | Mitigation | Statut |
|---|---|---|
| Compromission du pipeline de build | Vérification d'empreinte SHA-256 des dépendances chaînée au build. SBOM signé planifié | Livré |
| Fermeture du popup = perte temporaire d'accès | Trade-off de la première version : la clé privée n'est pas persistée pour limiter la surface d'attaque. À venir : auto-lock paramétrable + persistance via service worker contrôlé. | À venir |
| Capture de credentials sur un site phishant | L'utilisateur voit le nom de domaine réel dans la pop-up de l'extension avant de cliquer sur « Enregistrer » | Livré |
| Menace | Mitigation | Statut |
|---|---|---|
| Image Docker compromise | Scan de vulnérabilités automatisé en CI. Signature Sigstore planifiée pour vérification utilisateur côté déploiement | En cours |
| Backup non testé | Test de restauration automatisé en CI sur chaque release. Pas de backup non vérifié en production | Livré |
| mTLS en production | Activable par configuration. Modes audit (logs seuls) puis enforcement disponibles | Livré |
Honnêteté éditoriale : voici les surfaces que Aegirex ne couvre pas seul, et la mitigation recommandée.
| Limite | Pourquoi | Mitigation recommandée |
|---|---|---|
| Compromission complète du poste de l'utilisateur | Un malware ayant accès à la RAM du navigateur peut lire la clé privée déchiffrée | Passkey hardware (YubiKey, TPM) qui confine la clé dans un élément sécurisé |
| Compromission du serveur Aegirex (root) | Un attaquant root peut lire les sessions HTTP actives | Les secrets stockés restent illisibles (zero-knowledge). Seules les sessions ouvertes au moment de la compromission sont à risque. Auto-lock court recommandé |
| Perte du mot de passe maître | Conséquence directe du zero-knowledge strict : aucun moyen côté serveur de récupérer la clé | Codes de récupération imprimés à la création. À venir : partage Shamir M-sur-N pour les plans Enterprise |
| Adversaire quantique (horizon > 2030) | OpenPGP v6 + AES-256 sont estimés sûrs 5 à 10 ans selon le RGS ANSSI 2024 | Migration post-quantique (ML-KEM, ML-DSA) en évaluation à long terme |
| Attaque physique sur le poste utilisateur | Aegirex est un coffre-fort logique, pas un coffre physique | Auto-lock court du coffre + passkey WebAuthn matérielle |
| Insider Aegirex (salarié futur) | Limite assumée du modèle de confiance d'éditeur SaaS | NDA, séparation des responsabilités, revue de code obligatoire, chaîne d'audit tamper-evidente, principe du moindre privilège |
Choix : noms stockés en clair côté serveur.
Pourquoi : recherche côté serveur instantanée, affichage de l'arborescence sans déchiffrement à chaque navigation, partage hiérarchique de dossiers possible.
Impact : un attaquant qui exfiltre la base de données voit qu'un secret nommé « AWS Prod » existe dans le dossier « DevOps / Cloud ». Il NE voit PAS le contenu (payload chiffré E2E).
Alternative envisagée : option « anonymise me » qui chiffre aussi les noms. Coût UX significatif : pas de recherche côté serveur, scan client complet à chaque requête.
Choix : OpenPGP chiffre le payload après que l'utilisateur ait tapé son mot de passe.
Pourquoi : pas d'alternative - le navigateur doit voir le clair pour permettre à l'utilisateur de le saisir.
Mitigations : Trusted Types CSP empêche le DOM XSS d'injecter du JavaScript exfiltrant. À venir : passkeys WebAuthn qui suppriment totalement la transmission de mots de passe.
Choix : pas de récupération si l'utilisateur perd à la fois son mot de passe maître ET ses codes de récupération.
Pourquoi : zero-knowledge strict. Si nous pouvions récupérer, il y aurait un chemin de déchiffrement côté serveur.
Mitigation à venir : partage Shamir de la clé privée (M-sur-N parts), une part chez Aegirex avec garde-fous procéduraux (déblocage uniquement avec présence de N-1 autres parts validée par l'utilisateur). Réservé aux plans Enterprise.
| Niveau | Déclencheur | Action |
|---|---|---|
| L1 Suspicion | Anomalie dans le journal d'audit, signalement utilisateur | Investigation interne sous 24 h, vérification chaîne d'audit |
| L2 Compromission confirmée | Compromission technique confirmée par l'investigation | Notification utilisateurs sous 72 h (RGPD Art. 33), rotation des clés impactées, mise en place de mitigations |
| L3 Compromission majeure | Base de données ou code source compromis | Notification CNIL et ANSSI, transparency report public, audit forensique externe |
Divulgation responsable : conformément à la RFC 9116,
un fichier /.well-known/security.txt
à la racine du site indique notre adresse de contact
security@aegirex.eu.
Délai d'accusé de réception : 72 h.
Ce threat model est un document vivant. Si vous êtes RSSI, auditeur ou chercheur en sécurité et qu'une menace est mal modélisée, contactez-nous directement.