Annual code review is dead for serious payment software.
If your team waits until the yearly penetration test to discover insecure checkout code, vulnerable open-source packages, exposed secrets, or broken API authorization, the pipeline is already too late. Modern payment engineering needs security validation before code reaches production.
For DevOps engineers, AppSec architects, Engineering VPs, and release managers, PCI DSS for developers now means building secure testing directly into CI/CD. Static Application Security Testing, Dynamic Application Security Testing, Software Composition Analysis, dependency tracking, SBOM generation, peer review, and release gates must become part of the delivery workflow, not a manual compliance activity at the end.
PCI DSS v4.0.1 Requirement 6 places strong expectations on secure software development, bespoke and custom software review, vulnerability management, and software component tracking. The official PCI DSS standards page and the PCI SSC Document Library remain the primary references for developers, QSAs, merchants, and service providers working with payment security requirements.
Professional note: This guide is for compliance education only. Always confirm Requirement 6 interpretation, vulnerability timelines, custom software inventory, and ROC evidence expectations with your QSA, acquirer, payment brand, and internal security leadership.
Why Annual Code Review Fails Modern PCI

A once-a-year code review cannot protect a weekly release cycle.
Payment platforms may deploy dozens of changes every month:
-
Checkout API updates.
-
Gateway SDK upgrades.
-
GraphQL resolver changes.
-
Payment webhook handlers.
-
Tokenization logic.
-
Fraud service integrations.
-
Authentication middleware.
-
Logging and observability changes.
-
Frontend payment scripts.
-
Third-party package updates.
-
Infrastructure-as-code changes.
If security testing happens only during the annual audit, vulnerable code may already be running in production for months.
That is why PCI DSS v4.0.1 Requirement 6.2.3 matters. Bespoke and custom software must be reviewed before release into production or after significant changes. That review can include manual or automated methods, but it must be real, documented, and tied to the release workflow.
OWASP’s Secure Software Development Lifecycle Cheat Sheet and OWASP’s Code Review Guide are useful references for development teams building repeatable secure review practices.
Old Pattern vs PCI-Ready Pattern
|
Development Pattern |
Audit Risk |
|
Annual penetration test only |
Misses every risky release between tests |
|
Manual reviewer checks only major features |
Minor checkout changes may bypass review |
|
SAST run after production deployment |
Findings arrive too late |
|
SCA spreadsheet updated quarterly |
New vulnerable packages may ship unnoticed |
|
DAST run only before audit |
Runtime flaws remain live |
|
No SBOM per release |
Component exposure cannot be traced quickly |
A PCI-ready pipeline does not ask, “Did we test sometime this year?” It asks, “Did this release pass the required security gates before production?”
PCI DSS Requirement 6: What Developers Must Prove
Requirement 6 is where secure software development becomes audit evidence.
For developers and AppSec teams, the key proof points include:
|
Control Area |
What the Team Must Show |
|
Secure coding standards |
Developers follow defined secure coding rules |
|
Code review |
Bespoke and custom software reviewed before release |
|
Vulnerability management |
Known vulnerabilities identified, ranked, and fixed |
|
Component inventory |
Custom software and third-party components tracked |
|
Change control |
Security impact documented for payment changes |
|
Testing evidence |
SAST, DAST, SCA, and peer review outputs retained |
|
Remediation |
Critical and high-risk findings fixed within required timelines |
|
Exceptions |
False positives or accepted risks formally documented |
The QSA will not only ask whether tools exist. They will ask whether tool results block risky releases and whether exceptions are justified.
For broader application security control planning, OWASP’s Application Security Verification Standard can help teams map security requirements into testable engineering controls.
The Open-Source Dependency Risk
Modern payment applications are not written from scratch.
A checkout API may include hundreds of direct and transitive dependencies from npm, pip, Maven, NuGet, Composer, RubyGems, or container images. One vulnerable package can expose authentication, payment workflows, cryptography, logging, serialization, or admin interfaces.
This is where Software Composition Analysis, or SCA, becomes essential.
SCA tools should identify:
-
Direct dependencies.
-
Transitive dependencies.
-
Vulnerable package versions.
-
Known CVEs.
-
License risk.
-
Abandoned packages.
-
Malicious packages.
-
Deprecated libraries.
-
Container image packages.
-
Framework versions.
-
Cryptographic library versions.
CISA’s SBOM guidance and resources explain why software bills of materials are important for software supply-chain transparency. NIST’s National Vulnerability Database is also a key public reference for tracking CVEs and vulnerability metadata.
For PCI teams, SCA is not optional hygiene. It supports the requirement to identify and manage vulnerabilities in software components.
Requirement 6.3.2: Custom Software and Component Inventory

