--- issue: 005 title: "POST /api/payment/payments/:id/fetch-tx, POST /api/payment/payments/auto-fetch-missing, and GET /api/payment/payments/:id/debug have no authentication middleware" severity: critical domain: Payment labels: [security, bug, backend, critical, missing-auth] status: resolved resolved: 2026-05-29 fix: "Added authenticateToken + authorizeRoles('admin') to /payments/:id/debug, /payments/:id/fetch-tx, and /payments/auto-fetch-missing in paymentRoutes.ts" created: 2026-05-29 source: Doc vs Code Audit 2026-05-29 --- # 🔴 POST /api/payment/payments/:id/fetch-tx, POST /api/payment/payments/auto-fetch-missing, and GET /api/payment/payments/:id/debug have no authentication middleware **Severity:** critical **Domain:** Payment **Labels:** security, bug, backend, critical, missing-auth ## Description Three payment utility/debug endpoints are mounted with zero authentication. Any unauthenticated caller can read full payment internals (including blockchain metadata and wallet monitor state) or trigger on-chain fetches and state writes. These are exploitable without credentials in production. ## Current Behavior All three return 200 with full data when called without any Authorization header. ## Expected Behavior All three endpoints should require at minimum authenticateToken, and ideally authorizeRoles('admin'). ## Reproduction Steps curl -X POST https://api.example.com/api/payment/payments/test123/fetch-tx — expect 401, currently returns 200. ## Affected Files - `backend/src/routes/paymentRoutes.ts` ## References - [Doc vs Code Audit Report](../09%20-%20Audits/Doc%20vs%20Code%20Audit%20Report%20-%202026-05-29.md)