
OWASP Top 10 Vulnerability Guide
This guide is a detailed breakdown of the most critical web application security risks in the OWASP Top 10 2021 list.
It explains how each risk appears in production systems, how to detect it, and which controls reduce it in practice.
Use it as a working reference for developers, security teams, and managers who need to recognise these risks, judge impact, and plan remediation without treating the list as a complete security programme.
Awareness document
The Top 10 tells you which risk classes matter most in aggregate. It should inform threat modelling, testing, and remediation — not replace them.
Not a compliance checklist
It is not a pass/fail audit list and not a certification standard. Using it that way is a common mistake and does not prove an application is safe.
Complementary sources such as OWASP ASVS, NCSC web application guidance, and NIST cybersecurity frameworks go further on control depth.
What Is the OWASP Top 10?
The OWASP Top 10 is a regularly updated reference document that identifies and ranks the ten most critical security risks facing web applications.
It is published by the Open Worldwide Application Security Project (OWASP), a nonprofit foundation dedicated to improving software security. Security teams, developers, and auditors treat it as the de facto industry standard because it is built from real vulnerability data and expert consensus rather than vendor marketing.
The categories also map into the broader Common Weakness Enumeration (CWE) taxonomy, which is why you will see CWE identifiers alongside each risk later in this guide.
The 2021 release is the current version. OWASP updates the list roughly every 3 to 4 years, so readers should treat 2021 as the live reference until a successor is formally published. Discussion of a 2025 or 2026 refresh does not change that fact.
Future updates are expected to shift rankings and categories as exploit patterns change, not to replace the need for a full security programme. The list applies across typical stacks, including server-rendered apps, SPAs with API backends, and cloud-native services.
The 2021 list, ordered by prevalence and impact data, is:
- Broken Access Control: users can reach data or actions outside their intended permissions.
- Cryptographic Failures: weak or missing cryptography exposes sensitive data at rest or in transit.
- Injection: untrusted input is interpreted as code or queries, including SQL, NoSQL, OS command, LDAP, and prompt injection.
- Insecure Design: the architecture itself lacks security controls, even if the code is implemented as specified.
- Security Misconfiguration: defaults, unused features, and poor error handling leave systems open.
- Vulnerable and Outdated Components: libraries, frameworks, and images with known flaws remain in production.
- Identification and Authentication Failures: weak login, session, or credential handling lets attackers impersonate users.
- Software and Data Integrity Failures: untrusted updates, pipelines, or serialised objects are accepted without verification.
- Security Logging and Monitoring Failures: attacks are not recorded, alerted, or investigated in time.
- Server-Side Request Forgery (SSRF): the server is tricked into calling internal or unintended locations.
That order reflects aggregated prevalence and impact. Every organisation's risk profile differs, so a bank, a SaaS product, and a public-sector portal will not share the same first fix.
Risks also combine: injection can dump data that broken access control should have blocked, and SSRF can reach an internal API that never enforced front-door authorisation.
The Top 5 OWASP Vulnerabilities You're Most Likely to Encounter
The five OWASP vulnerabilities you are most likely to encounter, based on 2021 prevalence and impact data, are Broken Access Control, Cryptographic Failures, Injection, Insecure Design, and Security Misconfiguration.
Start here if you need a first-pass view of live applications before working through the full list. These five dominate because they sit on everyday features: accounts, APIs, search, cloud defaults, and design shortcuts taken under delivery pressure.
The OWASP order is a useful default, not a universal ranking. A financial services firm may face greater damage from cryptographic failures around payment and identity data. A SaaS startup with multi-tenant APIs is often more exposed to broken access control. A content site with many plugins may feel component risk earlier than design risk. Score your own likelihood and impact before treating #1 as mandatory first work.
1. Broken Access Control (ranked #1)
Broken Access Control is the failure to enforce restrictions on what authenticated users can access. OWASP reported it in approximately 94% of tested applications, which is why it tops the list.
You are at risk if API routes trust the user interface for permission checks, or if changing an ID in a URL or JSON body returns another user's record.
2. Cryptographic Failures (ranked #2)
Cryptographic Failures, formerly Sensitive Data Exposure, focus on the root cause: weak algorithms, poor key handling, or missing encryption, not only the visible leak.
You are at risk if passwords are hashed with outdated functions, TLS is below modern versions, or personal data sits unencrypted in backups and logs.
3. Injection (ranked #3)
Injection covers SQL, NoSQL, OS command, and LDAP injection, and now includes AI prompt injection where model instructions can be overridden by user content.
You are at risk if query strings, command lines, or LLM prompts concatenate untrusted input without strict allow-lists and parameterisation.
4. Insecure Design (ranked #4)
Insecure Design is a 2021 category for missing security in the architecture, distinct from bugs in an otherwise sound design.
You are at risk if there is no threat model, no abuse-case review, and no design-level control for tenancy, workflow limits, or trust boundaries.
5. Security Misconfiguration (ranked #5)
Security Misconfiguration includes default credentials, unnecessary services, verbose errors, and cloud storage left public.
You are at risk if production still uses sample configs, directory listing, stack traces in HTTP responses, or admin interfaces on the public internet.
Detailed Breakdown of OWASP Top 10 Vulnerabilities #1–#5
OWASP Top 10 vulnerabilities #1 to #5 are Broken Access Control, Cryptographic Failures, Injection, Insecure Design, and Security Misconfiguration, and each can be recognised, assessed, and reduced with specific technical controls. This section is the working reference for those five risks.
For each one, treat detection as a server-side question. If the browser or mobile app hides a function, assume an attacker will still call the API.
Broken Access Control
Broken Access Control is the failure of an application to enforce what an authenticated user is allowed to do. Authentication answers who you are. Authorisation answers what you can do.
Most access control failures are authorisation failures: the user is logged in, then reaches another tenant's invoices, an admin function, or a privileged API because the server never checked the object and the role. Horizontal issues let user A read user B's records. Vertical issues let a standard user perform admin actions.
Automated scanners miss both when the flaw is in business rules rather than a missing login page. Key CWE mappings include CWE-285 (Improper Authorization), CWE-639 (Authorization Bypass Through User-Controlled Key), and CWE-862 (Missing Authorization).
How to know if you're at risk
- Review API endpoints to confirm every request enforces authorisation checks, not just the UI.
- Test whether direct object references such as /account/12345 can be manipulated.
- Confirm role changes take effect on the next request, not only after a new login.
- Check that users cannot browse to /admin, alter hidden fields, or replay JWT claims to raise privilege.
- Also test function-level access (can a support role call a finance-only export?) and whether CORS, verbose APIs, or undocumented routes expose operations the SPA never renders.
Real-world scenario
A customer changes the account ID in a mobile API call from 5821 to 5822 and receives another customer's order history and saved card metadata. The UI hid other accounts. The API only verified that a session existed.
Mitigation steps
- Deny by default.
- Enforce least privilege in server-side policy on every request.
- Bind object access to the session user's ownership and tenant, never to a client-supplied ID alone.
- Use centralised access control, not one-off if statements.
- Invalidate sessions and tokens when roles change.
- Log denied access attempts and test authorisation as its own test suite, because scanners miss business-logic bypasses.
- Prefer role-based and attribute-based checks that security and product owners can review, and re-test after every new endpoint rather than assuming middleware covers it.
Cryptographic Failures
Cryptographic Failures are weaknesses in encryption, hashing, key management, or protocol choice that allow sensitive data to be read or altered. The 2021 rename moved attention from the symptom (exposed data) to the cause.
The category is not only turning on encryption. It includes hashing, key storage, certificate handling, and the split between data in transit and data at rest. A TLS-protected site can still fail this category if backups, logs, or password stores are weak. Relevant CWEs include CWE-327 (Use of a Broken or Risky Cryptographic Algorithm) and CWE-331 (Insufficient Entropy).
How to know if you're at risk
- Inventory where passwords, tokens, payment data, and personal data are stored and transmitted.
- Flag MD5 or SHA-1 password hashes, home-grown crypto, keys in source code, HTTP on sensitive pages, TLS 1.0/1.1, and cleartext backups.
- Check whether logs and browser storage hold session tokens or national identifiers.
- Look for secrets in query strings, mixed content, missing HSTS, and encryption that uses a single static key for every tenant.
Real-world scenario
An application hashes passwords with SHA-1 and no salt, stores card numbers encrypted with a key hard-coded in a repository, and allows the account area over HTTP. A dump of the database plus the repo gives an attacker usable credentials and payment data.
Mitigation steps
- Use AES-256 for data at rest and TLS 1.3 for data in transit.
- Never roll your own cryptography.
- Store passwords with a modern adaptive hash such as Argon2id, scrypt, or bcrypt, with unique salts.
- Put keys in a KMS or HSM, rotate them, and keep them out of git.
- Classify data so only what must be stored is stored, and encrypt backups with separate keys.
- Disable old protocols and ciphers at the load balancer, and treat token storage in browsers as a crypto and XSS problem together.
Injection
Injection is the insertion of untrusted input into an interpreter so it runs as a query, command, or instruction. SQL injection remains the best-known form. NoSQL, OS command, LDAP, expression language, and AI prompt injection are in the same family.
An ORM does not remove the risk if developers still concatenate strings or pass unsanitised input into raw queries. XSS was folded into this category in 2021 for scoring purposes, but stored and reflected script issues still need their own output-encoding controls. Core CWEs include CWE-89 (SQL Injection) and CWE-79 (Cross-site Scripting).
How to know if you're at risk
- Search the code for string-built SQL, shell calls, LDAP filters, and LLM prompts that include raw user text.
- If a single quote, wildcard, or instruction such as ignore previous rules changes application behaviour, you have an injection surface.
- Confirm that database accounts used by the app are not DBA-level.
- Include second-order paths, where stored input is later used in a query, report, or prompt.
- Test file names passed to OS utilities and template engines that evaluate user content.
Real-world scenario
A search box concatenates the term into SQL. An attacker submits a payload that unions in the users table and dumps password hashes. In a newer stack, a support chatbot is told to ignore system policy and reveal other customers' ticket contents from its retrieval layer.
Mitigation steps
- Use parameterised queries or stored procedures everywhere, including second-order paths.
- Apply allow-lists for expected types and lengths.
- Never pass user input to OS shells.
- Encode output by context to contain XSS.
- For LLM features, separate system instructions from user content, constrain tools the model can call, and treat model output as untrusted.
- Give the application database user the minimum rights needed.
- A WAF can blunt some common payloads, but it is a compensating control, not a substitute for safe APIs.
Insecure Design
Insecure Design is a missing or weak security control in the architecture, not a coding mistake against a sound spec. A perfect implementation of a bad design still fails. Threat modelling and secure design patterns are the primary defences, which is why this class is poorly suited to last-minute scanning or a WAF rule.
It belongs in a secure software development lifecycle: abuse cases, trust boundaries, and control selection before code is written. This category maps to weaknesses such as CWE-209 (Generation of Error Message Containing Sensitive Information) in design choices, and broader gaps like missing tenancy isolation or unbounded business workflows.
How to know if you're at risk
- Ask whether anyone has documented assets, trust boundaries, and abuse cases for the last major feature.
- If password reset, multi-tenant data, file sharing, or payment flows were built without an explicit adversary model, design risk is present.
- Look for unlimited retries, self-registration into privileged roles, and reliance on the client not sending a field as a control.
- Missing rate limits on expensive operations, unlimited coupon stacking, and partner APIs that inherit full customer access are design smells, not implementation typos.
Real-world scenario
A marketplace lets any logged-in user mark an order as delivered because the workflow assumed only warehouse staff would see the button. The UI later hid the button. The API still accepted the status change, so buyers closed disputes in their own favour.
Mitigation steps
- Run threat modelling before build, not after launch.
- Define secure design patterns for identity, tenancy, file handling, and admin operations.
- Use limit checks, step-up authentication for high-risk actions, and server-side workflow state machines.
- Build security user stories and misuse cases into acceptance criteria.
- Review designs when you add APIs, partners, or AI features that change trust boundaries.
- Revisit the model when you change tenancy, payment rails, or who is allowed to export data.
Security Misconfiguration
Security Misconfiguration is an unsafe default, leftover feature, incomplete hardening step, or leaky error path in servers, frameworks, containers, or cloud services. It stays in the top 5 because it is often the easiest class to fix and still the most repeatedly shipped. Demo settings survive into production, platform upgrades restore vendor defaults, and cloud consoles grant broad access for a short period.
Typical CWEs include CWE-16 (Configuration) and CWE-611 (Improper Restriction of XML External Entity Reference) where parsers are left wide open. XXE, which left the named 2017 list, still appears here when XML parsers resolve external entities.
How to know if you're at risk
- Compare production config to a hardened baseline.
- Check for default accounts, sample apps, TRACE/OPTIONS where unused, directory listing, debug flags, public buckets, overly broad CORS, and stack traces in 500 pages.
- Confirm security headers and that unused ports and services are closed.
- Include Kubernetes dashboards, leftover .git or .env files, open admin consoles, and cloud security groups that allow 0.0.0.0/0 to databases because the app needed to work.
Real-world scenario
A cloud object store used for invoice PDFs is created with public-read to make the demo work. Months later, anyone who guesses or finds object URLs can download other customers' invoices. The application code never had an access bug. The bucket policy did.
Mitigation steps
- Maintain repeatable hardening for OS, containers, web servers, and cloud accounts.
- Remove unused features and default credentials before go-live.
- Turn off detailed errors in production.
- Apply security headers and least-privilege IAM.
- Scan infrastructure as code.
- Re-check config after every platform upgrade, because vendor defaults drift back in.
- Disable dangerous parser features by default and treat environment-specific config as code that is reviewed, not as a local exception.
Detailed Breakdown of OWASP Top 10 Vulnerabilities #6–#10
OWASP Top 10 vulnerabilities #6 to #10 are Vulnerable and Outdated Components, Identification and Authentication Failures, Software and Data Integrity Failures, Security Logging and Monitoring Failures, and Server-Side Request Forgery, and they remain critical even when they appear less often than the first five.
Underestimating #6 and #10 is a frequent operational error, especially in cloud and dependency-heavy stacks. These five often decide whether an initial foothold becomes a full environment compromise.
Vulnerable and Outdated Components
Vulnerable and Outdated Components is the use of libraries, frameworks, runtimes, CMS plugins, or container images with known weaknesses. Patching a single CVE is not the whole job. You need a living inventory of the software supply chain and a process to assess, upgrade, or isolate each component.
End-of-life runtimes and abandoned plugins are in scope even when no fresh CVE has been issued this week. CWE-1104 (Use of Unmaintained Third Party Components) sits behind much of this category. Public CVE records, such as Log4Shell (CVE-2021-44228), show how a transitive dependency can become an internet-wide incident.
How to know if you're at risk
- Run a software composition analysis (SCA) tool to inventory dependencies and compare them with the CVE database.
- Include transitive libraries, Docker base images, Lambda layers, and CMS plugins.
- If you cannot list what is in production, or if builds still pull latest tags with no pin, you are exposed.
- A software bill of materials (SBOM) should name versions actually deployed, not only what developers remember adding.
- Check language and OS packages the same way you check application libraries.
Real-world scenario
A Java service includes an old logging library through a parent POM. A public exploit lands. Attackers send a crafted header, the logger interpolates it, and they get remote code execution on the application host. The team's own code had no injection bug.
Mitigation steps
- Maintain a bill of materials.
- Pin versions.
- Monitor CVE and advisory feeds.
- Apply patches on a defined SLA by severity.
- Remove unused dependencies.
- Prefer maintained libraries.
- Isolate high-risk components behind extra controls until you can upgrade.
- Treat container and OS packages as in-scope, not only application JARs and NPMs.
- Plan upgrades for end-of-life platforms instead of waiting for a headline CVE, and test patches in staging so an inability to upgrade does not become permanent.
Identification and Authentication Failures
Identification and Authentication Failures are weaknesses in proving identity and keeping that proof bound to the session. The 2021 category is broader than weak passwords. It includes credential stuffing, missing multi-factor authentication, poorly generated session tokens, missing timeouts, and session fixation.
Recovery flows, magic links, and SSO callbacks are part of the same attack surface. Relevant CWEs include CWE-287 (Improper Authentication) and CWE-384 (Session Fixation).
How to know if you're at risk
- Test password reset, remember-me, SSO callbacks, and session lifetime.
- Look for login without rate limits, passwords stored in recoverable form, session IDs in URLs, tokens that never expire, and missing MFA on admin and remote access.
- Check whether logout actually invalidates the server-side session.
- Weak session tokens, tokens stored where XSS can read them, and reset links that never expire are as important as password length rules.
Real-world scenario
An attacker runs leaked username and password pairs against the login API. There is no lockout, no MFA, and session cookies are issued without Secure or SameSite flags. A reused consumer password opens a privileged back-office account that stays valid for weeks after the user clicks logout in the browser.
Mitigation steps
- Enforce MFA for all users who can reach sensitive data, and for every administrator.
- Use a password policy aligned with modern guidance, plus breach checks where lawful.
- Implement secure session management with rotation after login, idle timeout, absolute timeout, and server-side invalidation.
- Never store plaintext credentials.
- Rate-limit authentication and recovery flows.
- Prefer well-tested identity protocols over custom login code.
- Bind sessions to cookie flags that fit your threat model, and treat account recovery with the same controls as login.
Software and Data Integrity Failures
Software and Data Integrity Failures is a 2021 category covering CI/CD pipeline security, insecure deserialization, untrusted plugins, and the failure to verify software updates. If an attacker can change what you build or what you load at runtime, they skip many network defences.
This is distinct from having old libraries: the artefact may be new and still hostile if the pipeline accepted it without a signature or hash check. Important CWEs include CWE-502 (Deserialization of Untrusted Data) and CWE-494 (Download of Code Without Integrity Check).
How to know if you're at risk
- Review who can push to main, who can change pipeline definitions, and whether artefacts are signed.
- Check for Java, PHP, or Python deserialization of user-controlled blobs.
- Confirm auto-update channels use signatures and HTTPS.
- Look for unsigned plugins and dependency installs during build with no hash pin.
- Over-privileged GitHub Actions or similar runners, world-writable artefact stores, and webhooks that deploy on an unauthenticated ping are integrity failures even when production servers look patched.
Real-world scenario
A build pipeline fetches a package from a public registry. An attacker publishes a similarly named malicious version. The pipeline has no integrity check, ships the artefact, and production starts executing attacker code with the application's cloud credentials.
Mitigation steps
- Sign builds and verify signatures at deploy time.
- Restrict pipeline permissions and protect branches.
- Pin dependencies by hash.
- Disable unused deserialization features and use allow-listed formats such as JSON with strict schemas.
- Treat webhook and plugin inputs as hostile.
- Separate build credentials from runtime credentials.
- Review who can approve workflows, and keep production secrets out of pull-request jobs from forks.
Security Logging and Monitoring Failures
Security Logging and Monitoring Failures are the absence of usable logs, alerts, or response paths when an attack is underway. Logging alone is not the control. If nobody alerts on credential stuffing, authorisation denials, or admin actions, the organisation cannot meet detection expectations.
Related CWEs include CWE-778 (Insufficient Logging) and CWE-223 (Omission of Security-relevant Information). The opposite failure also matters: logs that capture full payment card numbers or passwords create a second personal-data store.
How to know if you're at risk
- Ask whether you would know within minutes about a flood of failed logins, a spike in 403s on admin APIs, or a change to payment endpoints.
- If logs have no user ID, source IP, or outcome, or if they sit on a host an attacker can wipe, monitoring has failed.
- Check that clocks are synced and log access is restricted.
- If SIEM licences exist but playbooks and on-call owners do not, you have collection without detection.
Real-world scenario
Attackers brute-force a partner portal for 14 hours, then export customer lists. The application wrote generic error lines with no username. No alert fired. The incident is discovered weeks later when a regulator is notified by affected people, not by the security team.
Mitigation steps
- Log authentication, access control failures, high-value data access, and admin changes with enough context to investigate.
- Protect logs from tampering and send them to a separate store.
- Define alerts with owners and response playbooks.
- Test detection with purple-team or tabletop exercises.
- Retain logs for a period that matches investigation and legal needs.
- Redact secrets and unnecessary personal data from log payloads so monitoring does not become a GDPR problem of its own.
Server-Side Request Forgery
Server-Side Request Forgery (SSRF) is a flaw that lets an attacker make the application server send HTTP or other requests to targets the attacker should not reach. Ranked #10, it is still critical in cloud environments because a single fetch can hit instance metadata, internal admin ports, or sibling services.
The primary mapping is CWE-918 (Server-Side Request Forgery). SSRF is often chained with broken access control: first reach an internal API, then call it without the front-door authorisation checks. Filter bypasses through redirects, DNS rebinding, IPv6, or alternative host spellings are common reasons blocking a single IP fails.
How to know if you're at risk
- List features that fetch URLs, generate PDFs from HTML, process webhooks, import from user-supplied links, or preview remote files.
- Test whether those features accept internal hosts, link-local addresses, or cloud metadata IPs.
- Check whether redirects are followed and whether only HTTP(S) are allowed.
- Review parser behaviour for unexpected schemes and for hostnames that resolve differently at check time and fetch time.
Real-world scenario
An attacker finds SSRF in a PDF generator, points it at the cloud metadata service, retrieves temporary credentials, and pivots into object storage and compute. From the internet the metadata service was never exposed. The application server had a network path, and the PDF feature followed it.
Mitigation steps
- Allow-list destinations at the application and network layers.
- Block link-local, loopback, and RFC1918 ranges unless a documented internal use case exists.
- Do not follow redirects to unvalidated hosts.
- Disable unused URL-fetch protocols.
- Apply IMDSv2 or equivalent metadata protections in cloud accounts.
- Authenticate internal services so a forged request still fails authorisation.
- Resolve and validate the destination after DNS lookup, and keep egress from app tiers as tight as ingress.
What Changed in the OWASP Top 10 2021 Update?
The OWASP Top 10 2021 update reclassified several 2017 categories, merged XSS and XXE into other risks, and added Insecure Design, Software and Data Integrity Failures, and Server-Side Request Forgery.
The 2021 work was data-driven, based on a survey of over 500 security professionals and analysis of vulnerability data from hundreds of organisations. New categories reflect emerging threats and a clearer focus on root causes rather than symptoms.
If your playbooks, training, or scanner profiles still stop at 2017 names, you will under-test design, pipeline integrity, and SSRF even when injection testing looks mature.
| 2017 category | 2021 category | What happened |
|---|---|---|
| A1 Injection | A03 Injection | Moved down in rank. XSS was folded into this grouping for 2021 scoring. |
| A2 Broken Authentication | A07 Identification and Authentication Failures | Renamed and broadened to include session management failures. |
| A3 Sensitive Data Exposure | A02 Cryptographic Failures | Renamed to the root cause. Moved up one place. |
| A4 XML External Entities (XXE) | Spread across other categories | Merged, commonly into misconfiguration and injection-related parsing issues. |
| A5 Broken Access Control | A01 Broken Access Control | Moved from #5 to #1 on prevalence and impact data. |
| A6 Security Misconfiguration | A05 Security Misconfiguration | Remained in the top 5 with a small rank change. |
| A7 Cross-Site Scripting (XSS) | A03 Injection | Folded into Injection rather than kept as a standalone Top 10 item. |
| A8 Insecure Deserialization | A08 Software and Data Integrity Failures | Absorbed into the new integrity category with CI/CD and update risks. |
| A9 Using Components with Known Vulnerabilities | A06 Vulnerable and Outdated Components | Renamed. Still a core supply-chain issue. |
| A10 Insufficient Logging & Monitoring | A09 Security Logging and Monitoring Failures | Renamed and expanded in scope. |
| Not in 2017 Top 10 | A04 Insecure Design | New category for missing security in architecture. |
| Not in 2017 Top 10 | A08 Software and Data Integrity Failures | New category for pipelines, signing, and untrusted code or data. |
| Not in 2017 Top 10 | A10 Server-Side Request Forgery | New category, driven by community survey evidence. |
Sensitive Data Exposure became Cryptographic Failures so teams fix algorithms, TLS, hashing, and keys instead of only reacting after a leak.
Insufficient Logging and Monitoring became Security Logging and Monitoring Failures to cover alerting and response, not log files in isolation.
XSS as a named Top 10 row disappearing does not mean XSS is solved. It means you still encode output and test for script injection, while the published list emphasises broader interpreter abuse.
XXE disappearing as a named row does not mean XML parsers are safe. Harden parsers and treat XXE as part of configuration and injection testing.
If your controls still map only to 2017 names, add design reviews, pipeline integrity, and SSRF testing. Authentication work must include session lifetime and MFA, not only password complexity.
Rank changes also signal where testers should spend time: access control moved to #1 because it is both common and damaging, not because injection became harmless.
OWASP Top 10 and UK/EU Regulatory Compliance
The OWASP Top 10 supports UK and EU regulatory obligations by mapping to GDPR Article 32, the UK Data Protection Act 2018, NCSC web application guidance, and PCI DSS controls for payment data. Addressing these risks is technical hygiene and evidence that security of processing is being designed, tested, and maintained.
This section is informational, not legal advice. For UK organisations, ICO scrutiny of appropriate measures often lands on encryption, access control, patching, and whether you can evidence testing, not on a branded OWASP certificate.
GDPR Article 32 requires appropriate technical and organisational measures for confidentiality, integrity, availability, and resilience, including encryption and regular testing. The UK Data Protection Act 2018 applies those principles in UK law.
Broken access control undermines Article 5 limits on who may process personal data. Weak logging undermines Article 5(2) accountability, because you cannot demonstrate what happened.
NCSC guidance on web application security aligns with the same themes: secure configuration, access control, cryptography, and monitoring. PCI DSS also references OWASP-aligned application controls for organisations that handle payment card data. NIST frameworks can sit alongside these obligations for organisations that already report against them, but they do not replace GDPR duties.
| OWASP risk | Regulatory implication | Practical example |
|---|---|---|
| Broken Access Control | GDPR Article 5 data minimisation and access limitation | A tenant IDOR exposing other customers' personal data is both a security incident and a personal-data breach risk. |
| Cryptographic Failures | GDPR Article 32 encryption of personal data | Unencrypted databases, weak TLS, or reversible password storage fail the appropriate measures test for many processing contexts. |
| Injection | Article 32 integrity and confidentiality of processing | SQL injection that extracts personal data is a classic confidentiality failure. |
| Insecure Design | Data protection by design and by default (Article 25 context) | A workflow that allows mass export of personal data with no need or approval is a design failure, not only a bug. |
| Security Misconfiguration | Article 32 resilience and access control of systems | A public storage bucket of invoices is a configuration failure with direct GDPR impact. |
| Vulnerable and Outdated Components | Article 32 ongoing confidentiality, integrity, and availability | Unpatched components with known remote-code CVEs leave personal data continually at risk. |
| Identification and Authentication Failures | Article 32 access control and unauthorised processing | Missing MFA on admin access to personal data is a common supervision finding theme. |
| Software and Data Integrity Failures | Integrity of processing systems and updates | A poisoned build that exfiltrates personal data bypasses perimeter controls. |
| Security Logging and Monitoring Failures | Article 5(2) accountability and the ability to investigate | Without usable logs you cannot meet breach assessment and notification duties with evidence. |
| Server-Side Request Forgery | Unauthorised internal access to personal-data systems | SSRF to metadata and then to data stores can expose entire environments holding personal data. |
Regulators do not certify OWASP Top 10 compliant applications. They expect risk-based measures, testing, and proof. Mapping your controls to both the Top 10 and the relevant articles makes that proof easier to explain to stakeholders.
Keep records of assessments, fixes, and retests. That evidence is often as important as the patch itself when you later need to show that security of processing was not a one-off project.
How to Prioritise Remediation: A Practical Framework
The OWASP Top 10 order is a useful starting point for remediation, but it is not a strict priority ranking for every organisation.
Rank work by how likely the issue is to be exploited in your context and how much damage it would cause if it were. Ease of remediation is the third filter: a public bucket or missing security header can be closed while you staff a longer access-control rewrite.
Score each applicable vulnerability from 1 to 5 for likelihood and from 1 to 5 for impact, then multiply. Likelihood 5 means the weakness is present, easy to find, and attractive to attackers on your stack. Impact 5 means loss of customer data, payments, safety, or a regulator-facing incident.
- A priority score of 20 to 25 is immediate.
- 12 to 19 is planned.
- Below 12 is scheduled unless a cheap fix exists.
Do not spend weeks debating a 25 while an open storage bucket remains public. Copy this template and replace the example scores with your own. The example is a typical e-commerce application with customer accounts, stored personal data, payment integrations, and frequent releases.
| Vulnerability | Likelihood (1–5) | Impact (1–5) | Priority (L × I) | E-commerce example notes |
|---|---|---|---|---|
| Broken Access Control | 5 | 5 | 25 | Multi-user orders and IDs are easy to tamper with. Impact includes other customers' data. |
| Cryptographic Failures | 4 | 5 | 20 | Payment and identity data make crypto failures high impact even if slightly harder to exploit. |
| Injection | 4 | 5 | 20 | Search, filters, and admin reports often still concatenate input. |
| Vulnerable and Outdated Components | 4 | 4 | 16 | CMS plugins and front-end packs change often and lag patches. |
| Security Misconfiguration | 5 | 3 | 15 | High likelihood from cloud defaults. Impact varies if data stores are not public. |
| Identification and Authentication Failures | 3 | 5 | 15 | Account takeover of a shopper is serious. Admin account takeover is worse. |
| Insecure Design | 3 | 4 | 12 | Discount, refund, and marketplace flows often lack abuse limits. |
| Software and Data Integrity Failures | 3 | 4 | 12 | Depends on how open the CI/CD system is to contributors and packages. |
| Security Logging and Monitoring Failures | 4 | 3 | 12 | Does not cause the breach, but extends dwell time and regulatory pain. |
| Server-Side Request Forgery | 3 | 4 | 12 | Rises if you generate PDFs, previews, or fetch merchant-supplied URLs. |
In that e-commerce example, broken access control is first because both numbers are maxed. Cryptographic failures and injection follow. Security misconfiguration is common and often a fast win, even when impact is scored lower.
A payments firm might raise cryptographic failures above access control. A purely internal tool with no personal data might raise misconfiguration and logging first. Recalculate after a major feature, a new integration, or a change in the data you hold, because last quarter's scores go stale.
Where to start
- Identify which of the 10 are actually present and exploitable on your applications, not just theoretically possible.
- Assess which would cause the most damage given the data you hold and the users you serve.
- Start with the highest scores, then take easy wins such as closing public storage, disabling debug, and patching critical CVEs.
- Verify every fix with retesting, including attempts to bypass the new control.
Beyond the Top 10: Emerging Risks the List Doesn't Cover
The OWASP Top 10 does not cover every important web application risk, and API-specific flaws, client-side JavaScript issues, broader supply chain attacks, and AI-specific threats sit outside the official ten.
Treat the list as a starting point, then run threat modelling for your stack and sector. A programme that only ticks the published ten will still miss entire classes of failure that show up in modern architectures.
API-specific vulnerabilities
OWASP publishes a separate API Security Top 10 for mass assignment, unbounded object-level access, and broken function-level authorisation that show up more clearly in APIs than in page-centric apps. If your product is an API with a thin client, that list is often the better day-to-day checklist, with the web Top 10 still covering crypto, components, and design.
Client-side JavaScript risks
Third-party scripts, tag managers, and browser supply chain issues can skim sessions or payment fields without a server-side Top 10 finding on your origin. Subresource integrity, strict content security policy, and a short approved-script list matter here.
Supply chain attacks beyond outdated components
Compromised build pipelines, malicious maintainers, and typosquat packages can introduce code that never had a CVE on the day you installed it. Category #6 covers known flaws in identified components. It does not fully describe a trusted publisher turning hostile after install.
AI-specific risks
Prompt injection, model poisoning, and personal-data leakage through retrieval-augmented LLM features are already appearing in production assistants. Prompt injection overlaps Injection, but model integrity and training-data leakage do not fit the 2021 ten cleanly.
If you only track the published Top 10, you will miss those surfaces. Add them to the threat model when you expose APIs, load third-party JavaScript, automate builds, or connect language models to internal data. Use a fuller control set such as OWASP ASVS when you need requirement-level coverage rather than awareness ranking.
Your Next Steps: From Awareness to Action
To move from OWASP Top 10 awareness to action, assess your applications, prioritise by likelihood and impact, remediate the highest scores, verify the fixes, then establish ongoing testing. Awareness without that loop does not reduce risk. Do not try to close all ten in one sprint. Sequence work, keep owners visible, and treat verification as a planned phase rather than an afterthought.
- Assess. Run a baseline to see which of the 10 apply. Automated DAST and SAST tools such as OWASP ZAP or Burp Suite catch many injection, misconfiguration, and some crypto issues. Use them as a floor, not a ceiling. Scope the assessment to real roles, APIs, and data stores, or you will get a clean report on the wrong surface.
- Prioritise. Apply the 1–5 likelihood and impact scores from the previous section. Do not copy the OWASP rank blindly. Decide whether in-house engineers can own the fix or whether you lack bandwidth and specialised skills for authorisation, crypto, or cloud-path testing.
- Remediate. Fix the highest-priority items first using the mitigation steps in the breakdown sections. Give developers a clear owner, deadline, and regression test for each item. Avoid fixing one class in isolation if a chained path still works, for example closing a metadata URL in the PDF feature while internal APIs still trust any caller on the VPC.
- Verify. Retest after the fix. Confirm the original exploit path is closed and that the change did not open a new path. Remediation without verification is incomplete. A practical pattern is to rerun automated scans as soon as the fix lands, then schedule a focused manual retest within 30 to 60 days for critical applications so bypasses and regressions are caught before you close the risk.
- Establish ongoing testing. Test at least annually. Test more often for high-risk applications or those with frequent releases. Align tests with major releases, new identity providers, cloud changes, and new data flows, not only with the calendar. For critical apps, add scanning in CI/CD so regressions fail the build rather than waiting for the next annual window.
| Approach | What it catches well | What it misses | When to use it |
|---|---|---|---|
| Automated scanning (DAST/SAST) | Known injection patterns, some misconfigurations, dependency CVEs when SCA is included, obvious TLS issues | Complex access control, business logic, chained exploits, insecure design, many SSRF and workflow abuses | Every build or on a short cycle as a regression net |
| Professional penetration testing | Authorisation flaws, chained attacks, context-aware abuse of real user roles, design gaps, cloud metadata paths | Issues outside the agreed scope, or code paths never exercised if scope is too narrow | Before go-live, after major change, and on a defined cadence for critical apps |
Automated tools are a good baseline. They do not replace a human tester who can follow a business rule, hop tenants, and chain SSRF with weak authorisation. In-house scanning should continue between engagements. External testing is warranted when the application is high risk, when you need independent evidence for stakeholders, or when your team cannot safely simulate real attacker paths.
For a thorough assessment of your web applications, professional web application penetration testing can identify vulnerabilities that automated tools miss, including complex business logic flaws and chained attacks.
Frequently Asked Questions
What is the OWASP Top 10?
The OWASP Top 10 is a consensus awareness document from the Open Worldwide Application Security Project that ranks the ten most critical web application security risks. The current edition is 2021, updated about every 3 to 4 years from exploit data and expert input.
It is not a certification and not a legal checklist. Use it to brief teams and to shape testing, then back it with threat modelling and verification.
What are the 10 OWASP vulnerabilities?
The 10 OWASP vulnerabilities in the 2021 list are:
- Broken Access Control
- Cryptographic Failures
- Injection
- Insecure Design
- Security Misconfiguration
- Vulnerable and Outdated Components
- Identification and Authentication Failures
- Software and Data Integrity Failures
- Security Logging and Monitoring Failures
- Server-Side Request Forgery
They are ordered by combined prevalence and impact evidence. Your own ranking should still follow the data you hold and how your application is built.
What is the most common web application vulnerability?
Broken Access Control is the most common web application vulnerability in the OWASP Top 10 2021 data, appearing in approximately 94% of tested applications. It lets users view or change data and functions outside their permissions, usually because the server skipped an authorisation check.
Treat object-level and function-level tests as mandatory, because scanners often miss them.
What changed in the OWASP Top 10 2021 update?
The 2021 update renamed Sensitive Data Exposure to Cryptographic Failures, renamed Insufficient Logging and Monitoring to Security Logging and Monitoring Failures, and added Insecure Design, Software and Data Integrity Failures, and SSRF.
XSS was folded into Injection, and XXE was merged into other categories. Existing 2017 controls still matter, but design, pipeline integrity, and SSRF need explicit coverage.
How do I mitigate OWASP Top 10 vulnerabilities?
Mitigate OWASP Top 10 vulnerabilities by finding which risks are real on your applications, scoring them by likelihood and impact, applying the specific control for each class, then retesting.
Parameterise queries, enforce server-side authorisation, use modern crypto and MFA, harden config, patch components, sign builds, and monitor auth and access events.
No single product removes all ten. Verification is part of mitigation, not an optional extra.
How often should I test my web applications for OWASP Top 10 vulnerabilities?
Test web applications for OWASP Top 10 vulnerabilities at least annually, and more often when the app is high risk or ships frequently. Add tests around major releases, identity changes, and new infrastructure.
Use automated scanning on a short cycle and schedule manual testing to catch access control, logic, and chained issues. Retest after remediation so fixes are proven before you close the risk.
Ready to move from awareness to action?
Assess which of the ten risks are exploitable on your applications, prioritise by likelihood and impact, then verify fixes with testing that goes beyond automated scans.