The threat map: OWASP Top 10:2025, API Security Top 10:2023 and baseline headers
Name the class first; most of the top classes are logic a scanner cannot see.
Predict first
Before you read: predict
During ECON-201, Mia, signed in to ExamHall with her own account, opens her submitted attempt at /attempts/77/review. She edits the address to /attempts/78/review; the server reads 78 as an attempt number, loads that attempt and shows her Omar's answers.
Under the OWASP Top 10:2025, which category does this defect belong to?
The 30-second version
The OWASP Top 10 is a ranked list of risk categories, not a list of bugs to scan for: each category is a family of weaknesses, and a defect belongs to the family of its root cause. Access control leads the 2025 list, and the API list opens with object-level authorization. A few response headers close cheap gaps.
Name the class first; most of the top classes are logic a scanner cannot see.
How it works
Step 1 of 15
In the kitchen
- "failing to give way" groups thousands of crashes with one cause → a category groups many CWEs (step 1)
Analogy: A national road-safety report (road safety)
The report ranks causes of crashes, not single crashes, from police records and a survey of crash investigators.
| In the road-safety report | On the threat map |
|---|---|
| "failing to give way" groups thousands of crashes with one cause | a category groups many CWEs (step 1) |
| causes ranked from police records, plus two investigators say records miss | eight from data, two from the survey (step 2) |
| a speed camera catches speeding and never "failed to look" | a scanner finds little access-control or design flaw (step 8) |
| seat belts and mirrors fitted to every car at the factory | baseline headers on every response (step 11) |
In real terms: a finding is filed under its cause, and the top causes are found by people reading code.
Breaks down when: a report's causes rarely change in a year. OWASP's categories merge and move between editions (steps 4–5), so cite the edition.
Examples, run for real
4.1 ExamHall EXH-3770: a header check over the exam page
ExamHall's exam page went out with no baseline header and with X-Powered-By: Express; any site could frame it. MR !4070 adds the four headers and drops X-Powered-By. The check reads one response; Chromium frames the page from a third-party origin:
4.1 before MR !4070: Strict-Transport-Security absent · X-Content-Type-Options: nosniff absent · CSP frame-ancestors absent · Referrer-Policy absent · 0 of 4 present · x-powered-by present · framed by a third-party page: shown
4.1 after MR !4070: Strict-Transport-Security present · X-Content-Type-Options: nosniff present · CSP frame-ancestors present · Referrer-Policy present · 4 of 4 present · x-powered-by absent · framed by a third-party page: refused
frame-ancestors 'self' now refuses the third-party frame (step 11). The check finds what is missing on one response; it finds no access-control flaw (step 8).
4.2 Ticketing: what a linked site learns
A box office's order page sits at /orders/5521?code=K7Q2 and links to a parking site. Chromium follows the link:
4.2 order page /orders/5521?code=K7Q2, no Referrer-Policy: the parking site receives Referer <box office origin>/
4.2 same page with Referrer-Policy: no-referrer: the parking site receives Referer (none)
The default already kept the path and code at home (step 14); setting the policy states that intent instead of trusting each browser's default.
Try it
Answer first, then check. Nothing is saved.
Question 1 of 7
A box office's MR changes three files of its API, where one Node process serves every fan during an on-sale.
Which change should the review block?
Question 2 of 7
A box office serves its seat picker at /seats with two response headers: X-Frame-Options set to DENY, and Content-Security-Policy set to frame-ancestors 'self' https://tours.partner.test. Three pages frame /seats in an <iframe>: the box office's own home page, the partner, https://tours.partner.test, and a fan blog.
In Chromium, which frames show the seat picker?
Question 3 of 7
A box office's API serves GET /api/events/9 to every signed-in user, and only organisers are meant to delete events. Ola, a fan signed in with her own token, sends DELETE /api/events/9, and the event is deleted.
Under the OWASP API Security Top 10:2023, which risk is this?
Question 4 of 7
ExamHall's question editor lets an author give an image's web address; ExamHall's server then downloads the image from that address and stores it. A review finds that the server fetches any address it is given, including hosts on ExamHall's private network.
Under the OWASP Top 10:2025, which category files this defect?
Question 5 of 7
An interviewer asks: "Walk me through ExamHall's surfaces (the candidate app, the proctor console, the admin pages, the outgoing grade webhooks and the file uploads) and tell me which Top 10:2025 category you would check first on each, and why." Answer in at most 150 words.
Write one line per surface.
Question 6 of 7
A box office has two pages a fan blog tries to frame. The checkout page's HTML <head> holds <meta http-equiv="X-Frame-Options" content="DENY"> and <meta http-equiv="Content-Security-Policy" content="frame-ancestors 'none'">, and the page sends neither as a response header. The account page holds no framing tag in its HTML and sends X-Frame-Options with the value DENY as a response header.
In Chromium, which pages show inside the blog's frames?
Question 7 of 7
ExamHall's build installs its packages fresh on every run. One morning it installs a new release of a date-formatting library that its maintainer never wrote: someone had taken over the maintainer's registry account and published it.
Under the OWASP Top 10:2025, which category files this?
Go deeper
Pro tip
- When asked "which of the Top 10 have you fixed?", answer with a category, the defect and the test that proves the fix. When: any security question in a behavioural or design round. Status: SELF (this lesson's practice target; not run).
Source
OWASP's lists change between editions: valid as of 2026-10-13.
- OWASP Top 10:2025 (the row's first source), https://top10.owasp.org/2025/ (
top10-2025-index.txt): "The OWASP Top 10 is a standard awareness document for developers and web application security." (step 1); "A06:2025 - Insecure Design"; "A10:2025 - Mishandling of Exceptional Conditions". - OWASP Top 10:2025, Introduction, https://top10.owasp.org/2025/0x00_2025-Introduction/ (
top10-2025-intro.txt): "As indicated by the dashed line in the above figure, Server-Side Request Forgery (SSRF) has been rolled into this category."; "A03:2025 - Software Supply Chain Failures is an expansion of A06:2021-Vulnerable and Outdated Components" (step 5); "Therefore, we only pick eight of the ten categories from the data because it's incomplete." (step 2); "The results in the data are largely limited to what the industry can test for in an automated fashion." (step 8); "A10:2025 - Mishandling of Exceptional Conditions is a new category for 2025." (step 5). - OWASP Top 10:2025, A01 Broken Access Control, https://top10.owasp.org/2025/A01_2025-Broken_Access_Control/ (
top10-2025-a01.txt): "Permitting viewing or editing someone else's account by providing its unique identifier (insecure direct object references)" (step 3; t1); "Elevation of privilege. Acting as a user without being logged in or or gaining privileges beyond those expected of the logged in user (e.g. admin access)." (step 3; t2); "Model access controls should enforce record ownership rather than allowing users to create, read, update, or delete any record." (t1's D); "CWE-918 Server-Side Request Forgery (SSRF)". - OWASP Top 10:2025, A02 Security Misconfiguration, https://top10.owasp.org/2025/A02_2025-Security_Misconfiguration/ (
top10-2025-a02.txt): "The server does not send security headers or directives, or they are not set to secure values." (step 11). - OWASP Top 10:2025, A03 Software Supply Chain Failures, https://top10.owasp.org/2025/A03_2025-Software_Supply_Chain_Failures/ (
top10-2025-a03.txt): "They are often caused by vulnerabilities or malicious changes in third-party code, tools, or other dependencies that the system relies on.". - OWASP Top 10:2025, A05 Injection, https://top10.owasp.org/2025/A05_2025-Injection/ (
top10-2025-a05.txt): "An injection vulnerability is an application flaw that allows untrusted user input to be sent to an interpreter" and "causes the interpreter to execute parts of that input as commands". - OWASP Top 10:2025, A07 Authentication Failures, https://top10.owasp.org/2025/A07_2025-Authentication_Failures/ (
top10-2025-a07.txt): "When an attacker is able to trick a system into recognizing an invalid or incorrect user as legitimate, this vulnerability is present." (t1's B, t2's A). - OWASP Top 10:2025, A10 Mishandling of Exceptional Conditions, https://top10.owasp.org/2025/A10_2025-Mishandling_of_Exceptional_Conditions/ (
top10-2025-a10.txt): "or exceptions that are not handled at all, allowing the system to fall into an unknown and unpredictable state"; "CWE-636 Not Failing Securely ('Failing Open')" (step 6). - OWASP API Security Top 10, 2023 edition (the row's second source), https://owasp.org/API-Security/editions/2023/en/0x11-t10/ (
api-top10-2023.txt), which now redirects to api-security.owasp.org: "API1:2023 - Broken Object Level Authorization" (step 9); "Compromising a system's ability to identify the client/user, compromises API security overall."; "the lack of or improper authorization validation at the object property level". - OWASP API Security Top 10 2023, API1 BOLA, https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/ (
api1-2023.txt): "In the case of BOLA, it's by design that the user will have access to the vulnerable API endpoint/function.". - OWASP API Security Top 10 2023, API2 Broken Authentication, https://owasp.org/API-Security/editions/2023/en/0xa2-broken-authentication/ (
api2-2023.txt): "Authentication endpoints and flows are assets that need to be protected.". - OWASP API Security Top 10 2023, API3 Broken Object Property Level Authorization, https://owasp.org/API-Security/editions/2023/en/0xa3-broken-object-property-level-authorization/ (
api3-2023.txt): "API3:2023 Broken Object Property Level Authorization" (step 10). - OWASP API Security Top 10 2023, API5 Broken Function Level Authorization, https://owasp.org/API-Security/editions/2023/en/0xa5-broken-function-level-authorization/ (
api5-2023.txt): "Can a user perform sensitive actions (e.g. creation, modification, or deletion ) that they should not have access to by simply changing the HTTP method (e.g. from GET to DELETE)?". - OWASP HTTP Security Response Headers Cheat Sheet (the row's third source), https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html (
owasp-headers.txt): "Content Security Policy (CSP) frame-ancestors directive obsoletes X-Frame-Options for supporting browsers" (step 12); "Do not set this header or explicitly turn it off."; "Modern browsers default to strict-origin-when-cross-origin" and "Set the header explicitly rather than relying on browser defaults." (step 14); "X-Content-Type-Options: nosniff" and "instructs browsers to only access the website using HTTPS, even if a user attempts to connect over HTTP" (step 11). The meta-tag behaviour of step 13 is executed, not cited.
Related lessons
- Related: Security lens in review
- Related: Failure-mode thinking: what breaks at 10x and when X is down
- Related: XSS and Content Security Policy
- Related: Client trust boundary: what the browser can prove
- Related: SQL injection with ORMs and raw queries
- Related: Software supply chain: dependencies, install scripts, lockfiles
- Related: Secrets management: storage, injection, rotation, leakage
- Related: Server-side request forgery (SSRF)
- Related: Broken object-level authorization: whose record is this?
- Related: Security mindset: trust boundaries and least privilege
Checked against the tools and docs as of 2026-10-13.