Strokovno podrocje

API Security

Swagger je vaš najhujši sovražnik. API-ji razkrijejo več, kot mislite.

API-ji so postali primarna napadalna površina večine aplikacij. In večina razvijalcev objavi popolno dokumentacijo o tem, kako jih napasti. Swagger/OpenAPI specifikacije, debug endpointi, starejše verzije API-ja - vse to je zemljevid za napadalce.

OWASP API Security Top 10

Razumevanje najpogostejših API ranljivosti:

API1: Broken Object Level Authorization (BOLA)

Najpogostejša kritična API ranljivost. API ne preverja, ali ima uporabnik pravico dostopa do zahtevanega objekta.

  • Primer: GET /api/users/123/orders - sprememba 123 v 124 razkrije naročila drugega uporabnika
  • Variacije: GUID-i namesto ID-jev niso rešitev - pogosto so predvidljivi ali izpuščeni drugje
  • Testiranje: Sistematično spreminjanje vseh identifikatorjev v zahtevah

API2: Broken Authentication

Napačna implementacija avtentikacijskih mehanizmov.

  • JWT brez validacije podpisa - Strežnik sprejme katerikoli token
  • Algorithm confusion - Sprememba RS256 v HS256, podpis s public key
  • Weak secrets - JWT podpisan s šibkim ključem, razbijemo offline
  • Token leakage - Tokeni v URL-jih, logih, error sporočilih

API3: Broken Object Property Level Authorization

API razkrije več lastnosti objekta kot bi moral, ali dovoli spreminjanje zaščitenih lastnosti.

  • Excessive data exposure: API vrne vse atribute, vključno s sensitive (password hash, internal IDs)
  • Mass assignment: Dodajanje dodatnih polj v zahtevo (role: "admin", balance: 99999)

API4: Unrestricted Resource Consumption

Pomanjkanje omejitev porabe resursov.

  • No rate limiting: Omogoča brute force, credential stuffing, DoS
  • Unbounded queries: SELECT * brez LIMIT, GraphQL brez depth limitov
  • Large file uploads: Izčrpanje diska ali pomnilnika

API5: Broken Function Level Authorization

Administratorske funkcije dostopne navadnim uporabnikom.

  • Skriti admin endpointi: /api/admin/users, /api/internal/config
  • HTTP method tampering: GET deluje, POST/DELETE tudi - brez avtorizacije
  • Parameter manipulation: Dodajanje admin=true v zahtevo

JWT (JSON Web Token) napadi

JWT je standard za avtentikacijo, a je pogosto napačno implementiran.

Struktura JWT

Header.Payload.Signature - Base64 encoded, ne šifriran!

Napadi

  • Algorithm None: Sprememba algorithm v "none", odstranitev signature
  • Algorithm Confusion: RS256 → HS256, podpis s public key kot secret
  • Key ID Injection: kid parameter za path traversal ali SQL injection
  • JWK Injection: Vključitev napadalčevega ključa v jku/jwk header
  • Weak Secret Brute Force: hashcat/john za razbijanje HS256 secretov
  • Token Expiry: Sprejemanje pretečenih tokenov, predolgi exp

Zaščita

  • Whitelist algoritmov - ne sprejemaj "none" ali nepričakovanih
  • Močni secrets za HS256 (32+ bajtov naključnih)
  • Kratki exp časi, refresh tokeni
  • Validacija vseh claims (iss, aud, exp, nbf)

OAuth 2.0 ranljivosti

OAuth je kompleksen protokol z veliko možnostmi za napake.

Authorization Code Flow napadi

  • Open Redirect: Manipulacija redirect_uri za krajo authorization code
  • CSRF: Pomanjkanje state parametra omogoča account linking napade
  • Code Reuse: Authorization code uporaben večkrat
  • Scope Upgrade: Zahteva za višje scope kot dovoljeno

Implicit Flow problemi

  • Token v URL: Izpostavljenost v Referer headerju, browser history
  • Token Leakage: XSS na redirect URI strani ukrade token
  • Mix-up Attack: Napadalec podmeni authorization server

Client Credentials napake

  • Hardcoded secrets: client_secret v frontend kodi, mobile apps
  • Insufficient client validation: Sprejemanje requestov brez client auth

GraphQL specifične ranljivosti

GraphQL prinaša nove napadalne vektorje, ki jih REST nima.

Introspection

Avtomatična dokumentacija celotne sheme - imenski prostor vseh tipov, polj, mutacij.

  • Napad: Query __schema za popoln popis API-ja
  • Obramba: Onemogočite introspection v produkciji

Query Complexity napadi

  • Deep nesting: Rekurzivne poizvedbe (user { friends { friends { friends... }}})
  • Batching: Veliko operacij v eni zahtevi
  • Aliases: Ista poizvedba večkrat z različnimi aliasi
  • Fragments: Fragmenti za povečanje kompleksnosti

Injection

  • SQL Injection: V argumentih, ki gredo v bazo
  • NoSQL Injection: Posebno pri MongoDB backend-ih

Zaščita GraphQL

  • Onemogočite introspection v produkciji
  • Implementirajte query depth in complexity limite
  • Rate limiting na operacijo, ne samo na endpoint
  • Field-level avtorizacija

Odkrivanje skritih API-jev

Ne testiram samo dokumentiranih endpointov.

Tehnike odkrivanja

  • Path fuzzing: /api/v1/users, /api/v2/users, /api/internal/users
  • Version discovery: Starejše verzije API-ja brez varnostnih popravkov
  • Debug endpoints: /debug, /test, /swagger, /api-docs, /graphiql
  • JavaScript analiza: API endpointi v frontend kodi
  • Mobile app reversing: API klici v mobilni aplikaciji
  • Wayback Machine: Stare verzije dokumentacije, razveljavljeni endpointi

Wordlists

  • SecLists API wordlists
  • Custom wordlists iz dokumentacije, frontend kode
  • Inteligentno fuzzing na podlagi najdenih endpointov

Rate Limiting obhod

Rate limiting je pogosto implementiran nepravilno.

Tehnike obhoda

  • IP rotation: Različni IP naslovi (proxy, VPN, cloud functions)
  • Header manipulation: X-Forwarded-For, X-Real-IP spoofing
  • Endpoint variation: /api/login, /api/Login, /api/login/, /api//login
  • Parameter pollution: email=a@b.com&email=c@d.com
  • Unicode normalization: admin vs ɑdmin
  • Case variation: admin@domain.com vs Admin@domain.com

Moj pristop k API testiranju

  1. Reconnaissance: Zbiranje vse dostopne dokumentacije, swagger specs, postman collections
  2. Mapping: Vse endpointe, parametre, authentication mehanizme
  3. Authentication testing: JWT, OAuth, session management
  4. Authorization testing: BOLA, BFLA na vsakem endpointu
  5. Input validation: Injection, type confusion, boundary testing
  6. Business logic: Workflow bypass, race conditions
  7. Rate limiting: Brute force, enumeration možnosti

Potrebujete API varnostni pregled?

Odkrijte ranljivosti v vaših REST, GraphQL in WebSocket API-jih preden jih odkrijejo napadalci.