import type { SDK, DefineAPI } from "caido:plugin"; import type { Request, Response } from "caido:utils"; // import { ImplicitGrantController } from "./controller/implictGrant"; // import { AuthZCodeGrantController } from "./controller/authZCodeGrant"; import { CsrfCheck } from "./controller/csrfCheck"; import { PKCECheck } from "./controller/PKCECheck"; import { AccessTokenLeakController } from "./controller/accessTokenDetector"; import { ScopeDetection } from "./controller/scopeDetection"; // import { NonceCheckController } from "./controller/nonceCheck"; import { RedirectBypassController } from "./controller/redirect_uriBypass"; export type API = DefineAPI<{}>; const csrfCheck = new CsrfCheck(); const pkceCheckController = new PKCECheck(); const tokenCheck = new AccessTokenLeakController(); const ScopeDetectionController = new ScopeDetection(); // const nonceCheckController = new NonceCheckController(); const redirectBypassController = new RedirectBypassController(); export function init(sdk: SDK) { sdk.events.onInterceptResponse(async (sdk, req: Request, res: Response) => { await csrfCheck.checker(sdk, req, res); //await pkceCheckController.test(sdk, req); await tokenCheck.testReq(sdk, req); await tokenCheck.testResp(sdk, res, req); await ScopeDetectionController.scan(sdk, req.getUrl()); await redirectBypassController.testAsync(sdk, req, res); // if (NonceCheckController.isOidcFlow(req, res)) { // await sdk.findings.create({ // title: "OIDC Flow Detected", // description: "The request appears to be part of an OIDC flow.", // request: req, // reporter: "", // }); // } }); sdk.events.onInterceptRequest(async (sdk, req: Request) => { await pkceCheckController.test(sdk, req); }); /* sdk.events.onInterceptRequest(async (sdk, req: Request) => { const result = authZCodeGrantController.testReq(req) || implicitGrantController.testReq(req); if (result) { await pkceCheckController.test(sdk, req); await sdk.findings.create({ title: "Possible SSO Request Detected", description: `SSO-related parameters detected in request:\n\n${req.getMethod()} ${req.getUrl()} : ${result}`, request: req, reporter: "", }); } }); */ }