Across real-world penetration testing engagements, the same handful of web app vulnerabilities surface time and again, regardless of industry, application size, or development team maturity.
These aren’t obscure or highly technical flaws. In fact, they’re common, well-understood weaknesses that continue to slip through development and release cycles, leading to security issues that could have been easily preventable with the right insight.
This article sets out the top 10 web vulnerabilities OnSecurity’s testers encounter most consistently, why they keep appearing, and what practical remediation looks like for each.
What Are The Top 10 Web Application Vulnerabilities?
The top 10 web application testing vulnerabilities posing the greatest threat to businesses today surprisingly have not changed as much as you would think in the wake of AI and advancing threats.
Most of the vulnerabilities below stem from insecure design, data integrity failures and basic security control gaps, not advanced attack methods. These common web vulnerabilities each pose unique threats to your organisation’s web security, and understanding them is essential in proactively defending against them.
The 10 most common threats to web applications today, based on OnSecurity’s testing team’s personal experiences and staple cybersecurity frameworks such as the OWASP Top 10.
1. SQL Injection
SQL injection occurs when unsanitised user input is passed directly into a database query, allowing an attacker to manipulate that query to extract, modify, or delete data.
Despite being one of the longest-documented vulnerabilities in web security, it still turns up in engagements, often through legacy code, raw ORM queries or stored procedures that build SQL dynamically.
The Fix
Use parameterised queries or prepared statements throughout, and never build SQL commands by concatenating user input. Connect to the database with least-privilege accounts too, so a successful injection can only reach the data that account actually needs.
2. Cross-Site Scripting (XSS)
Cross-site scripting arises when an application renders unescaped user input directly in the browser, allowing an attacker to inject malicious scripts that execute in another user’s session. Testers frequently find this in comment fields, search functions, and any input reflected back to the user without proper handling.
The Fix
Remediation centres on consistent output encoding at the point of rendering, combined with a properly configured Content Security Policy to limit the damage of any script that does slip through.
3. Broken Access Control and IDOR
Broken access control, particularly insecure direct object references (IDOR), occurs when an application fails to verify that a user is authorised to access the specific resource they’re requesting, such as another customer’s invoice or account record.
This is consistently one of the most damaging findings in an engagement, since it often requires no technical sophistication to exploit, simply changing an ID in a URL or request.
The Fix
The fix is to enforce authorisation checks server-side on every request, never relying on the assumption that a user won’t guess or manipulate an identifier.
4. Security Misconfiguration
Security misconfiguration covers a broad category, including default credentials left unchanged, error messages that reveal system internals, and administrative interfaces exposed to the public internet.
As your organisation’s infrastructure evolves, these issues tend to accumulate, and teams often create them through stopgap deployment decisions that they never revisit.
The Fix
A hardened build baseline, used across all environments and reviewed often, fixes most issues before production.
5. Cryptographic Failures
Cryptographic failures occur when sensitive data, such as passwords, payment details, or personal information, is transmitted or stored without adequate encryption, or protected using outdated algorithms that no longer hold up against modern attack techniques.
Testers regularly find data sent over unencrypted HTTP connections, weak hashing algorithms protecting stored passwords, or encryption keys hardcoded directly into application source.
The Fix
Enforce TLS across all data in transit, use strong, modern hashing algorithms for stored credentials, and manage encryption keys through a dedicated secrets management solution rather than embedding them in code.
6. Broken Authentication and Session Management
Broken authentication covers weaknesses in how an application verifies user identity and maintains that identity across a session, including weak password policies, predictable session tokens, and sessions that fail to expire after logout or a period of inactivity.
Attackers exploit these gaps to hijack accounts or maintain access long after a user believes they’ve logged out. OWASP Top 10 places serious emphasis on identification and authentication failures like this, as they remain one of the most consistently exploited weaknesses behind real-world account takeovers and data breaches.
The Fix
Implement phisher-resistant MFA, generate session tokens using a cryptographically secure method, and enforce strict session expiry and invalidation on logout.
7. Vulnerable and Outdated Components
Applications rarely run on code written entirely in-house. Third-party libraries, frameworks, and plugins make up a significant share of most codebases, and when those components fall out of date, any publicly known vulnerability becomes an open door for attackers who don’t need to find a new flaw, they can exploit a documented one.
The Fix
Maintain an accurate inventory of every third-party component in use, patch known vulnerabilities promptly, and remove or replace dependencies that are no longer actively maintained.
8. Server-Side Request Forgery (SSRF)
SSRF occurs when an application can be tricked into making requests to unintended destinations on an attacker’s behalf, often used to reach internal systems that would otherwise be inaccessible from outside the network. This has become increasingly serious as more applications move to cloud environments, where attackers can use SSRF to reach sensitive metadata endpoints and extract credentials.
You should also be cautious of cross-site request forgery (CSRF), which also forges an unauthorised request but from the user’s browser, instead of the vulnerable application server itself.
The Fix
Validate and sanitise any URLs or hostnames that users supply, restrict outbound requests to an approved allowlist, and segment internal services away from anything an attacker can trick the application into contacting.
9. Insecure File Upload
Insecure file upload functionality allows an attacker to upload malicious files, such as web shells or scripts, that the server then executes or serves back to other users. This is a particularly damaging finding when discovered, since it frequently hands an attacker a direct route to remote code execution on the underlying server.
The Fix
Fixing it means layering several controls rather than relying on one. The Content-Type header shouldn’t be trusted, as it’s set by the client and trivial to spoof; validate the file’s actual contents and extension against an allowlist instead. Renaming files on upload stops attackers from controlling the filename or path, and enforcing size limits prevents uploads from being used to exhaust storage or crash the service. Scanning files for malware catches known threats before they’re stored, and serving uploads from a separate domain means that even if something malicious slips through, it can’t run in the context of your main application.
10. Security Logging and Monitoring Failures
Without adequate logging and monitoring, organisations often have no way of knowing an attack has taken place until the damage is already done. Clients often can’t show any evidence that our testing activity was detected.
The Fix
Log authentication events, access control failures, and other security-relevant activity consistently, and route that logging into a monitoring system capable of flagging anomalies in real time rather than sitting unreviewed.
Why Fixing Common Web Application Vulnerabilities Matters
None of these ten vulnerabilities requires nation-state sophistication to exploit, which is exactly what makes them so consistently dangerous. They persist not because they’re difficult to understand, but because they slip through the gaps between fast-moving development cycles and security review.
Addressing them systematically does more than close individual holes.
It raises the baseline of your entire application, making the remaining, more sophisticated attack paths harder to find and exploit. Penetration testing is what surfaces these issues before an attacker does, giving your team a prioritised, evidence-based list of what to fix first.
Regular testing also catches recurrence. Vulnerabilities like these have a habit of creeping back in as new features ship and new developers join a codebase, so treating testing as an ongoing part of your development lifecycle, rather than a one-off exercise, is what actually keeps your security posture in good shape over time.
For organisations wanting a clear, prioritised picture of where these ten vulnerabilities might already exist in their own applications, OnSecurity’s web application penetration testing combine manual expertise with real-world attacker techniques to find what automated scanning alone consistently misses.
OnSecurity’s CREST-accredited testers combine manual testing with real-world attacker techniques.
Get an instant, free quote today.
Frequently Asked Questions
Are these the same as the OWASP Top 10?
They overlap significantly, since both are drawn from real-world attack data, but this list reflects what OnSecurity’s testers encounter most consistently across live engagements rather than a fixed annual ranking.
Can automated scanning catch all ten of these web application vulnerabilities?
No. Automated tools are effective at flagging known patterns like outdated components or missing security headers, but issues like broken access control and business logic flaws typically require manual testing to identify reliably.
How often should web applications be tested for these vulnerabilities?
Ideally as part of every major release, alongside a regular testing cadence, since new code introduces new risk regardless of how well an application performed in its last assessment.


