OWASP and live bugs
Threat modelling asks what could go wrong before you build.
OWASP helps you recognise what has already gone wrong in live applications.
A bug report might say:
A signed-in customer can change the id in
/orders/123and read someone else's order.
That is a real bug, but it also has a shared name: broken access control. In the OWASP Top 10, that is A01.
What OWASP is
OWASP is the Open Worldwide Application Security Project, a nonprofit community that publishes free application security guidance.
The best-known OWASP project is the OWASP Top 10. It is a list of common and serious web application security risk categories.
Think of it as a map, not a checklist.
The current released list is 2025
OWASP says the most current released version is the OWASP Top 10 2025.
The category names and numbers below use that edition.
The list gives developers a shared language. Instead of saying "the app lets users see records they should not see", a team can say "this is broken access control."
The short name doesn't fix the bug. It helps people find the right conversation faster.
The Top 10 doesn't prove an app is safe. It helps you recognise the kinds of mistakes developers keep finding in real web apps.
The 2025 categories
You don't need to memorise the list. Read each category as a question you can ask about code.
| Code | Category | Developer question |
|---|---|---|
| A01 | Broken Access Control | Can someone reach data or actions they should not? |
| A02 | Security Misconfiguration | Did an unsafe setting ship? |
| A03 | Software Supply Chain Failures | Can you trust the packages, tools and build path? |
| A04 | Cryptographic Failures | Is private data protected when stored or sent? |
| A05 | Injection | Can user text become an instruction? |
| A06 | Insecure Design | Was the unsafe choice made before code existed? |
| A07 | Authentication Failures | Can the app reliably tell who someone is? |
| A08 | Software or Data Integrity Failures | Was code or data changed before it reached you? |
| A09 | Security Logging and Alerting Failures | Would anyone notice the attack? |
| A10 | Mishandling of Exceptional Conditions | Does an error leave the app unsafe? |
The order matters less than the habit. Pick a live bug, name the category, then explain the impact in plain language.
For the order-id bug, the category is A01 Broken Access Control. The impact is: any signed-in customer can read another customer's order history and delivery address.
OWASP gives the bug a name; your report still has to explain the harm.
Start with the plain question. Can someone read something private? Change something they should not? Make the app stop answering? The category name comes after you understand the harm.
OWASP after STRIDE
STRIDE and OWASP are useful at different moments.
| Tool | Best time | Question |
|---|---|---|
| STRIDE | Before and during design | What could go wrong? |
| OWASP Top 10 | During review, testing and triage | What kind of bug is this? |
In a planning session, STRIDE helps you spot that QuickBite needs server-side price calculation.
In a live bug report, OWASP helps you say the browser-controlled price is an integrity problem and likely belongs under injection, access control or insecure design depending on how it works.
The tools fit together:
- STRIDE predicts possible failures.
- The app gets built and tested.
- OWASP helps name the bugs that appear.
- Bug triage turns the finding into priority and next action.
You don't have to choose one. They answer different questions.
Try it
Five bugs from a real backlog. Name the OWASP 2025 category for each, then write the impact in a sentence a non-engineer would understand.
- A signed-in customer changes the id in
/orders/1042and sees another customer's delivery address. - The admin panel ships with the default password still set.
- A search box puts the typed text straight into a database query.
- Failed logins are never recorded anywhere.
- A dependency was updated last week by a maintainer account that had been taken over.
Compare your answers
| # | Category | Impact in plain words |
|---|---|---|
| 1 | A01 Broken Access Control | Any signed-in customer can read another customer's order history and delivery address |
| 2 | A02 Security Misconfiguration | Anyone who knows the default password has full administrative control |
| 3 | A05 Injection | A visitor can make the database run commands the app never intended, reading or deleting data |
| 4 | A09 Security Logging and Alerting Failures | Someone can guess passwords indefinitely and nobody would ever know it happened |
| 5 | A03 Software Supply Chain Failures | Code you didn't write and never reviewed is running inside your application |
Number 4 is the one people argue about, because nothing is broken. That's the point of the category: the failure is that an attack leaves no trace, so every other control loses the chance to be noticed.
Notice the impact column never names a category. That's deliberate, and it's the habit worth taking away: the category routes the work to the right team, and the sentence beside it is what gets the work prioritised.
Where this goes next
OWASP gives you names for common live bugs. The next chapter, bug triage, shows how to turn one of those bugs into a report a team can act on.

