Supply chain attacks keep evolving, targeting every weak point in the software distribution chain. There's no need to force perimeter defenses: it's enough to insert malicious code into components considered trustworthy, such as open-source libraries or modules used by hundreds of applications.

Real cases and compromise techniques

In recent years, JavaScript packages like ua-parser-js and modular frameworks like ctx-core have been compromised on public registries, shipping updates with hidden malicious payloads. The mechanism is simple and silent: the user updates the library as usual, but the malicious code runs during installation (npm install) or when the application starts, exfiltrating credentials, environment variables, or installing persistent backdoors.

Typosquatting remains a real threat on Python: verified examples include jeIlyfish (with a capital "I" instead of a lowercase "l"), published on PyPI with malicious code mimicking the legitimate "jellyfish" package. Attacks like this exploit developer inattention and the implicit trust placed in package names, managing to go unnoticed for weeks.

Main attack vectors

Vector Description Recent example
JS library compromise Tampering with packages distributed on NPM ua-parser-js, ctx-core
PyPI typosquatting Similarly-named packages to trick developers jeIlyfish
DevOps tool compromise Attacks on CI/CD, pipelines or container registries Codecov Bash uploader
Unverified dependencies Third-party libraries distributed without auditing JS modular frameworks 2024-2025
Compromised accounts Stolen credentials of popular package maintainers NPM packages 2023

The cultural problem

The main problem remains cultural: many companies treat external software as inherently trustworthy, update libraries without prior auditing, and rarely verify digital signatures or package hashes. Even critical infrastructure continues to incorporate unaudited components, exposing itself to enormous and often irreversible risks.

Speed of adoption wins over security: frameworks and libraries get integrated into production hours after release, with no static analysis, code review, or verification of the maintainer's reputation.

Mitigation strategies

To mitigate these attacks, organizations need to adopt a continuous validation approach across multiple layers:

  • Reproducible builds: ensuring the same source code always produces the same binary
  • Verified digital signatures: checking the validity of packages' GPG signatures
  • Private registries: internal mirrors of NPM/PyPI with verified whitelists
  • Dependency monitoring: automatic alerts on suspicious updates
  • Up-to-date SBOMs: complete, traceable Software Bills of Materials
  • Dependency pinning: locking specific versions instead of open ranges (^ or ~)
  • Periodic auditing: automated scans with tools like Snyk, Dependabot, npm audit

Only through a rigorous process can the risk that a single compromised component threatens the entire application chain be reduced.

The trust principle

Supply chain attacks exploit trust more than brute force: as long as code is shared and integrated faster than it's checked, that blind trust will remain the main vulnerability of the entire modern software ecosystem.

The solution isn't to stop innovation, but to introduce security checkpoints (and a Zero Trust model) that don't slow down development while guaranteeing visibility and control over what actually runs in production.