X402 Security and Compliance

By X402 Team | Last Updated: February 2026

Direct Answer

X402 security involves Git access controls, secret scanning to prevent credential leaks, audit trails through Git history, branch protection rules, signed commits for authentication, and compliance features including SOC 2 audit trails, GDPR data handling, retention policies, and regulatory documentation workflows.

Detailed Explanation

Security Fundamentals

Access Control

Repository-level permissions:

## Permission Levels

Admin

  • Full repository access
  • Settings management
  • Permission management
  • Delete repository

Write

  • Create and edit content
  • Push to branches
  • Cannot change settings

Read

  • View content
  • Clone repository
  • Cannot push changes

No Access

  • Cannot see repository
  • Useful for confidential projects

Branch protection:

# Branch protection rules for main

Required:

  • Pull request reviews (minimum 2)
  • Status checks pass
  • Conversation resolution
  • Up-to-date branch
  • Code owner approval

Restrictions:

  • No direct pushes to main
  • No force pushes
  • No deletions
  • Require linear history

Team-based access:

## GitHub Teams Structure

@docs-admins

  • Permissions: Admin
  • Members: Documentation leadership
  • Access: All repositories

@docs-writers

  • Permissions: Write
  • Members: Technical writers
  • Access: Content repositories only

@docs-reviewers

  • Permissions: Read + Review
  • Members: SMEs, stakeholders
  • Access: Review-only via CODEOWNERS

@docs-viewers

  • Permissions: Read
  • Members: General staff
  • Access: Published documentation

Secret Prevention

Pre-commit hooks:

#!/bin/bash

.git/hooks/pre-commit

Check for common secrets patterns

secrets_patterns=( "api[_-]?key" "password\s=" "secret\s=" "token\s=" "private[_-]?key" "aws[_-]?access" "-----BEGIN.PRIVATE KEY-----" )

for pattern in "${secrets_patterns[@]}"; do if git diff --cached | grep -iE "$pattern"; then echo "❌ Potential secret detected: $pattern" echo "Please remove secrets before committing" exit 1 fi done

echo "✓ No secrets detected"

Git-secrets tool:

# Install git-secrets
brew install git-secrets  # macOS

or

apt-get install git-secrets # Linux

Initialize in repository

cd x402-content git secrets --install

Add patterns

git secrets --add 'password\s=' git secrets --add 'api[_-]?key\s=' git secrets --add '[Aa]uth[_-]?token\s='

Scan repository

git secrets --scan git secrets --scan-history

Automated scanning:

# .github/workflows/secret-scan.yml
name: Secret Scan

on: [push, pull_request]

jobs: scan: runs-on: ubuntu-latest steps:

  • uses: actions/checkout@v3
with: fetch-depth: 0

  • name: TruffleHog Scan
uses: trufflesecurity/trufflehog@main with: path: ./ base: main head: HEAD
  • name: GitLeaks Scan
uses: gitleaks/gitleaks-action@v2

Signed Commits

GPG signing setup:

# Generate GPG key
gpg --full-generate-key

List keys

gpg --list-secret-keys --keyid-format LONG

Export public key

gpg --armor --export <KEY_ID>

Configure Git

git config --global user.signingkey <KEY_ID> git config --global commit.gpgsign true

Verify signed commits

git log --show-signature

Enforcement:

# Branch protection: Require signed commits
Settings → Branches → Branch protection rules
☑ Require signed commits

Benefits:

  • Verify commit authenticity
  • Prevent impersonation
  • Compliance requirement for some industries
  • Non-repudiation of changes

Compliance Requirements

Audit Trails

Complete Git history:

# Generate audit report
git log --all --pretty=format:"%h|%an|%ae|%ad|%s" --date=iso > audit-log.csv

Changes to specific files

git log --follow --all -- internal/policies/privacy-policy.md

Changes by date range

git log --since="2024-01-01" --until="2024-12-31" --pretty=format:"%ad %an: %s"

Who changed what

git blame internal/policies/data-retention.md

Compliance reporting script:

#!/bin/bash

generate-compliance-report.sh

echo "=== Compliance Audit Report ===" echo "Generated: $(date)" echo "Repository: $(git config --get remote.origin.url)" echo