PCI DSS Requirement 6.3.2 requires organizations to maintain an inventory of bespoke and custom software, plus third-party software components incorporated into that software.
That means your team must know what is actually running in production.
A proper inventory should include:
|
Inventory Field |
Example |
|
Application name |
checkout-api |
|
Owner |
Payments engineering |
|
Environment |
Production |
|
Repository |
github.com/company/checkout-api |
|
Language |
Node.js |
|
Framework |
Express / Fastify |
|
Payment function |
Tokenized payment intent creation |
|
Third-party packages |
npm dependency list |
|
Container image |
checkout-api:2026.06.15 |
|
SBOM location |
Artifact store link |
|
Last scan date |
2026-06-15 |
|
Critical findings |
0 open |
|
High findings |
0 open |
|
Release owner |
AppSec + Engineering Manager |
Shadow APIs and undocumented modules are serious audit risks because they cannot be assessed, scanned, patched, or defended.
If a payment-related service is running in production but missing from the inventory, the audit question becomes obvious: how can the organization prove it is secure?
SBOM Compliance: The Release-Level Evidence Layer
A Software Bill of Materials, or SBOM, gives security and compliance teams a machine-readable list of software components.
For payment software, an SBOM should be generated for every production release, not only once a year.
A release SBOM should capture:
-
Package names.
-
Package versions.
-
Dependency relationships.
-
Transitive dependencies.
-
Container base images.
-
Open-source licenses.
-
Component hashes.
-
Vulnerability references.
-
Build metadata.
-
Release version.
-
Repository and commit ID.
Common SBOM formats include SPDX and CycloneDX. The SPDX specification and the CycloneDX project are widely used references for structuring SBOM data.
SBOM Operating Rule
No production payment release should exist without a matching SBOM artifact.
|
Release Artifact |
Why It Matters |
|
SBOM file |
Shows software components |
|
SCA report |
Shows vulnerability status |
|
Build ID |
Links artifact to pipeline |
|
Commit hash |
Links artifact to code |
|
Container digest |
Prevents image confusion |
|
Release approval |
Shows sign-off |
|
Exception record |
Explains unresolved findings |
This makes vulnerability response faster. When a new critical CVE appears, the team can search SBOMs and know which payment services are affected.
Critical Vulnerability Remediation Timeline
PCI DSS v4.0.1 requires organizations to address vulnerabilities based on risk ranking, and critical/high security patches have strict timelines.
For PCI operations, a safe rule is:
|
Vulnerability Severity |
Release Action |
|
Critical in production |
Fix, validate, and deploy within required timeline, commonly within 30 days for critical/high security patches |
|
High in production |
Prioritize remediation and track to closure |
|
Critical in pre-production |
Block release |
|
High in pre-production |
Block or require formal security approval based on policy |
|
Medium |
Remediate according to risk-based SLA |
|
False positive |
Document evidence and reviewer approval |
|
Accepted risk |
Time-bound exception with compensating controls |
The brief’s 30-day rule is most defensible for critical and high-risk vulnerabilities where PCI patching expectations apply. Medium-severity issues normally follow the organization’s risk framework, QSA expectations, and internal remediation policy.
The NVD CVSS calculator can help teams understand severity scoring, but PCI remediation decisions should also consider exploitability, payment-scope exposure, compensating controls, and QSA expectations.
Do not allow “we will fix it next sprint” to become an undocumented risk acceptance.
Architecting a Gate-Driven CI/CD Pipeline

