Bilko — Entra OAuth hardening audit (2026-07, MC #105975)
Bilko — Entra OAuth hardening audit (2026-07)
MC: #105975 · Auditor: Parisa Tabriz (Securion) · Peer-verify: 6/7 PASS (nezavisni verifier) · Verdict: FINDINGS (2 low, 0 high/critical)
Povod: živa kampanja OAuth Client ID spoofinga (validacija ukradenih Entra kredencijala lažnim client ID-evima), TLDR/Proofpoint/THN 2026-07. Napomena o izvoru: MS blog o ShinyHunters (2026-07-13) je Salesforce-specifičan — audit rađen po OWASP OAuth 2.0 BCP okviru, ne po tom članku.
Rezultat
- 10 OK / 2 FINDING / 6 NEEDS-LIVE-TENANT (Bilko krak) + QODY = N/A (nema Entra; JWT HS256+argon2id+TOTP; grep dokaz 0 referenci).
- Jaka srž (potvrđena i John probe-om i peer-verifyjem): backend server-side pinuje audience+issuer (
EntraExternalIdService.kt:129-130), JWKS domain-pin na *.ciamlogin.com/login.microsoftonline.com (startup + per-call, fail-closed IllegalStateException); CSP connect-src IdP = tačno ta 2 hosta; /dashboard 307 → /login za neautentifikovane.
Nalazi
- (LOW-MED, korigovan peer-verifyjem)
/auth/entra/sessionexchange IMA per-IP rate-limit (rateLimit(RateLimitName("auth")), ~5/min, MC #103075 D4 komentar u Routing.kt) — stvarni ostatak gapa: nema per-identity/per-oid throttle za returning usere; distribuirani replay preko više IP-ova zaobilazi per-IP limit. Preporuka: per-oid throttle ili Front Door pravilo. - (LOW)
CORS.kt:15fail-open fallback na hardkodiranu default origin listu kadCORS_ORIGINSnije postavljen (uzallowCredentials=true), nekonzistentno s fail-closed patternom EntraExternalIdService-a. Preporuka: baciti exception na missing config (isti pattern).
NEEDS-LIVE-TENANT follow-up (samo portal/Graph — 6 stavki)
Entra App Registration redirect URI allowlist · Conditional Access policy stanje · passkey/WebAuthn tenant default · stvarni CORS_ORIGINS po ACA reviziji · ingress rate limiting (Front Door/ACA) · sign-in/consent audit logovi. (az ad/Graph blokiran iz agentskih sesija — ovo je imenovani CEO/portal korak.)
Evidence
~/system/evidence/105975/ — parisa-entra-audit-2026-07-18.md (23 statusirane stavke), peer-verify-transcript-2026-07-18.md (7 atomskih tvrdnji, sirovi outputi), gotcha-task-105975.md, verdict-105975.json (sha256 kontrakt). Vezano: #104547 QODY httpOnly JWT zatvoren istim danom (Proveo 10/10 UAT + Parisa re-grep).
No comments to display
No comments to display