MySelf·Lab demo · noindex

🎯 Red team test — rules of engagement

MySelf-Lab is a showcase deliberately exposed to attack. It inverts OWASP Juice Shop: here the application is protected by the MySelf ecosystem (SelfRecover, SelfDataGuard, SelfModerate), and the goal is to prove — or disprove — that protection under real conditions. Anyone following the rules below is authorised to carry out research here.

📊 The lab in numbers

23days online
1authentication attempts repelled
1reports received
0flag captured

Aggregated from data the lab already collects — no audience measurement, no tracking cookie, no address retained.

📍 Scope

✅ In scope

  • The MySelf-Lab web application (this site) and all its paths
  • SelfRecover authentication (sign-up, log-in, recovery)
  • SelfDataGuard encrypted private messages and profiles
  • SelfModerate reputation and voting
  • The report submission form below

⛔ Out of scope

  • Any infrastructure, domain or service other than this site
  • The server's SSH service (port 22) — authentication attempts there trigger a network-level block that would also cut off your access to this site
  • The hosting provider, the registrar, third-party suppliers
  • Accounts or data belonging to real people
  • The maintainer's machine, accounts and mailboxes

An extended scope (other MySelf components) may be agreed privately with a selected team, under written agreement. It is not published here.

🏁 Objectives (capture the flag)

Season 2 — two flags, in two demonstration accounts:

FLAG-E2E-… in the personal memo of ctf_alpha — encrypted in the browser (Argon2id → HKDF → AES-256-GCM), key never present on the server.
FLAG-DM-… in a private message from ctf_beta to ctf_gamma — encrypted at rest on the server by SelfDataGuard (XChaCha20-Poly1305), with a key held outside the database.

FLAG-E2E: neither a database dump nor administrator access reveals it — the key is only ever derived in its owner's browser. Full control of the server does defeat it: that server is what ships the derivation script, and whoever controls it can ship another one that harvests the key on the next unlock. "End-to-end" therefore holds as long as the server ships the published code. FLAG-DM: a dump alone is not enough, but the server key (.blindkey) brings it down — the accepted limit of server-side encryption. The challenge is to bring either one back in the clear.

MITRE ATT&CK and OWASP references are given per objective (web application vulnerabilities map to OWASP/CWE, outside the ATT&CK scope).

✅ Allowed

  • Web application testing: injection (SQL, command), XSS, IDOR, authentication bypass, business logic
  • Cryptanalysis of SelfDataGuard blobs
  • Attempts to dump the database through an application flaw
  • Reasoned fuzzing of endpoints
  • Interception and replay within scope

⛔ Forbidden

  • Denial of service, flooding, volumetric stress (DoS / DDoS)
  • Social engineering aimed at real people, the maintainer or the hosting provider
  • Physical attacks, or attacks on premises
  • Pivoting or scanning outside the declared scope
  • Destruction, encryption (ransomware) or permanent alteration of data
  • Mass exfiltration beyond proof; spam; illegal content

⏱️ Technical note — rate limiting

The authentication endpoints (/api/login.php, /api/register.php) are rate-limited to 10 requests per second, with a burst allowance of 20.

A 429 response signals this rate limiting — or the account's anti-brute-force lockout. It is not a denial of service you caused, and there is no need to report it as one.

Reasoned fuzzing is unaffected: only massively parallel requests are. No ban is applied — on this server, scanning is part of the game.

📐 Known and accepted limits

What follows is already established, and published so you don't spend time on it: a documented limit is not a finding. Going past one is a finding: a working exploitation of any of these boundaries, not the argument that it exists.

🧭 Responsible conduct

🛟 Safe harbour

As long as your research follows these rules, we consider it authorised and carried out in good faith. We will take no action against you, and we will do our best to clear up any uncertainty quickly. If in doubt about the scope or a technique: ask before you act, using the form below.

📨 Submit a report

🔒 The body of your report is encrypted in your browser, with PGP, to the programme's public key, before it is sent: the server only stores a message it cannot read.

🌐 These rules exist in French and English. In case of discrepancy between versions, the French text prevails.

🚩 Flags — instant check

Got a flag? Paste it here for an immediate answer. The handle is free and optional — what counts is who gets there first.

FLAG-DM nobody has pulled this one yet 0 capture(s)
FLAG-E2E nobody has pulled this one yet 0 capture(s)

📬 Track a report

The number and token returned when you filed your report give you its status. The report itself stays unreadable to the server: it is encrypted to a single key.

🏆 Hall of fame

No validated contribution yet. Be the first to appear here.