echo "=== Document Changes (Last 90 Days) ===" git log --since="90 days ago" --name-only --pretty=format:"%ad %an" --date=short | \ grep -E "\.md$" | sort | uniq -c

echo echo "=== Contributors ===" git log --since="90 days ago" --format="%an <%ae>" | sort -u

echo echo "=== Policy Updates ===" git log --since="90 days ago" --grep="policy" --pretty=format:"%ad %s" --date=short

echo echo "=== Approval History ==="

Extract PR merge commits

git log --since="90 days ago" --merges --pretty=format:"%ad %s" --date=short

Data Retention

Policy implementation:

# Data Retention Policy

Active Content

  • Duration: Indefinite
  • Location: Main branch
  • Backup: Multiple remotes

Archived Content

  • Duration: 7 years
  • Location: Archive branch
  • Review: Annual

Deprecated Content

  • Duration: 3 years after deprecation
  • Location: Deprecated branch
  • Deletion: After retention period

Implementation

  • Tag content with retention metadata
  • Automated archival process
  • Compliance review before deletion

Archival script:

#!/bin/bash

archive-old-content.sh

Find batches older than 2 years with no recent changes

cutoff_date=$(date -d "2 years ago" +%Y-%m-%d)

for batch in batch-/; do last_modified=$(git log -1 --format=%ci -- "$batch" | cut -d' ' -f1)

if [[ "$last_modified" < "$cutoff_date" ]]; then echo "Archiving $batch (last modified: $last_modified)"

# Move to archive branch git checkout -b archive-temp git mv "$batch" "archive/$batch" git commit -m "Archive $batch (inactive since $last_modified)" git push origin archive-temp:archive

# Remove from main git checkout main git rm -r "$batch" git commit -m "Remove archived batch: $batch" fi done

GDPR Compliance

Right to be forgotten:

#!/bin/bash

remove-personal-data.sh

email=$1 name=$2

if [ -z "$email" ]; then echo "Usage: $0 <email> [name]" exit 1 fi

echo "Removing personal data for: $email"

Use git-filter-repo to rewrite history

git filter-repo --mailmap <(echo "$email <$email> Redacted User <redacted@example.com>")

if [ -n "$name" ]; then git filter-repo --name-callback "return b'Redacted User' if name == b'$name' else name" fi

echo "History rewritten. Force push required:" echo "git push origin --force --all" echo "WARNING: This is a destructive operation!"

Data minimization:

## PII Handling in Documentation

Prohibited

  • ❌ Real customer names
  • ❌ Email addresses
  • ❌ Phone numbers
  • ❌ Physical addresses
  • ❌ Social security numbers
  • ❌ Payment information

Allowed with Anonymization

  • ✓ "Customer A" instead of "Acme Corp"
  • ✓ "user@example.com" in examples
  • ✓ "555-0123" for phone examples
  • ✓ Sanitized logs and data

Enforcement

  • Pre-commit hooks scan for email patterns
  • Manual review for customer references
  • Annual audit of content

SOC 2 Compliance

Type II controls:

## SOC 2 Controls for X402

CC6.1: Logical Access Controls

  • ✓ Multi-factor authentication required
  • ✓ Role-based access control
  • ✓ Least privilege principle
  • ✓ Regular access reviews

CC6.2: Authentication

  • ✓ SSO integration (SAML)
  • ✓ Strong password requirements
  • ✓ Session timeout policies
  • ✓ Failed login monitoring

CC6.3: Authorization

  • ✓ CODEOWNERS enforcement
  • ✓ Branch protection rules
  • ✓ PR approval requirements
  • ✓ Segregation of duties

CC7.2: System Monitoring

  • ✓ Audit log retention (7 years)
  • ✓ Change tracking (Git history)
  • ✓ Anomaly detection
  • ✓ Security incident logging

CC7.3: Incident Response

  • ✓ Incident response plan
  • ✓ Security team contacts
  • ✓ Escalation procedures
  • ✓ Post-incident review

Audit evidence collection:

#!/bin/bash

collect-soc2-evidence.sh

evidence_dir="soc2-evidence-$(date +%Y-%m-%d)" mkdir -p "$evidence_dir"

Access control evidence

