OWASP Top 10 2025 vs 2021: What Changes in Your Reports
The OWASP Top 10 2025 set against 2021 in one table, what moved and why, the two new categories, where SSRF now sits, and how to re-map a findings library and report templates without breaking older reports.
The OWASP Top 10 2025 is the current edition, and it changes which category a lot of routine web findings map to. As of October 2026 it is the final release: it first appeared as a release candidate on 6 November 2025 and was finalised at the end of December 2025, so a report written today should reference 2025, not 2021. This page sets the two editions side by side, explains what actually moved and why, and covers the part the developer explainers skip: re-mapping a findings library and your report templates without invalidating everything you delivered under 2021.
The verified figures and category names here come from the OWASP Top 10 project's own pages and repository. The edition is data-informed for eight of its ten categories and set by a community survey for the other two, drawn from data on over 2.8 million applications, with 248 of the CWE identifiers distributed across the ten categories.
2025 against 2021, in one table
| OWASP Top 10 2021 | Where it is in 2025 |
|---|---|
| A01 Broken Access Control | A01 Broken Access Control, now also covering SSRF |
| A02 Cryptographic Failures | A04 Cryptographic Failures (down two) |
| A03 Injection | A05 Injection (down two) |
| A04 Insecure Design | A06 Insecure Design (down two) |
| A05 Security Misconfiguration | A02 Security Misconfiguration (up three) |
| A06 Vulnerable and Outdated Components | A03 Software Supply Chain Failures (expanded, up three) |
| A07 Identification and Authentication Failures | A07 Authentication Failures (renamed, held at seven) |
| A08 Software and Data Integrity Failures | A08 Software or Data Integrity Failures (held) |
| A09 Security Logging and Monitoring Failures | A09 Security Logging and Alerting Failures (renamed) |
| A10 Server-Side Request Forgery (SSRF) | Folded into A01 Broken Access Control |
| (new for 2025) | A10 Mishandling of Exceptional Conditions |
The 2025 order is A01 Broken Access Control, A02 Security Misconfiguration, A03 Software Supply Chain Failures, A04 Cryptographic Failures, A05 Injection, A06 Insecure Design, A07 Authentication Failures, A08 Software or Data Integrity Failures, A09 Security Logging and Alerting Failures, A10 Mishandling of Exceptional Conditions.
What moved and why
- Broken Access Control stays at number one. It had the highest number of occurrences in the data, and SSRF has been rolled into it, so the top category is now broader than before.
- Security Misconfiguration rose from fifth to second. More of an application's behaviour is driven by configuration than it used to be, and misconfigurations were more prevalent in this cycle's data.
- Software Supply Chain Failures rose to third as an expansion of 2021's Vulnerable and Outdated Components. It was the top concern in the community survey, and it covers the whole ecosystem of dependencies, build systems and distribution, not only components with known flaws.
- Cryptographic Failures, Injection and Insecure Design each fell two places, to fourth, fifth and sixth. They did not get less important; the categories above them climbed. Insecure Design falling is read by the project as a sign that threat modelling and secure design have improved since 2021.
- The bottom three are mostly renames. Identification and Authentication Failures became Authentication Failures, and Security Logging and Monitoring Failures became Security Logging and Alerting Failures, to stress that logging without alerting catches nothing.
The two new categories in practice
A03 Software Supply Chain Failures is where a finding about an out-of-date dependency now lands, but the category is wider than that. It takes in a compromised build pipeline, a package pulled from an untrusted source, and a dependency that cannot be updated. It has the fewest occurrences in the data, which the project attributes to how hard this area is to test, and the highest average exploit and impact scores from the CVEs that do map to it. In a report, a routine "unsupported component" finding reads better as A03:2025 with a sentence on where in the supply chain the weakness sits.
A10 Mishandling of Exceptional Conditions is genuinely new. It covers improper error handling, logical errors and systems that fail open rather than closed, including error messages that leak sensitive detail. Several of these weaknesses used to be filed under generic "poor code quality" or, in the case of verbose error messages, under 2021's Insecure Design. If you raise a finding about a system that reveals internal detail when it errors, or that grants access when a check fails, A10:2025 is now its home.
Where SSRF now sits
Server-Side Request Forgery was its own category, A10, in 2021. In 2025 it is folded into A01 Broken Access Control, where its CWE identifier sits alongside the other access-control weaknesses. For a report this means an SSRF finding should cite A01:2025, not a standalone SSRF category. The weakness has not changed and its severity is unaffected; only its label in the Top 10 has. It is worth a line in the report so a reader who knows the 2021 list is not confused by the move.
Re-mapping a findings library and templates
Most of the work of adopting 2025 is clerical, and it is worth doing in one pass rather than discovering a stale reference mid-engagement. The common moves below are the ones that touch routine findings.
| Finding you reuse | Category reference to update |
|---|---|
| SQL injection, cross-site scripting, command injection | A03:2021 Injection becomes A05:2025 Injection |
| Weak ciphers, missing encryption, cleartext transport | A02:2021 Cryptographic Failures becomes A04:2025 |
| Verbose error messages leaking detail | Moves to A10:2025 Mishandling of Exceptional Conditions |
| XML external entity and configuration weaknesses | Gather under A02:2025 Security Misconfiguration |
| Out-of-date or unsupported components | A06:2021 becomes A03:2025 Software Supply Chain Failures |
| Server-side request forgery | A10:2021 becomes part of A01:2025 Broken Access Control |
| Missing multi-factor, weak credentials | A07, renamed to Authentication Failures |
- Update the reference, keep the wording. The description and remediation of a reused finding rarely change; only the category tag does. Change the tag, leave the prose.
- Do it in the library, not per report. If the category reference lives in your reusable findings, one edit fixes every future report. The reasoning for keeping reused findings in a single library applies directly here.
- Carry it into the template as a field. A category reference that the template fills from a field, rather than one typed into the body, means the mapping is applied the same way every time. Setting that up is covered in configuring report templates.
Explaining it to clients
A client who tracks the Top 10 will notice that a finding they saw under one category last year is under another this year, and the question lands on you. Three sentences settle it.
- The weakness and its severity have not changed; the Top 10 reorganised its categories in the 2025 edition.
- Name both references for a transition period, for example "A05:2025 Injection (A03:2021)", so a reader using either list can follow.
- If the client's own standard or contract still cites 2021, agree which edition the report maps to before you write it, and say so in the methodology.
The Top 10 is an awareness document, not a testing methodology. A web test is still driven by a full checklist such as the OWASP Testing Guide; the Top 10 is how you group the findings for a reader, not what you test.
Versioning category references in reports
The lesson of every Top 10 revision is that an undated reference ages badly. "OWASP A3" meant Injection in 2017, Cross-Site Scripting before that, and Sensitive Data Exposure in 2017's neighbour list; a reader years later cannot tell which you meant.
- Always write the year. "A05:2025", never "A05" alone. The edition is part of the reference.
- State the edition once in the methodology, so every category tag in the report inherits it.
- Keep delivered reports as they were. A report delivered under 2021 is a record of what you found then, and should not be retro-fitted to 2025. Map new work to 2025 and leave the archive accurate to its date.
- Re-map the library, not the archive. Your reusable findings should track the current edition; your delivered reports should stay true to the edition they cited.
The broader point about what a reference in a report is for, and what belongs in one, is in what a penetration test report should contain.
Carry the Mapping Into Your Template
The Document Builder maps your fields into your own Word template, and custom report sections let a category reference live where every report fills it the same way.
Also Worth Reading
How to Write a Penetration Test Report, Step by Step
The process from first note to delivery: set the report up before testing, write findings as you confirm them, score severity with reasons, write the summary last, and QA everything before it leaves.
ReferencePenetration Testing Severity Levels and Risk Rating Matrix
Critical, high, medium, low and informational defined in one table and mapped to CVSS 4.0, with a likelihood and impact matrix for findings CVSS does not fit, and the habits that keep testers consistent.
ReferenceCVSS 4.0 Examples: 15 Common Pentest Findings Scored
Fifteen findings you raise in almost every test, each scored in CVSS 4.0 with a full vector and the reasoning behind it, set beside its 3.1 score so you can see exactly where the two versions part company.
Setup guide
Prefer to watch it?
The whole setup recorded, with chapters you can jump to: registering, your own domain, your own database in any of three places, your own mail server, branding, the first sign-in, updating the database on Supabase Cloud, and moving the database if you change your mind.
- 0:00 · Registering, signing in, and the free trial
- 0:51 · Your name and your firm’s name
- 0:57 · Custom domain
- +6 more