Every year, security teams run API assessments. Every year, the same findings come back. Broken Object Level Authorisation. Excessive data exposure. Unrestricted resource consumption. The OWASP API Security Top 10 was published to help — but most engineering teams still ship these vulnerabilities. Here's why.
Ask any senior engineer if they've heard of BOLA (Broken Object Level Authorisation) and most will say yes. Ask them whether their latest API endpoint validates that the requesting user actually owns the object they're accessing — and things get quieter.
The gap isn't knowledge. It's the translation from abstract vulnerability class to concrete implementation decision. OWASP API1:2023 — BOLA is easy to understand in theory. It's surprisingly easy to miss when you're three sprints deep building a microservices mesh with 40 endpoints.
This remains the most exploited API vulnerability year after year. The pattern is always the same: an endpoint accepts a user-controlled ID and returns the resource — without checking whether the authenticated user is authorised to access that specific resource.
The fix sounds simple — validate ownership server-side on every request. In practice, this requires discipline across every endpoint, every sprint, with every new developer who joins the team. One missed check becomes a data breach.
Authentication failures in APIs are rarely about not having auth at all. They're about partial authentication — endpoints that check tokens on most routes but miss a few, token validation that doesn't verify the algorithm (alg: none attacks), or refresh token flows that don't expire properly.
The most common pattern I see in assessments: API gateways that enforce authentication at the perimeter but internal service-to-service calls that use no authentication at all. If an attacker can reach the internal network — through SSRF, misconfigured cloud infrastructure, or lateral movement — they have full unauthenticated access to everything behind the gateway.
This one is newer to the Top 10 but has been around forever under different names (mass assignment, over-posting). The issue: APIs that accept more properties in a request body than they should, allowing attackers to set fields like role, isAdmin, or verified that were never meant to be user-controlled.
// Vulnerable — accepts all properties from request body PUT /api/users/me { "name": "Rakesh", "email": "[email protected]", "role": "admin" // attacker-added }
Rate limiting is one of those controls that everyone knows they need and few implement correctly. The typical failure: rate limits that apply per-IP (trivially bypassed with distributed requests), limits that only apply to authentication endpoints but not business logic endpoints, or no limits at all on resource-expensive operations like bulk exports or search queries.
Beyond DDoS risk, unrestricted resource consumption enables credential stuffing, enumeration attacks, and in some cases, direct financial damage to the organisation running the API.
The root causes are consistent across every team I've assessed:
After running dozens of API security assessments, here's what moves the needle:
The OWASP API Top 10 isn't a checklist to run once a year before an audit. It's a map of where your APIs are most likely bleeding right now. The teams that take it seriously build API security into their development process — not as a separate security review, but as a design constraint from the first endpoint.
Attackers aren't waiting for your next pentest to find BOLA. They're running automated scanners across your public API surface today.