A gate-driven pipeline prevents risky code from moving forward.
Instead of relying on humans to remember every compliance step, the pipeline enforces security checks automatically.
PCI-Ready CI/CD Gate Map
|
Pipeline Stage |
Security Gate |
Build Outcome |
|
Developer commit |
Secrets scan + local SAST |
Warn or block commit |
|
Pull request |
SAST + linting + peer review |
Block risky merge |
|
Dependency install |
SCA + license check |
Block vulnerable packages |
|
Build |
SBOM generation |
Required artifact |
|
Container build |
Image scan |
Block critical findings |
|
Staging deploy |
DAST + API security tests |
Block production promotion |
|
Release approval |
AppSec sign-off |
Required for payment code |
|
Production deploy |
Change ticket + release evidence |
Deploy only after gates pass |
|
Post-release |
Monitoring + vulnerability watch |
Trigger remediation if needed |
The best pipelines make secure behavior the easiest behavior. GitHub’s documentation for code scanning and Dependabot alerts shows how teams can automate vulnerability and code-quality checks directly in repository workflows.
Step 1: Run Localized SAST and Linter Quality Checks
The first gate should run as close to the developer as possible.
When a developer commits code to a feature branch, the pipeline should execute Static Application Security Testing and security linting.
SAST should detect:
-
SQL injection.
-
Command injection.
-
Server-side request forgery.
-
Insecure deserialization.
-
Hardcoded credentials.
-
Broken authorization checks.
-
Unsafe cryptographic use.
-
Sensitive logging.
-
Path traversal.
-
Unsafe XML parsing.
-
Insecure payment payload handling.
Security linters should also enforce coding standards:
|
Rule |
Example Gate |
|
No raw PAN variables in logs |
Block PR |
|
No CVV field persistence |
Block PR |
|
No hardcoded API secrets |
Block PR |
|
No disabled TLS verification |
Block PR |
|
No unsafe eval patterns |
Block PR |
|
No payment route without auth middleware |
Require review |
|
No GraphQL resolver without tenant check |
Block PR |
OWASP’s Source Code Analysis Tools page provides useful background on SAST tooling approaches, while SonarQube documentation can help teams understand quality gates and code-analysis workflows.
SAST is not perfect. It produces false positives and misses logic flaws. But it is the first automated safety net.
Step 2: Execute Software Composition Analysis
After code checks, scan the dependency graph.
SCA should analyze:
-
Application packages.
-
Lockfiles.
-
Transitive dependencies.
-
Container image packages.
-
Base images.
-
Build tools.
-
Runtime libraries.
-
Gateway SDKs.
-
Authentication libraries.
-
Cryptographic packages.
A strong SCA workflow should:
-
Generate a dependency inventory.
-
Generate or update the SBOM.
-
Match packages against vulnerability databases.
-
Detect critical and high vulnerabilities.
-
Check whether fixed versions exist.
-
Block release where policy requires.
-
Open remediation tickets automatically.
-
Store the report as release evidence.
Dependency Gate Rules
|
Finding |
Pipeline Action |
|
Critical exploitable dependency |
Block release |
|
High vulnerability in payment path |
Block or require AppSec approval |
|
Vulnerable dev-only package |
Review exploitability |
|
No fixed version available |
Require exception and compensating control |
|
License violation |
Block or legal review |
|
Unmaintained package |
Create replacement backlog |
|
Malicious package warning |
Immediate block and incident review |
Tools such as OWASP Dependency-Check help detect publicly known vulnerabilities in project dependencies. Teams using containers should also scan base images and runtime layers, not only application libraries.
SCA must understand context. A vulnerable package in the payment runtime is different from a dev-only package that never ships.
Step 3: Trigger Automated DAST in a Sandbox
SAST reads code. DAST attacks the running application.
Dynamic Application Security Testing should run against an isolated staging environment that resembles production enough to test real behavior safely.
DAST should cover:
-
Checkout APIs.
-
Authentication flows.
-
Payment token endpoints.
-
Webhook handlers.
-
GraphQL queries.
-
REST endpoints.
-
Session management.
-
Input validation.
-
Error handling.
-
Security headers.
-
Access control checks.
-
Tenant isolation.
OWASP’s ZAP project is a widely used DAST tool that can support automated web application security testing in CI/CD workflows. Teams should configure DAST carefully so scans are safe, repeatable, and scoped to approved staging environments.
A DAST staging run should not use real cardholder data. Use test tokens, sandbox gateways, synthetic users, and payment-provider test cards.
DAST Gate Questions
|
Question |
Required Result |
|
Can unauthenticated users call payment APIs? |
No |
|
Can one tenant access another tenant’s transaction? |
No |
|
Can payment amount be modified client-side? |
No |
|
Do errors expose secrets or stack traces? |
No |
|
Are security headers present? |
Yes |
|
Are checkout endpoints rate-limited? |
Yes |
|
Are webhook signatures enforced? |
Yes |
|
Are GraphQL introspection and excessive queries controlled? |
Yes |
If DAST finds a critical payment-path flaw, the release should stop.
Step 4: Enforce Mandatory Peer Code Review and Sign-Off
Automation cannot replace human judgment.
Peer review should focus on logic, business impact, and payment-specific risks that tools may miss.
A payment-code review should verify:
|
Review Area |
Reviewer Question |
|
Payment data flow |
Does raw PAN or SAD touch the app? |
|
Authorization |
Can users access only their own data? |
|
Tokenization |
Are tokens scoped and handled safely? |
|
Logging |
Are sensitive values redacted? |
|
Webhooks |
Are signatures and replay checks enforced? |
|
Dependencies |
Are new packages justified? |
|
Error handling |
Are secrets hidden? |
|
Rollback |
Can release be reversed safely? |
|
Migration |
Does schema change expose payment data? |
OWASP’s Secure Code Review Guide is a useful reference for structuring secure peer review and identifying flaws that automated scanners may miss.
A strong peer review includes named reviewers, comments, approvals, and linked security findings.
Step 5: Build the Production Release Evidence Pack
Every production release affecting payment systems should generate an evidence pack automatically.
The pack should include:
-
Commit hash.
-
Pull request link.
-
Change ticket.
-
SAST report.
-
SCA report.
-
SBOM.
-
Container scan report.
-
DAST report.
-
Peer review approval.
-
AppSec approval where required.
-
Open findings list.
-
Exception approvals.
-
Deployment timestamp.
-
Rollback plan.
-
Production monitoring confirmation.
This turns the CI/CD pipeline into a PCI evidence machine.
Build-Breaker Rules for Payment Pipelines
A build-breaker rule defines when a release must stop.
Recommended Build-Breaker Matrix
|
Condition |
Action |
|
Critical vulnerability in payment runtime |
Block release |
|
High vulnerability with known exploit |
Block release |
|
Secret found in repository |
Block and rotate secret |
|
PAN/CVV logging detected |
Block release |
|
No SBOM generated |
Block release |
|
Payment API missing authorization test |
Block release |
|
Webhook endpoint lacks signature validation |
Block release |
|
DAST critical finding |
Block release |
|
Unapproved dependency added |
Require review |
|
Missing peer review |
Block merge |
|
Exception expired |
Block release |
Build breakers should be written into policy and enforced through CI/CD, not negotiated manually during deadline pressure.
Managing False Positives and Code Exceptions

