🎯 Test red team — règles d'engagement
MySelf-Lab est une vitrine volontairement exposée à l'attaque. Inversion d'OWASP Juice Shop : ici l'application est protégée par l'écosystème MySelf (SelfRecover, SelfDataGuard, SelfModerate) et l'objectif est de prouver — ou de mettre en défaut — cette protection en conditions réelles. Toute personne respectant les règles ci-dessous est autorisée à mener ses recherches.
📊 Le lab en chiffres
23jours en ligne
1tentatives d'authentification repoussées
1rapports reçus
0flag capturé
Agrégé depuis les données déjà collectées par le lab — aucune mesure d'audience, aucun cookie de suivi, aucune adresse conservée.
📍 Périmètre
✅ Dans le périmètre
- L'application web MySelf-Lab (ce site) et tous ses chemins
- L'authentification SelfRecover (inscription, connexion, récupération)
- Les messages privés et profils chiffrés SelfDataGuard
- La réputation et le vote SelfModerate
- Le formulaire de soumission de rapport ci-dessous
⛔ Hors périmètre
- Toute autre infrastructure, domaine ou service que ce site
- Le service SSH du serveur (port 22) — une tentative d'authentification y déclenche un blocage au niveau réseau qui te couperait aussi l'accès à ce site
- L'hébergeur, le registrar, les fournisseurs tiers
- Les comptes ou données de personnes réelles
- Le poste, les comptes et la messagerie du mainteneur
Un périmètre étendu (autres composants MySelf) peut être convenu en privé avec une équipe retenue, sous accord écrit. Il n'est pas publié ici.
🏁 Objectifs (capture-the-flag)
Saison 2 — deux drapeaux, dans deux comptes de démonstration :
FLAG-E2E-… dans le mémo personnel de ctf_alpha — chiffré dans le navigateur (Argon2id → HKDF → AES-256-GCM), clé jamais présente sur le serveur.
FLAG-DM-… dans un message privé de ctf_beta à ctf_gamma — chiffré au repos côté serveur par SelfDataGuard (XChaCha20-Poly1305), avec une clé tenue hors de la base.
FLAG-E2E : ni un dump de la base, ni un accès administrateur ne le révèlent — la clé ne se forme que dans le navigateur de son propriétaire. La prise de contrôle du serveur, elle, en vient à bout : c'est ce serveur qui sert le script de dérivation, et qui le contrôle peut en servir un autre, qui récolte la clé à la prochaine ouverture. « De bout en bout » vaut donc tant que le serveur sert le code publié. FLAG-DM : un dump seul ne suffit pas, mais la clé serveur (.blindkey) le fait tomber — c'est la limite assumée du chiffrement côté serveur. Le défi est de ramener l'un ou l'autre en clair.
Réfs MITRE ATT&CK / OWASP indiquées par objectif (les vulns web applicatives relèvent d'OWASP/CWE, hors périmètre ATT&CK).
- 🎯 Exfiltrer FLAG-E2E, le mémo de
ctf_alpha, et le restituer en clair objectif central - 🔓 Contourner l'authentification SelfRecover (prendre la main sur un compte sans son mot de passe) ATT&CK T1110 · T1078 · OWASP A07
- 💬 Lire FLAG-DM, le message de
ctf_beta à ctf_gamma, en clair OWASP A01 - ⚖️ Manipuler la réputation SelfModerate (enterrer un membre par faux comptes coordonnés, ou s'auto-promouvoir) CAPEC-210
- 🪪 Usurper une session ou aboutir une attaque CSRF authentifiée ATT&CK T1539 · CWE-352
- 🧨 Escalade de privilèges : obtenir un accès administrateur (panel
/admin) ATT&CK T1078 · OWASP A01
✅ Autorisé
- Tests applicatifs web : injection (SQL, commande), XSS, IDOR, contournement d'auth, logique métier
- Analyse cryptographique des blobs SelfDataGuard
- Tentatives de dump de la base via une faille applicative
- Fuzzing raisonné des endpoints
- Interception / rejeu dans le périmètre
⛔ Interdit
- Déni de service, flood, stress volumétrique (DoS / DDoS)
- Ingénierie sociale visant des personnes réelles, le mainteneur, l'hébergeur
- Attaques physiques ou sur des locaux
- Pivot ou scan hors du périmètre déclaré
- Destruction, chiffrement (ransomware) ou altération définitive de données
- Exfiltration massive au-delà de la preuve ; spam ; contenu illégal
⏱️ Note technique — limitation de débit
Les points d'authentification (/api/login.php, /api/register.php) sont lissés à 10 requêtes par seconde, avec une tolérance de 20 en rafale.
Un code 429 signale ce lissage — ou le verrouillage anti-brute-force du compte. Ce n'est pas un déni de service que tu aurais provoqué, et il est inutile de le rapporter comme tel.
Un fuzzing raisonné n'est pas affecté : seules les requêtes massivement parallèles le sont. Aucun bannissement n'est appliqué — sur ce serveur, scanner fait partie du jeu.
📐 Limites connues et assumées
Ce qui suit est déjà établi, et publié pour que tu n'y perdes pas ton temps : une limite documentée n'est pas un finding. La dépasser en est un : une prise concrète sur l'une de ces bornes, pas l'argument qu'elle existe.
- Le coffre mémo a deux serrures. Sa clé est tirée au hasard, puis scellée deux fois : sous le mot de passe du compte, et sous une passphrase propre au coffre. Qui obtient les blobs attaque hors ligne la moins chère des deux, sans compteur d'essais ; le coût par essai est une dérivation Argon2id
t=3, m=64 Mio, p=1 (le profil partagé avec SelfDataGuard). « De bout en bout » dit que le serveur ne voit jamais la clé — pas que le mémo résiste à un mot de passe faible, ni que le serveur serve toujours le même code : c'est lui qui livre le script de dérivation, et qui le contrôle peut en livrer un autre. - Un tiers ferme la connexion d'un compte en cinq requêtes. Le compteur d'échecs de connexion est alimenté par le nom SOUMIS, qu'il n'est pas nécessaire de posséder : cinq échecs verrouillent la connexion quinze minutes — bon mot de passe compris — et une rafale régulière la tient fermée. Ce compteur-là n'atteint pas la récupération : son frein compte ailleurs, et la bonne passphrase ouvre une récupération de niveau 1 pendant que la connexion est verrouillée. Les freins de récupération — niveaux 1, 2 et 3 — et celui de l'enrôlement comptent sous une étiquette dérivée d'un secret serveur, qu'un tiers ne peut pas fabriquer : le compteur de connexion est le seul resté sous le nom en clair. Le plafond par ORIGINE ne compte plus que les portes de récupération : une adresse saturée d'échecs de connexion garde sa récupération ouverte. ⚠️ Saturer une adresse d'échecs de RÉCUPÉRATION freine encore la récupération qui en vient — déni de service par origine, hors périmètre, et il faut partager l'adresse de sa cible pour l'atteindre.
- Un tiers peut occuper la place du dossier de niveau 3 d'un compte. Ouvrir un dossier ne demande rien d'autre qu'un nom de compte, et un compte n'a qu'un dossier actif à la fois : qui ouvre le premier tient la place, et le titulaire ne peut pas l'en déloger lui-même. Sa sortie passe par l'arbitre, qui dispose d'un abandon — il clôt un dossier sans rien compter. Un refus, lui, ne gèle plus rien de lui-même : il est compté et signalé à l'arbitre, et seul un arbitre pose un gel, qu'il lève. C'est un déni de service, donc hors périmètre — publié ici parce qu'il ne demande qu'un nom.
- Les deux passphrases n'ont pas le même plancher. Celle de récupération du compte est engendrée sur 6 mots — 77,55 bits — et chaque mot saisi est validé contre la liste de 7776 ; la saisie est toutefois acceptée dès 4 mots, soit 51,70 bits. Celle du coffre mémo passe à 4 mots et 16 caractères, sans validation de liste et par un contrôle côté navigateur : quatre mots inventés la scellent.
- C'est le navigateur qui tient le second facteur de l'appareil, pas le serveur. La clé privée d'un appareil enrôlé vit dans le stockage du navigateur, chiffrée sous une clé dérivée du mot mémorisé — un mot dont le plancher, quatre caractères, est lui aussi vérifié par le navigateur. Le serveur ne vérifie qu'une signature : qui obtient ce blob attaque le mot hors ligne, sans compteur d'essais. L'appareil reste bien un second facteur ; il n'est simplement pas gardé là où on l'attend.
🧭 Conduite responsable
- Sur une faille critique : stopper l'exploitation, sécuriser une preuve minimale, signaler sans délai.
- Une preuve = un extrait minimal (une capture, un enregistrement déchiffré) — pas un dump complet.
- Divulgation coordonnée : pas de publication avant correction et accord mutuel. Délai de référence : 90 jours.
🛟 Safe harbor
Tant que tes recherches respectent ces règles, nous les considérons comme autorisées et menées de bonne foi. Nous n'engagerons aucune action à ton encontre et nous ferons notre possible pour lever rapidement toute incertitude. En cas de doute sur le périmètre ou une technique : demande avant d'agir via le formulaire ci-dessous.
🌐 Ces règles existent en français et en anglais. En cas de divergence entre les versions, le texte français fait foi.
🏆 Hall of fame
Aucune contribution validée pour l'instant. Sois la première personne à y figurer.