supply-chainappsecrisk-management

Supply Chain Attacks in 2025: Defending Against Third-Party Risk

The rise of software supply chain attacks and how to protect your organization from compromised dependencies, vendor breaches, and malicious open-source packages.

S6 Security Labs6 min read
Supply Chain Attacks in 2025: Defending Against Third-Party Risk

Supply Chain Attacks in 2025: Defending Against Third-Party Risk

Supply chain attacks surged 742% from 2023 to 2025, becoming the preferred attack vector for sophisticated threat actors. Why? Compromise one vendor, access hundreds of downstream customers.

The Supply Chain Attack Surface

Modern applications depend on hundreds of third-party components:

Typical enterprise stack:

  • 300+ npm packages
  • 150+ Python libraries
  • 50+ Docker base images
  • 25+ SaaS vendors with API access
  • 12+ managed service providers

One compromised dependency = potential full breach.

Attack Vectors

1. Malicious Package Injection

Attackers publish packages with names similar to popular libraries (typosquatting) or compromise maintainer accounts.

Example: event-stream incident (2018, still relevant)

// Attacker gained commit access to popular npm package
// Injected malicious code that stole cryptocurrency wallets
// Downloaded by 1.5 million projects before detection

2025 variants:

  • Dependency confusion: Internal package names on public repos
  • Protestware: Maintainers inject malicious code for political reasons
  • Account takeovers: Compromised maintainer credentials

2. Compromised Build Systems

SolarWinds-style attacks targeting build pipelines:

Attacker → Build Server → Signed Malicious Update → 18,000+ Customers

Defense requires:

  • Build environment isolation
  • Code signing verification
  • Supply chain attestation (SLSA framework)

3. Vendor Breaches

Third-party SaaS providers with access to your data get compromised.

Recent examples (2025):

  • Marketing automation platform breach → 400 customer databases exfiltrated
  • Managed SOC provider compromised → Attackers accessed client SIEM logs
  • HR software vendor → Employee PII exposed for 200+ companies

Detection Strategies

Software Bill of Materials (SBOM)

Generate SBOMs for all applications to track dependencies:

# Generate SBOM using Syft
syft packages dir:. -o spdx-json > sbom.json

# Scan for vulnerabilities
grype sbom:sbom.json

SBOM Tools:

  • Syft - Container & filesystem scanning
  • CycloneDX - Standard SBOM format
  • SPDX - Linux Foundation standard

Dependency Scanning

Automated vulnerability scanning in CI/CD:

# GitHub Actions: Dependency scanning
name: Dependency Scan
on: [push, pull_request]
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Snyk
        run: |
          npm install -g snyk
          snyk test --severity-threshold=high
          snyk monitor

Commercial tools:

  • Snyk, Sonatype Nexus, JFrog Xray, GitHub Advanced Security

Runtime Protection

Detect malicious behavior even if dependencies are compromised:

Techniques:

  1. Least privilege containers

    # Run as non-root user
    USER 1000:1000
    
    # Read-only filesystem
    RUN chmod -R 555 /app
  2. Syscall filtering (seccomp)

    {
      "defaultAction": "SCMP_ACT_ERRNO",
      "syscalls": [
        {"names": ["read", "write", "open"], "action": "SCMP_ACT_ALLOW"}
      ]
    }
  3. Network egress filtering

    # Only allow connections to known-good destinations
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    spec:
      egress:
        - to:
          - podSelector:
              matchLabels:
                app: database

Vendor Risk Management

Third-Party Assessment Framework

Risk Tier Assessment Required Frequency
Critical (access to PII/financial) SOC 2 Type II, penetration test Annually
High (network access) Security questionnaire, SOC 2 Every 2 years
Medium (limited data access) Attestation of compliance Every 3 years
Low (no data access) Terms of service review One-time

Continuous Monitoring

Don't just assess once—monitor continuously:

Automated vendor monitoring:

