Web › Module 1 › Lesson 1
What Broken Access Control Is
A01:2025 — authenticated ≠ authorized;.
Visual · broken_access_control_gate
Broken Access Control: If it is a home router login, STOP and OWASP Top 10:2025 A01.
Opening
Login succeeded. That is not a warrant to read every object, hit every admin route, or make the server fetch for you.
OWASP Top 10:2025 keeps Broken Access Control at A01 because the failure is simple and devastating: the application trusts that identity implies entitlement. Authentication answers “who are you?” Authorization answers “may this who do that on that object?” When the second check is missing, weak, client-only, or deny-by-accident instead of deny-by-default, attackers walk horizontal (peer data) or vertical (admin functions) paths with ordinary requests. This is ORIGINAL Cyberlium Topic 10 teaching mapped to OWASP Top 10:2025 A01 — not official OWASP training, not a certification, not a warrant to probe strangers.
1. A01 in one sentence: policy missing after identity is proven
Broken Access Control is the category where the server fails to enforce what each principal may read, write, create, delete, or invoke. The attacker’s goal is not “break crypto” — it is to act as a privileged or peer user without earning that policy. Classic shapes: skip role checks on /admin, change a userId in a URL, replay a privileged API from a low-priv session, force the server to request internal URLs (SSRF, now called out under A01:2025), or abuse CORS / forced browsing to reach surfaces that should stay closed. Finding language: “Endpoint accepts authenticated caller but does not assert ownership, tenant, or role before acting.” Fix language: “Deny by default; enforce server-side policy on every object and function; test cross-user and cross-role.” Client UI hiding a button is not access control.
Command guide
A01 BAC — A01 in one sentence
═══ INSTALL ═══
Linux (Debian/Ubuntu):
Command — copy this
sudo apt install curl
macOS: Built-in
Windows: Built-in (PowerShell: Invoke-WebRequest)
═══ LINUX / macOS ═══
Test for Broken Access Control (on YOUR test app) Try accessing admin endpoint as normal user
Command — copy this
curl -v http://localhost:8080/admin curl -v http://localhost:8080/api/users/2 -H 'Cookie: session=user1_token'
Test IDOR — change resource ID
Command — copy this
curl http://localhost:8080/api/orders/1001 curl http://localhost:8080/api/orders/1002 # should be denied if not your order
═══ WINDOWS ═══
Optional command
PowerShell
Command — copy this
Invoke-WebRequest -Uri 'http://localhost:8080/admin' -Method GET
Invoke-WebRequest -Uri 'http://localhost:8080/api/users/2' -Headers @{Cookie='session=user1_token'}2. Horizontal vs vertical: peer data vs privilege climb
Horizontal failure: user A reads or mutates user B’s invoice, message, or profile at the same privilege tier. Vertical failure: a standard user reaches an admin export, feature flag flip, or privileged RPC. Both are A01. Attackers prefer boring tools — curl, a browser, a proxy that edits one parameter — because the bug is missing checks, not exotic payloads. CSRF sits in the access-abuse neighborhood: the browser sends the victim’s cookies to a state-changing endpoint the victim did not intend. Treat it as “actions without intentional authorization,” still on apps YOU own for demos. This lesson names it; later modules deepen related families without turning you into a foreign-host hunter.
3. Why A01:2025 folds SSRF into access control literacy
Server-Side Request Forgery is an access-control failure of a different shape: the server’s network position becomes the attacker’s client. The app fetches a URL the caller influenced, reaching localhost, internal APIs, or link-local metadata the attacker cannot hit directly. That is still “acting beyond authorized reach.” Lesson 3 deepens SSRF with allowlist thinking — never real AWS metadata PoCs against accounts you do not own. Map your mental model: IDOR = object policy missing; forced browsing = function policy missing; SSRF = server-as-proxy beyond intended destinations. One category, three common report titles.
4. What you ship: deny-by-default, server asserts, tests that fail loud
Shipping list for A01: centralize authorization; deny by default; resolve the object then assert owner/tenant/role; never trust client-supplied roles or “isAdmin” flags; prefer server-side session identity over body userId; rate-limit and log denials; add automated tests where user A cannot read B and user cannot hit admin. Random UUIDs slow guessing — they do not replace checks. Report hygiene: describe the missing check and the impact class (confidentiality, integrity, privilege). Do not paste exploit kits. Do not aim PoCs at hosts outside written RoE. Cyberlium labs stay on loopback and files under $HOME/cyberlium-lab.
5. What you record before the next lesson
Date (UTC). A01 = Broken Access Control (OWASP Top 10:2025). Authn ≠ authz. Horizontal vs vertical one line each. SSRF named as server-fetch access failure. Identify curl of http://192.168.0.1/ (or SAFE 127.0.0.1:8765 if that IP is a router). Ship: deny-by-default + server policy. Ethics: NEVER foreign SaaS IDOR; NEVER unauthorized cloud metadata; NEVER classmate APIs; NEVER hydra/nmap the LAN. Path: $HOME/cyberlium-lab/a01-bac-literacy-notes.txt, chmod 600. Legal: original Cyberlium — not official OWASP certification.
6. Wrong vs right: stranger hunting vs literacy on systems you own
Worked failure — same word “access control,” opposite target. Right never needs a foreign tenant.
Wrong
Enumerate invoice ids on a live SaaS. Hydra the home router because 192.168.0.1 answered. nmap 192.168.0.0/24. Hit real cloud metadata “for A01.” Walk admin paths on a classmate staging host without RoE.
Right
Identify the DEMO banner with curl. If it is Router Admin, STOP and Name authn vs authz, horizontal vs vertical, and SSRF-as-access. Lock a01-bac-literacy-notes.txt under $HOME/cyberlium-lab, chmod 600. Next: IDOR and Object-Level Failures.
Create the notes file now so Lesson 2 has a place to attach IDOR observations. Two terminals if you start the teaching server: identify first, then curl SAFE. The helper does not scan the internet.
Mission: a01-bac-literacy-notes.txt in cyberlium-lab (mode 600)
1) 0.0.1:8765 after starting a01_bac_literacy.py.2) Write authn ≠ authz, horizontal vs vertical, and SSRF-as-access; fill $HOME/cyberlium-lab/a01-bac-literacy-notes.txt; chmod 600. 3) Ethics: no foreign SaaS IDOR, no hydra/nmap of the LAN, no unauthorized cloud metadata.
Stuck? Ask Cyberlium AI Mentor
If “I cannot learn A01 without hacking a real site” still feels true, ask for a hint — not a target list. Try: "Hint only: why authn ≠ authz, what curl -sS -D - against MY lab proves, and where locked a01-bac-literacy-notes.txt lives?" You still fill the file. No foreign hosts.
You now treat Broken Access Control (OWASP Top 10:2025 A01) as missing policy after identity — horizontal, vertical, and server-fetch shapes — with an identified demo asset and locked local notes. This is original Cyberlium teaching, not official OWASP certification. Next — IDOR and Object-Level Failures — ownership checks on YOUR lab.
Knowledge Check
APPLY: You are logged in as alice. An /admin/export endpoint returns a dump with no role check. What failed under A01, and what is the fix direction?
Multiple choice
Knowledge Check
APPLY: True or False: Hiding the Admin button in React fully remediates Broken Access Control.
True or False
Knowledge Check
APPLY: curl http://192.168.0.1/ shows a TP-Link “Router Admin” login. What do you do?
Multiple choice