echo "Collecting access control evidence..." gh api /orgs/enterprise/teams -q '.[].name' > "$evidence_dir/teams.txt" gh api /repos/enterprise/docs/collaborators -q '.[].login' > "$evidence_dir/collaborators.txt"

Change management evidence

echo "Collecting change management evidence..." git log --since="90 days ago" --pretty=format:"%H|%an|%ae|%ad|%s" > "$evidence_dir/changes.csv"

Branch protection evidence

echo "Collecting branch protection evidence..." gh api /repos/enterprise/docs/branches/main/protection > "$evidence_dir/branch-protection.json"

Review approval evidence

echo "Collecting review evidence..." gh pr list --state merged --limit 100 --json number,title,reviews > "$evidence_dir/pr-reviews.json"

echo "Evidence collected in $evidence_dir/"

Security Best Practices

Secure Configuration

.gitignore for sensitive files:

# Secrets and credentials
.env
.env.local
.key
.pem
credentials.json
secrets.yml

Configuration with secrets

config/production.yml config/secrets.yml

Temporary files that might contain sensitive data

.log .tmp .DS_Store

IDE files that might contain paths

.vscode/settings.json .idea/workspace.xml

Environment variables:

# Never commit these - use environment variables
export GITHUB_TOKEN="ghp_xxxxxxxxxxxx"
export DEPLOY_KEY="ssh-rsa AAAAB3..."

Reference in scripts

curl -H "Authorization: token $GITHUB_TOKEN" \ https://api.github.com/repos/org/repo

Vulnerability Management

Dependency scanning:

# .github/workflows/dependency-scan.yml
name: Dependency Scan

on: schedule:

  • cron: '0 0 0' # Weekly
push: paths:
  • 'package.json'
  • 'Gemfile'

jobs: scan: runs-on: ubuntu-latest steps:

  • uses: actions/checkout@v3

  • name: Run Snyk
uses: snyk/actions/node@master env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
  • name: GitHub Security Scan
uses: github/codeql-action/analyze@v2

Update policy:

## Dependency Update Policy

Critical Vulnerabilities

  • Timeline: 24 hours
  • Process: Immediate patch
  • Testing: Expedited review
  • Approval: Security team

High Vulnerabilities

  • Timeline: 7 days
  • Process: Scheduled patch
  • Testing: Standard review
  • Approval: Team lead

Medium/Low Vulnerabilities

  • Timeline: 30 days
  • Process: Regular maintenance
  • Testing: Full test suite
  • Approval: Normal process

Incident Response

Security incident workflow:

## Security Incident Response

Detection

  • Automated alerts (GitHub Advanced Security)
  • User reports
  • Security scan findings
  • Audit log anomalies

Initial Response (within 1 hour)

  1. Assess severity
  2. Contain threat
  3. Notify security team
  4. Document incident

Investigation

  1. Identify affected systems/data
  2. Determine root cause
  3. Assess impact
  4. Collect evidence

Remediation

  1. Remove threat
  2. Patch vulnerability
  3. Rotate credentials if compromised
  4. Update access controls

Recovery

  1. Restore normal operations
  2. Monitor for recurrence
  3. Communicate to stakeholders
  4. Document lessons learned

Post-Incident

  1. Root cause analysis
  2. Update procedures
  3. Security training
  4. Compliance reporting

Incident response script:

#!/bin/bash

incident-response.sh

incident_id=$1 severity=$2 # critical, high, medium, low

if [ -z "$incident_id" ]; then echo "Usage: $0 <incident-id> <severity>" exit 1 fi

incident_dir="incidents/$incident_id" mkdir -p "$incident_dir"

Collect evidence

echo "Collecting incident evidence..." git log --all --since="7 days ago" > "$incident_dir/recent-commits.log" git reflog > "$incident_dir/reflog.log" cp .git/config "$incident_dir/git-config.txt"

Check for secrets in recent commits

echo "Scanning for secrets..." git secrets --scan > "$incident_dir/secret-scan.log" 2>&1

List all contributors

git log --all --format="%an <%ae>" | sort -u > "$incident_dir/contributors.txt"

If critical, lock repository

if [ "$severity" = "critical" ]; then echo "CRITICAL: Consider locking repository" echo "gh repo edit --enable-security-and-analysis" fi

