Skip to content

Releases: mohamed-osama-aboelkheir/the-secure-code-review-challenge

Solution #3: Dice

Choose a tag to compare

The official solution to Challenge #3: Dice.

Covers the correct answer, why the (absent) auth model is a red herring, the full application code flow, the threat model with mitigation review, complete exploitation steps (fullwidth <img onerror> reviving a stripped tag), the fix, CWE grounding (CWE-79 XSS via CWE-180 "Validate Before Canonicalize", rooted in CWE-176 Unicode handling), and real-world grounding (DOMPurify's own "do not modify the output" rule + Unicode normalization security guidance).

No spoilers were posted anywhere before this release — thanks to everyone who worked through it privately. Discussion is welcome now that it's out.

Challenge #4: File Converter

Choose a tag to compare

The fourth drop in The Secure Code Review Challenge: File Converter, a document-conversion service (Express.js / Node, MongoDB, session auth) that converts uploaded documents with Pandoc as asynchronous background jobs. It exposes both a JSON API and a server-rendered web UI over the same data.

It contains one deliberately planted, real-world-grounded vulnerability. Threat-model it, find the flaw, exploit it, and propose a fix.

The solution for this challenge will be published separately as a solution-004-file-converter release.

Solution #2: Professional

Choose a tag to compare

The official solution to Challenge #2: Professional.

Covers the correct answer, why the plausible alternatives don't fit, the full application code flow, the threat model with mitigation review, complete exploitation steps, the fix, CWE grounding (CWE-94 / CWE-95), the CVE (CVE-2023-33733 — remote code execution in ReportLab reached through unescaped user text in a PDF markup sink), and a real-world example (Equifax 2017).

No spoilers were posted anywhere before this release — thanks to everyone who worked through it privately. Discussion is welcome now that it's out.

Challenge #3: Dice

Choose a tag to compare

The third drop in The Secure Code Review Challenge: Dice, a small dice-roller and random-word-selector web app (Express.js / Node, a JSON API plus a static browser UI).

It contains one deliberately planted, real-world-grounded vulnerability. Threat-model it, find the flaw, exploit it, and propose a fix.

The solution for this challenge will be published separately as a solution-003-dice release.

Solution #1: Schooled

Choose a tag to compare

The official solution to Challenge #1: Schooled.

Covers the correct answer, why the plausible alternatives don't fit, the "why it looks safe" analysis, full exploitation steps, the fix, CWE grounding (CWE-179, plus related CWE-1289 / CWE-184), and a real-world example (HashiCorp Vault).

No spoilers were posted anywhere before this release — thanks to everyone who worked through it privately. Discussion is welcome now that it's out.

Challenge #2: Professional

Choose a tag to compare

The second drop in The Secure Code Review Challenge: Professional, a profile-management and résumé-generation API (Flask + MongoDB + JWT, JSON API + a static browser UI).

It contains one deliberately planted, real-world-grounded vulnerability. Threat-model it, find the flaw, exploit it, and propose a fix.

The solution for this challenge will be published separately as a solution-002-professional release.

Challenge #1: Schooled

Choose a tag to compare

The first drop in The Secure Code Review Challenge: Schooled, a course-management API (Express + PostgreSQL + JWT, server-rendered UI + JSON API).

It contains one deliberately planted, real-world-grounded vulnerability. Threat-model it, find the flaw, exploit it, and propose a fix.

The solution for this challenge is published separately — see the solution-001-schooled release.