This release adds 2 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Affected surfaces
Summary
AI summaryImproved GORM encrypted custom type verification reduces false positives and adds GORM-ENCRYPT-OK INFO marker.
Full changelog
Fixed
- F-26 GORM encrypted custom type verification. Recognizes the modern GORM encryption-at-rest pattern where a custom Go type implements
driver.Valuerwith transparent column encryption via theValue()(orGormValue()) method body. The sqlscanner now AST-walks each candidate body for real cryptographic primitive calls before emittingGORM-NO-ENCRYPT-HOOK. Recognized strong signals includeaes.NewCipher,cipher.NewGCM,cipher.NewCBCEncrypter,crypto/rand.Read,crypto/hmac.New,golang.org/x/crypto/nacl/secretbox.Seal,golang.org/x/crypto/chacha20poly1305.New, andgithub.com/google/tink/go/aead.Encrypt. A KMS-client heuristic accepts any method in{Encrypt, EncryptCtx, EncryptWithContext, Seal, Wrap}invoked on a receiver whose name containskms,vault,hsm,barbican,secretmanager, orkeymanager. One level of intra-package helper recursion is followed with a cycle guard. Reduces false positives by 2-3 per service on real-world payment codebases that use custom encrypted column types.
Added
- New
GORM-ENCRYPT-OKINFO marker (follows the-OKsuffix convention fromAUDIT-LOG-OK/CSP-OK). Emitted when a struct field's custom type has a verified-encryptedValue()method. The triage engine auto-skips it via the existingHasSuffix("-OK")rule. - Sibling
GORM-SENSITIVE-TAGfindings on the same field drop to INFO with a matching triage hint when the field type passes verification.
Internal
- New
scanner/sqlscanner/valuerscan.gowithverifyValueBody,buildVerifiedTypeMap,collectPkgFuncEntries, the strong-signal whitelist, the KMS receiver/method heuristic, and 1-level recursion with cycle guard. scanner/sqlscanner/sqlscanner.goPass 2 now also accumulates verified custom-type entries and package-level helper functions across the whole module walk; a new Pass 2b applies the verified-type fixup toGORM-NO-ENCRYPT-HOOKandGORM-SENSITIVE-TAGfindings before SQL cross-reference. Per-file imports travel with each helper so cross-file recursion resolves alias paths correctly.- 7 new clean fixture files under
testdata/vulnerable-payment-service/clean/gorm_encrypt_type/covering direct-crypto, helper-recursion, and KMS-client patterns. 1 adversarial type fixture (internal/crypto/fake_encrypted_string.go, base64-onlyValue()) and 1 adversarial GORM model fixture (internal/storage/postgres/model/fake_encrypt_model.go) lock the NOT-signal rejection rule. - Triage output budget bumped from 160 KB to 176 KB to accommodate the two additional active findings on the adversarial fixture.
Documentation
- README Roadmap section gains a "Projected coverage impact" subsection mapping the 5 planned features to specific PCI DSS sub-requirement gains. Honest projection: 14/250 today → 16-18/250 (~7%) after all 5 phases ship.
- Sub-requirement count corrected from 251 to ~250 across README and
docs/pci-coverage.mdto match the actual entry count in the embedded PCI DSS database.
Full PR: https://github.com/shyshlakov/pci-dss-mcp/pull/9
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]