Project · Beginner · about 12 hours
Find and fix vulnerabilities in a small app
Review a deliberately insecure web app, confirm each flaw with a safe test on your own instance, fix it, and prove the fix with an automated test.
Skills:Application security, Python, Automated testing
Part of: Cybersecurity Engineer
Brief
This project is for authorised, defensive learning only. Use the practice target provided, which is built to be tested, and never test systems you do not own or have written permission to test. You will build a small, deliberately insecure app (or start from a provided vulnerable sample you run locally), so you control the whole target.
What to build
Write or obtain a small web app with at least five planted flaws: SQL injection, broken access control (an insecure direct object reference), weak password hashing, a command-injection sink and a missing authorisation check
For each, write a safe test against your local instance that demonstrates the issue, and record impact and an OWASP mapping
Fix each flaw with the correct secure pattern, one commit per fix
Add tests that fail before and pass after each fix
Add Bandit or Semgrep to CI and set it to fail on medium and high findings
Deliverables
Repository with
app/,tests/,FINDINGS.mdand.github/workflows/
How it is graded
Reviewers check out the pre-fix commit, run the tests to see them fail, then check out the fixed version and see them pass.
Stretch
Add a DAST scan (for example OWASP ZAP baseline) against your running app in CI.
Deliverables
- A findings report covering at least five OWASP Top 10 issues, each with impact and a fix
- The fixed application, with each fix in its own commit
- Automated tests that fail on the vulnerable version and pass on the fixed one
- A CI workflow running a SAST tool that blocks the reintroduction of the issues
How a reviewer grades it
| Criterion | Weight | What good looks like |
|---|---|---|
| Findings are correct, prioritised and mapped to OWASP categories | 30% | |
| Fixes are correct and follow secure patterns (parameterisation, access checks) | 30% | |
| Tests prove each vulnerability is closed | 25% | |
| SAST runs in CI and blocks regressions | 15% |