# Check vendor security posture via API
def monitor_vendor_security(vendor_domain):
    checks = {
        'ssl_cert_valid': check_ssl_expiry(vendor_domain),
        'security_headers': check_security_headers(vendor_domain),
        'breach_database': check_haveibeenpwned(vendor_domain),
        'dns_integrity': check_dnssec(vendor_domain),
        'dark_web': check_leaked_credentials(vendor_domain)
    }

    risk_score = calculate_risk(checks)

    if risk_score > 70:
        alert_security_team(vendor_domain, checks)

Tools:

  • BitSight, SecurityScorecard - Vendor security ratings
  • RiskRecon - Third-party cyber risk monitoring
  • UpGuard - Vendor risk intelligence

Supply Chain Security Framework

SLSA (Supply-chain Levels for Software Artifacts)

Google's framework for build integrity:

SLSA Levels:

  • Level 1: Build process documented
  • Level 2: Version control + build service
  • Level 3: Hardened build platform, provenance
  • Level 4: Two-person review + hermetic builds

Implementation:

# Example: SLSA provenance generation
name: Build with Provenance
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: actions/checkout@v3
      - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.2.0

Dependency Pinning

Lock dependency versions to prevent unexpected updates:

// package-lock.json (npm)
{
  "dependencies": {
    "express": {
      "version": "4.18.2",
      "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ=="
    }
  }
}
# requirements.txt (Python) - with hashes
flask==2.3.2 \
    --hash=sha256:7eb373984bf1c770023fce9db164ed0c3353cd0b53f130f4693da0ca756a2e6d

Code Signing & Verification

Sign releases and verify signatures before deployment:

# Sign Docker image
cosign sign --key cosign.key myregistry.io/myapp:v1.0

# Verify signature before deployment
cosign verify --key cosign.pub myregistry.io/myapp:v1.0

# Policy enforcement (OPA)
package kubernetes.admission

deny[msg] {
    input.request.kind.kind == "Pod"
    image := input.request.object.spec.containers[_].image
    not image_is_signed(image)
    msg := sprintf("Image %v is not signed", [image])
}

Incident Response

If you detect a compromised dependency:

Immediate actions:

  1. Isolate - Block outbound connections from affected systems
  2. Inventory - Identify all systems running the compromised version
  3. Analyze - Reverse engineer the malicious code
  4. Remediate - Patch or rollback to known-good version
  5. Hunt - Search logs for indicators of compromise

Example timeline:

T+0:00 - Compromised package detected (GitHub alert)
T+0:15 - Incident declared, systems isolated
T+0:45 - All affected deployments identified (SBOM critical here)
T+2:00 - Malicious code analyzed, IOCs extracted
T+4:00 - Clean version deployed, systems restored
T+12:00 - Log analysis complete, no evidence of exploitation
T+24:00 - Incident closed, postmortem scheduled

Prevention Checklist

Immediate (This Week):

  • Generate SBOMs for all production applications
  • Enable dependabot/renovate for automated updates
  • Implement dependency scanning in CI/CD
  • Review vendor access privileges (least privilege)

Short-term (This Month):

  • Pin all dependencies with integrity hashes
  • Implement code signing for internal packages
  • Deploy container runtime protection (Falco, Sysdig)
  • Assess top 10 critical vendors (SOC 2, pen tests)

Long-term (This Quarter):

  • Achieve SLSA Level 3 for critical applications
  • Implement zero-trust network policies
  • Deploy vendor security monitoring platform
  • Establish supply chain incident response playbook

Conclusion

Supply chain attacks exploit the transitive trust in modern software development. Every dependency, vendor, and service provider is a potential attack vector.

Defense requires:

  • 🔍 Visibility - Know what you're running (SBOMs)
  • 🛡️ Validation - Verify integrity (signatures, hashes)
  • 🚨 Detection - Monitor for anomalous behavior
  • Response - Rapid containment and remediation

The attack surface is massive, but systematic application of supply chain security principles dramatically reduces risk.

Need help securing your supply chain? Our application security team conducts comprehensive supply chain risk assessments and implements SLSA frameworks.


Security research teams track thousands of malicious packages daily across npm, PyPI, and other repositories, providing threat intelligence to the security community.