False positives happen. But undocumented false positives become audit gaps.
A valid exception record should include:
|
Exception Field |
Required Detail |
|
Finding ID |
Tool and issue reference |
|
Component |
Application, dependency, or endpoint |
|
Severity |
Tool severity and internal severity |
|
Reason |
Why it is false positive or accepted risk |
|
Evidence |
Code proof, exploitability analysis, vendor statement |
|
Compensating control |
WAF, isolation, config, or monitoring |
|
Owner |
Engineering and AppSec owner |
|
Expiry date |
Time-bound review date |
|
Approval |
AppSec or risk sign-off |
|
Retest plan |
When it will be checked again |
A QSA will not accept “the scanner is noisy” as evidence. The team must show structured review.
Tracking Bespoke Software Inventory for an Annual ROC
For ROC preparation, maintain a live inventory of all bespoke and custom software.
Include:
-
Application name.
-
API name.
-
Repository.
-
Runtime.
-
Owner.
-
Business function.
-
Payment impact.
-
CDE relationship.
-
Production URL or service endpoint.
-
Dependency inventory.
-
SBOM location.
-
Last release date.
-
Last SAST date.
-
Last DAST date.
-
Last SCA date.
-
Open vulnerability status.
-
Exception status.
Shadow API Control
Shadow APIs are dangerous because they usually skip:
-
Authentication review.
-
Logging review.
-
SAST.
-
DAST.
-
SCA.
-
SBOM tracking.
-
PCI scope review.
-
Change control.
Use API discovery, gateway inventories, cloud service discovery, and repository scanning to identify undocumented services.
OWASP’s API Security Top 10 is a strong reference for understanding common API risks such as broken object-level authorization, weak authentication, and unsafe API exposure.
Secure SDLC Deployment Lifecycle
The definitive pipeline sequence should look like this:
|
Step |
Stage |
Control Output |
|
1 |
Code Commit |
SAST, linting, secrets scan |
|
2 |
Dependency Scan |
SCA, SBOM, license review |
|
3 |
Build |
Container scan, artifact signing |
|
4 |
Staging Run |
DAST, API security tests |
|
5 |
Gate Review |
Peer review, AppSec sign-off |
|
6 |
Production Deploy |
Change ticket and release approval |
|
7 |
Post-Deploy |
Monitoring, vulnerability watch |
|
8 |
Audit Archive |
Evidence pack stored for ROC |
This lifecycle should run every time payment-impacting code changes.
Why Training Matters for Developers
Secure pipeline automation touches many teams.
Developers write code. DevOps builds the pipeline. AppSec tunes SAST and DAST. Security engineers define build breakers. Product owners approve releases. Compliance teams defend evidence to the QSA. Engineering leaders decide how much release risk is acceptable.
A specialized course such as PCI DSS For Developers — Secure Payment Integrations helps these groups understand PCI DSS for developers through practical release engineering: SAST, DAST, SCA, SBOM generation, custom software inventory, vulnerability remediation, exception handling, and secure SDLC evidence.
The goal is not to slow delivery. The goal is to make unsafe delivery impossible.
Conclusion
Treating secure coding rules as an afterthought creates unstable codebases, audit panic, and preventable payment security failures.
Strong PCI DSS for developers means moving security into the pipeline itself. Every payment release should pass SAST, SCA, SBOM generation, container scanning, DAST, peer review, and documented security sign-off before production deployment.
Integrating automated testing directly into your deployment pipelines through PCI DSS For Developers — Secure Payment Integrations delivers stable, secure, and compliant payment features at scale.
FAQs
Does the 30-day remediation mandate apply to medium-severity software vulnerabilities under v4.0.1 instructions?
Usually, the strict one-month remediation expectation is associated with critical and high-risk security patches or vulnerabilities under PCI vulnerability management rules. Medium vulnerabilities should still be tracked and remediated according to the organization’s risk-ranking process, internal SLA, QSA expectations, and exposure context.
How must a development team document code exceptions or false positives to pass a QSA platform review?
The team should maintain a formal exception record showing the finding ID, affected component, severity, reason for exception, technical evidence, compensating controls, owner, approval, expiry date, and retest plan. False positives should be supported by code evidence or tool analysis, not informal comments.


