OWASP Top 10: Critical Web Vulnerabilities
The most exploited threats in web applications and how to prevent them with concrete measures
The OWASP Top 10 is the reference standard for identifying the most critical security risks in web applications. Published by the Open Worldwide Application Security Project, it is updated periodically based on real data from thousands of organisations and millions of detected vulnerabilities.
Knowing this ranking is not just an academic exercise — it is a practical roadmap for prioritising security efforts. Each Top 10 vulnerability has clear detection patterns and proven prevention measures that any development team can implement.
A01: Broken access control
Broken access control holds the top position because it is the most commonly found vulnerability in real-world applications. It occurs when a user can access resources or perform actions they should not be able to: viewing other users’ data, modifying permissions or accessing administrative functions.
Prevention requires denying access by default, implementing access controls on the server (never trusting the client), applying the principle of least privilege and logging all access control failures to detect attack patterns.
A02: Cryptographic failures
This category covers the exposure of sensitive data through incorrect use or absence of cryptography. It includes transmitting data without TLS, storing passwords in plain text, using obsolete algorithms (MD5, SHA-1, DES) or generating weak cryptographic keys.
Classify all data your application handles and apply appropriate encryption both in transit (TLS 1.2+) and at rest (AES-256). Use bcrypt or Argon2 for passwords. Do not store sensitive data you do not need.
A03: Injection
Injection vulnerabilities — SQL, NoSQL, OS command, LDAP — occur when untrusted data is sent to an interpreter as part of a command or query. The attacker can read, modify or delete data, or even execute commands on the server.
- Always use parameterised queries or prepared statements — never concatenate user input into queries
- Apply server-side input validation with allowlists
- Implement character escaping according to context (SQL, HTML, JavaScript)
- Limit the privileges of the database account your application uses
A04: Insecure design
Introduced in the 2021 edition, this category highlights that many security problems originate in the design phase, not in implementation. An insecure design cannot be fixed by perfect implementation: if the password recovery flow relies solely on email, for example, no code can compensate for that architectural weakness.
Prevention requires threat modelling from the start of the project, security requirements review and the use of secure design patterns. Frameworks like STRIDE or PASTA help identify design risks before writing code.
A07: XSS and client-side attacks
Cross-Site Scripting (XSS) allows an attacker to inject malicious scripts into pages viewed by other users. It can steal sessions, redirect to phishing sites or manipulate page content. Three variants exist: reflected, stored and DOM-based.
Cross-Site Request Forgery (CSRF) tricks the user’s browser into performing unwanted actions on a site where they are authenticated. XSS prevention requires escaping all output according to its context and using Content-Security-Policy. For CSRF, implement anti-CSRF tokens and validate the Origin header.
A05: Security misconfiguration
The default configuration of most servers, frameworks and cloud services is not secure. Unnecessary open ports, default credentials, verbose error messages, enabled directory listing or missing security headers are all exploitable configuration errors.
- Implement a repeatable, documented hardening process for each environment
- Remove unused features, components and documentation
- Automate configuration verification with tools like Ansible, Terraform or CIS Benchmarks
- Review cloud security configurations (public S3, permissive security groups) with tools like ScoutSuite or Prowler
A06: Components with known vulnerabilities
Modern applications depend on dozens or hundreds of third-party libraries. If any has a known vulnerability (CVE) and is not updated, your application inherits that risk. The Log4j attack in 2021 demonstrated the devastating impact of a single vulnerable dependency.
Maintain an up-to-date inventory of dependencies with their versions. Use tools like Dependabot, Snyk or Renovate to receive automatic vulnerability alerts. Establish an internal SLA to patch critical dependencies within 48 hours.
Key Takeaways
- Broken access control and cryptographic failures top the list of critical vulnerabilities
- Injection is prevented with parameterised queries and strict input validation
- Insecure design cannot be fixed with code — it requires threat modelling from the start
- Vulnerable dependencies are a massive attack vector: automate their monitoring
- Secure configuration is just as important as secure code
Want to evaluate your application against the OWASP Top 10?
We perform OWASP-based security audits to identify and fix vulnerabilities before they are exploited.