This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Affected surfaces
Summary
AI summaryAUTH-MISSING-MFA findings now downgrade to INFO for service‑to‑service/webhook handlers when consensus signals indicate machine‑auth context.
Full changelog
Fixed
AUTH-MISSING-MFAdowngrades to INFO on service-to-service / webhook handlers via consensus multi-signal classifier. Strong T1 signals includehmac.Equal,subtle.ConstantTimeCompare,rsa.Verify*,ecdsa.Verify*,ed25519.Verify,jwt.Parse/ParseWithClaims,jose.ParseSigned, brand-SDK calls (webhook.ConstructEvent,hmacvalidator.ValidateHmac*,client.VerifyWebhookSignature). Medium T2 signals are handler-name regex match plus webhook route path plus POST/PUT method. Weak T3 signals are absence of Authorization header read and the raw-body-then-parse pattern. Rule:is_s2s = strong >= 1 OR (medium >= 2 AND weak >= 1). Negative kill-switch: any ofsession.Save/session.Set, ginc.SetCookie7-arg, stdlibhttp.SetCookie2-arg, or raww.Header().Set("Set-Cookie", ...)keeps the finding at HIGH (OAuth callback recall guard). Downgraded findings carry TriageHintdowngrade:s2s_handler | <signal reason>and add PCI DSS 8.6.1 + 8.6.2 to RelatedRequirements (machine-auth context per PCI 8.4.2 Applicability Notes). Eliminates ~75% of HIGH AUTH-MISSING-MFA false positives observed on real-world payment microservices.
Added
- New detection rule
AUTH-WEBHOOK-NO-SIGNATUREfor webhook handlers parsing request payloads without prior signature verification. Severity isCRITICALwhen the route path contains a payment brand keyword (stripe,adyen,mdes,mastercard,paypal,visa,cybersource,apple-pay,applepay,google-pay,googlepay,checkout,worldpay,square,braintree,fiserv) andHIGHfor generic webhook paths. Maps to PCI DSS 6.2.4 (input validation); brand-path findings additionally cite 4.2.1 (CHD transmission authentication). - New
AUTH-WEBHOOK-VERIFIEDverified-OK INFO marker. Emitted when a handler verifies the webhook signature via T1 strong selectors (hmac.Equal,subtle.ConstantTimeCompare,rsa.Verify*,ecdsa.Verify*,ed25519.Verify,jwt.Parse,jose.ParseSigned, brand SDKswebhook.ConstructEvent/hmacvalidator.ValidateHmac*/client.VerifyWebhookSignature) BEFORE the first body-parser call (token.Posordering), or via a 1-level local helper recursion (verify*/validate*/authenticate*/check*Sig*named helpers, cycle-guarded), or via a route-middleware chain containingVerifyHMAC/VerifyWebhookSignature/WebhookAuth-shaped wrappers. TriageHintwebhook_signature_verified | <hit>. Auto-skipped by the triage engine via the existingHasSuffix("-VERIFIED")rule.
Internal
- New
scanner/authscanner/s2s_handler.go— per-file fixup wired intoauthscanner.scanGoFileInRootimmediately afterdetectMissingMFA. Mirrorssqlscanner.applyVerifiedTypeFixuparchitecture. - New
scanner/authscanner/webhook_signature.go—WebhookSignatureScantracks first body-parser call viatoken.Pos, checks for signature-verify signals strictly before the parser, supports 1-level cycle-guarded helper recursion, and applies brand-path segment scoping (brand keyword must appear after/webhooks/,/callbacks/,/notifications/,/hooks/,/cb/,/ipn/, or/events/). - New
scanner/authscanner/webhookmiddleware.go— forked from the audit-log middleware crawler (~420 LOC; Pass A + parent-walk). Predicate substituted toargLooksLikeSignatureMiddleware(regex(?i)(hmac|signature|webhook|verify|auth)). Independent cache reset per scan viaResetWebhookMiddlewareCache()invoked at top ofauthscanner.ScanFull. - 2 clean fixture files under
testdata/vulnerable-payment-service/clean/s2s_handler/covering T1-strong (HMAC verification before parse) and T2+T3 consensus. - 1 adversarial fixture
testdata/vulnerable-payment-service/internal/http/handler/admin/admin_panel.golocks the negative-signal rule (handler with webhook-shaped name but Set-Cookie write stays HIGH). - 3 bad webhook fixtures under
testdata/vulnerable-payment-service/internal/http/handler/webhook/that fireAUTH-WEBHOOK-NO-SIGNATUREat CRITICAL/HIGH severities. - 4 good webhook fixtures under
testdata/vulnerable-payment-service/clean/webhook_signed/that emitAUTH-WEBHOOK-VERIFIEDINFO. - Triage output budget bumped from 184 KB to 240 KB to accommodate the additional webhook-related findings and their triage context payloads.
Known limitations
- chi-style inline middleware
r.With(VerifyMW).Post(...)is NOT detected by this release's webhookmiddleware crawler. User.Use(VerifyMW)group registration to be detected. - PayPal
VerifyWebhookSignatureis treated as a T1 strong signal even though it is a network call (not a local crypto check). Real-world handlers using this pattern are generally safe; offline test environments will not exercise this path. - Replay-attack timestamp checks (
Stripe-Signaturet=tolerance enforcement) are out of this release's scope.
Full PR: https://github.com/shyshlakov/pci-dss-mcp/pull/10
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About shyshlakov/pci-dss-mcp
PCI DSS v4.0.1 static-analysis MCP server for Go payment codebases. 12 scanners detect PAN/CVV exposure, weak crypto, missing audit logs, vulnerable deps, TLS misconfig, auth weaknesses, plus CycloneDX 1.6 SBOM generation - each finding mapped to the exact PCI requirement. AI-assisted triage via triage_findings. Keyless-signed multi-arch Docker image on ghcr.io.
Related context
Beta — feedback welcome: [email protected]