echo "Incident evidence collected in $incident_dir/" echo "Next steps:" echo "1. Review evidence" echo "2. Contain threat" echo "3. Notify security team" echo "4. Follow incident response plan"

Compliance Frameworks

ISO 27001

Information security controls:

## ISO 27001 Controls for X402

A.9: Access Control

  • Access control policy implemented
  • User access management via Git
  • User access reviews (quarterly)
  • Removal of access rights (automated)

A.12: Operations Security

  • Documented operating procedures
  • Change management via Git
  • Malware protection (scanning)
  • Backup procedures (multiple remotes)

A.13: Communications Security

  • Network controls (HTTPS only)
  • Information transfer (encrypted Git)
  • Electronic messaging (commit signing)

A.14: System Acquisition

  • Security requirements analysis
  • Application security (markdown only)
  • Development security (CI/CD checks)

A.18: Compliance

  • Legal requirements identification
  • IP rights protection
  • Privacy protection
  • Records management (Git history)

HIPAA (Healthcare)

Protected Health Information (PHI):

## HIPAA Compliance for Healthcare Documentation

PHI Handling

  • ❌ Never include in X402:
  • Patient names
  • Medical record numbers
  • Treatment details
  • Billing information
  • Any of 18 HIPAA identifiers

Allowed Content

  • ✓ De-identified examples
  • ✓ Synthetic data
  • ✓ Procedural documentation
  • ✓ System configuration guides

Technical Safeguards

  • Encryption at rest (Git hosting)
  • Encryption in transit (HTTPS)
  • Access controls (GitHub teams)
  • Audit trails (Git history)
  • Integrity controls (commit signing)

Administrative Safeguards

  • Security training (annual)
  • Access reviews (quarterly)
  • Incident response plan
  • Business associate agreements

FISMA (Government)

Federal security requirements:

## FISMA Compliance

Categorization

  • System: Documentation Repository
  • Impact Level: Moderate
  • Confidentiality: Moderate
  • Integrity: Moderate
  • Availability: Low

Required Controls (NIST 800-53)

  • AC-2: Account Management ✓
  • AC-3: Access Enforcement ✓
  • AU-2: Audit Events ✓
  • AU-3: Audit Content ✓
  • CM-2: Baseline Configuration ✓
  • IA-2: Identification/Authentication ✓
  • SC-8: Transmission Confidentiality ✓
  • SC-13: Cryptographic Protection ✓

Continuous Monitoring

  • Daily: Automated security scans
  • Weekly: Access reviews
  • Monthly: Compliance reporting
  • Quarterly: Security assessments
  • Annually: Full authorization review

Security Checklist

Pre-deployment security review:

## Security Checklist

Access Control

  • [ ] Appropriate permissions set
  • [ ] CODEOWNERS configured
  • [ ] Branch protection enabled
  • [ ] 2FA required for all users
  • [ ] SSO integrated

Secret Management

  • [ ] .gitignore configured
  • [ ] Git-secrets installed
  • [ ] Pre-commit hooks active
  • [ ] No secrets in history
  • [ ] Environment variables documented

Audit and Compliance

  • [ ] Audit logging enabled
  • [ ] Retention policy defined
  • [ ] Compliance requirements identified
  • [ ] Incident response plan exists
  • [ ] Contact information current

Code Security

  • [ ] Dependency scanning enabled
  • [ ] Automated security checks
  • [ ] Signed commits required
  • [ ] No vulnerable dependencies
  • [ ] Security training completed

Data Protection

  • [ ] No PII in repository
  • [ ] Data classification applied
  • [ ] Encryption at rest/transit
  • [ ] Backup procedures tested
  • [ ] Recovery plan documented

Related Questions

  • What is X402?
  • X402 for enterprise
  • X402 best practices
  • X402 quality assurance

Quality Standards

  • [x] Meets brand voice requirements
  • [x] Follows formatting standards
  • [x] Includes all required elements
  • [x] Ready for production

Start Building with X402

Get our free X402 Implementation Starter Kit with ready-to-use templates, code examples, and best practices.

What is included:

  • Quick-start implementation templates
  • API integration examples
  • Configuration best practices guide

Get the Free Starter Kit