Get Started

Read a CVE and reproduce it in your lab

A CVE is a published, catalogued security vulnerability. Reading the record is one skill; understanding how the flaw actually works is another, and the way professionals learn the second is to reproduce a known vulnerability safely, on their own machine, against software they installed themselves. In this mission you take a real, well-documented flaw in a popular Python library (CVE-2021-33503, a denial of service in urllib3), install the exact affected version in an isolated environment, trigger the bug for real and watch the time it wastes climb, read the few lines of code that caused it, then upgrade to the fixed version and prove the same input is now harmless. Nothing is attacked except a library on your own PC. It pairs with Build a hacking lab, which sets the one rule everything here obeys.

52 minAdvancedTools: FreeStep 1 free
Tested 10 Oct 2026 · urllib3 1.26.4 (the affected version) and 1.26.5 (the fix), both installed from PyPI into isolated uv virtual environments running CPython 3.11.15, on Windows 11 with uv 0.11.9. Python 3.11 was pinned on purpose so the only thing that changes between the broken run and the fixed run is the one library version. Every command, version number and timing below is from that setup. CVE metadata is from NVD and the GitHub advisory GHSA-q2q7-5pp4-w6pg.
A pinned, isolated reproduction of a real published CVE on your own machine: you install the affected version of urllib3, trigger CVE-2021-33503 for real and watch the parse time climb with the input, then upgrade and prove the same input is harmless, with your own timings as the evidence
The skill of reading a CVE record end to endthe CVE id, the CVSS score (and why three different scorers gave this one three different numbers), the advisory, the weakness class, and what 'affected' and 'fixed in' versions actually mean
A look at the handful of lines of real code that caused the flaw, the one idea behind the fix, and the rules of responsible disclosure if you ever find a vulnerability yourself
Before you start
  • A terminal and a few minutes. On Windows that is Windows PowerShell, already on your PC; on macOS or Linux your normal terminal. If the terminal is new to you, the Level 0 lesson Install anything from GitHub covers the basics first
  • uv, a fast Python environment manager that also fetches the exact Python version this mission pins. Step 3 installs it in one line if you do not have it. It needs no admin rights
  • About 150MB of free disk space for a throwaway Python 3.11 and the tiny library. No GPU, no Docker, no paid account
  • The lab-only mindset from Build a hacking lab: you reproduce a flaw against software you run yourself, to learn, never against anyone else's system
01/07Why reproduce a CVE, and the one rule0 done
STEP 01 of 07~5 min

Why reproduce a CVE, and the one rule

Understand what reproducing a CVE buys you, and the single line that keeps it lawful, before you install anything.

  1. A CVE (Common Vulnerabilities and Exposures) is a single published, catalogued security flaw in a specific piece of software. Each one gets a unique id like CVE-2021-33503, a description, a severity score and links to the fix. There is a global, free catalogue of them, and reading it is a core security skill in its own right.

  2. Reading the record tells you a flaw exists. It rarely tells you how the flaw feels: how little input it takes to trigger, what the broken code was actually doing, why the fix works. The way professionals close that gap is to reproduce the vulnerability: install the exact affected version in a sealed-off environment, trigger the bug on purpose, then install the fixed version and confirm it is gone. You learn more in ten minutes of that than in an hour of reading.

  3. This is defensive work. The point is to understand published, already-fixed flaws so you recognise the same shapes in your own code and your own dependencies. You are not discovering anything new and you are not attacking anyone. The target is a library sitting on your own disk.

  4. The one rule, the same one the whole track obeys: you only test software you run yourself, or that the owner has given you written permission to test. Reproducing a CVE against a copy of an open-source library on your own machine is squarely on the right side of that line. Pointing the same technique at a live website, an API or anyone else's server is an attack on their system, and in the UK (the Computer Misuse Act 1990) and almost everywhere else that is a crime, whatever your intention.

    CarefulA lab reproduction and an attack use the same knowledge. The difference is whose machine it runs against. Keep every technique in this mission on software you installed yourself. Never run it against a system you do not own or have written permission to test.
    TipThe flaw used here is a denial of service, not a break-in. There is no stolen data and no remote control to demonstrate, which is exactly why it is a safe first CVE to reproduce: the worst it does on your own machine is waste a few seconds of CPU.
✓
CheckpointYou can say, in one sentence, what a CVE is, and why reproducing one against a library on your own PC is fine while running the same technique against someone else's server is not.
Stuck? Ask the community
Next mission · Ethical hackingFind the known vulnerabilities in your own Docker images
→