惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Webroot Blog
Webroot Blog
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
Y
Y Combinator Blog
F
Fortinet All Blogs
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Check Point Blog
博客园 - 【当耐特】
V
V2EX
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
GbyAI
GbyAI
美团技术团队
Jina AI
Jina AI
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
F
Full Disclosure
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
The GitHub Blog
The GitHub Blog
NISL@THU
NISL@THU
D
Docker
MyScale Blog
MyScale Blog
V
Vulnerabilities – Threatpost
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Schneier on Security
K
Kaspersky official blog
AWS News Blog
AWS News Blog
The Hacker News
The Hacker News
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Know Your Adversary
Know Your Adversary
L
LINUX DO - 热门话题
P
Privacy & Cybersecurity Law Blog
L
Lohrmann on Cybersecurity
C
Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
Cisco Talos Blog
Cisco Talos Blog
N
News and Events Feed by Topic
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
C
Cybersecurity and Infrastructure Security Agency CISA
B
Blog

Mapping the <mark>Internet</mark> on Netlas: Comprehensive Internet-Wide Scanning & OSINT Platform

Weaponized RMM: Hunting the Adversary Abuse of Remote Monitoring Tools Device Code Phishing: Technical Analysis and Proactive Hunting via Netlas Discovering Data Exposure with Netlas Telegram Bot API Abuse - Netlas Blog Using OWASP Amass with Netlas Module - Netlas Blog How we hunt C2 infrastructure at RST Cloud using Netlas - Netlas Blog Using Uncover with Netlas.io module - Netlas Blog Netlas Updates Terms and API & Data License Agreement - Netlas Blog Top 10 Hacking Devices for Ethical Hackers in 2026 - Netlas Blog Inside ClickFix: How Fake Prompts Took Over the Web Top 10 Critical Threat Actors to Watch in 2026: Ransomware, APTs & Defensive Strategies - Netlas Blog Bug Bounty 101 - A Complete Bug Bounty Roadmap for Beginners (2026) - Netlas Blog The Evolution of C2: Centralized to On-Chain - Netlas Blog From Starlink to Star Wars - The Real Cyber Threats in Space - Netlas Blog LLM Vulnerabilities: Why AI Models Are the Next Big Attack Surface - Netlas Blog When AI Turns Criminal: Deepfakes, Voice-Cloning & LLM Malware - Netlas Blog Zero-Click Exploits - Netlas Blog When Patches Fail: An Analysis of Patch Bypass and Incomplete Security - Netlas Blog I Analysed Over 3 Million Exposed Databases Using Netlas - Netlas Blog Post-Quantum Now: From AES & RSA to ML-KEM Hybrids - Netlas Blog Bug Bounty 101: Top 10 Reconnaissance Tools - Netlas Blog Mapping Dark Web Infrastructure - Netlas Blog Top Vibe-Coding Security Risks - Netlas Blog From Chaos to Control: Kanvas Incident Management Tool - Netlas Blog Bug Bounty 101: The Best Courses to Get Started in 2025 - Netlas Blog I, Robot + NIST AI RMF = Complete Guide on Preventing Robot Rebellion - Netlas Blog The $1.5B Bybit Hack & How OSINT Led to Its Attribution - Netlas Blog Hannibal Stealer: A Deep Technical Analysis - Netlas Blog Proactive Threat Hunting: Techniques to Identify Malicious Infrastructure - Netlas Blog The Pyramid of Pain: Beyond the Basics - Netlas Blog SOCMINT: Intelligence in the Social Media Era - Netlas Blog Hannibal Stealer vs. Browser Security - Netlas Blog The Largest Data Breach Ever? How Hackers Stole 16 Billion Credentials - Netlas Blog DNS Cache Poisoning – Is It Still Relevant? - Netlas Blog Modern Cybercrime: Who’s Behind It and Who’s Stopping It - Netlas Blog AI-Driven Attack Surface Discovery - Netlas Blog Netlas vs Urlscan: Tools Comparison - Netlas Blog Track Adversary Infrastructure Challenge 2025 Recap - Netlas Blog What is Threat Intelligence - Netlas Blog Netlas vs IPinfo: Tools Comparison - Netlas Blog Best Nmap Alternatives - Netlas Blog Whois History: How to Check the Domain Owner History - Netlas Blog Top WHOIS & RDAP Tools for Fast IP Address Lookup - Netlas Blog ASN Lookup Explained: Tools, Methods & Insights - Netlas Blog How to Detect CVEs Using Nmap Vulnerability Scan Scripts - Netlas Blog Nmap Cheat Sheet: Top 10 Scan Techiques - Netlas Blog Netlas vs ZoomEye: Platforms Comparison - Netlas Blog Top 6 Most Widely Used Port Scanners in Cybersecurity - Netlas Blog FAQ: Understanding Root DNS Servers and the Root Zone - Netlas Blog Domain Recon: Must-Know Tools for Security Professionals - Netlas Blog DNS History: Exploring Domains Past by Inspecting DNS Trails - Netlas Blog DNSSEC: Should You Use It? An Expert’s View on the Pros, Cons, and When to Implement - Netlas Blog Which DNS Servers Offer the Best Balance of Speed, Security, and Privacy? - Netlas Blog theHarvester: a Classic Open Source Intelligence Tool - Netlas Blog - Netlas Blog Top 15 OSINT Tools for Expert Intelligence Gathering - Netlas Blog A Deep Dive into the Open Web Application Security Project Top 10 Vulnerabilities - Netlas Blog Using Subfinder with Netlas Module - Netlas Blog Netlas Chrome and Firefox Extensions - Netlas Blog Netlas vs Censys: Platforms Comparison - Netlas Blog OSINT in Cybersecurity: Exploring Its Spectrum and Tech - Netlas Blog Best Honeypots for Detecting Network Threats - Netlas Blog Using Maltego with Netlas Module - Netlas Blog Using theHarvester with Netlas - Netlas Blog Using TLDFinder with Netlas - Netlas Blog Netlas vs Fofa: Platforms Comparison - Netlas Blog Netlas vs Shodan: Platforms Comparison - Netlas Blog Google Dorking in Cybersecurity - Netlas Blog 7 Tools for Web Penetration Testing - Netlas Blog Using DNS History in Cybersecurity - Netlas Blog Mastering Online Camera Searches - Netlas Blog Best Attack Surface Visualization Tools - Netlas Blog Complete Guide on Attack Surface Discovery - Netlas Blog How to find unprotected databases with Netlas.io: Chapter 2 - Netlas Blog
Supply Chain Attack - How Attackers Weaponize Software Supply Chains - Netlas Blog
CyberBit · 2025-12-26 · via Mapping the <mark>Internet</mark> on Netlas: Comprehensive Internet-Wide Scanning & OSINT Platform

The Risk Behind Software Trust

Modern applications are no longer self-contained systems; they are assembled from a large number of external components, factors and services, most of which are developed, maintained or operated by third parties.

According to the Linux Foundation’s Census II study, open source software makes up approximately 70% to 90% of a modern software application; in other words, modern applications heavily depend on open source components, which makes FOSS (Free and Open Source Software) a critical part of the software ecosystem 1.

This reliance does not stop at open source libraries. Modern applications directly or indirectly depend on:

  • Open source packages from registries like npm, PyPI and Maven Central.
  • Cloud APIs and SDKs provided by vendors like AWS, Microsoft Azure and Google Cloud.
  • CI/CD platforms such as GitHub Actions, GitLab CI, Jenkins, etc.
  • Third-party SaaS tools for monitoring, logging and analytics.

Another source that highlights this dependency is GitHub’s State of the Octoverse, which shows that even a small application often includes hundreds or more direct and transitive dependencies.

When developers integrate external components or services, they willingly or unwittingly rely on several assumptions, such as:

  • The code fetched from a package registry is authentic and unmodified.
  • The package author or maintainer is a legitimate and uncompromised source.
  • The CI/CD system always executes builds in secure and isolated environments.
  • Cloud APIs always behave as described in the documentation and never introduce malicious behavior.

The Open Source Security Foundation clearly states that most software ecosystems today continue to depend on implicit trust and automation, instead of verifying where the code was originally built and where it came from 2.

How Software Trust Breaks

Modern applications depend on many third-party components, and the trust placed in them can fail in several ways. In most cases, this happens without the application owner doing anything wrong.

The software development process relies heavily on automation; as a result, external code is often pulled, built or deployed automatically. If anything goes wrong upstream (that is, where a piece of code comes from before it reaches the application), the consuming application may include compromised code without any warning.

Some common ways trust breaks are:

  • The account of a developer or maintainer is compromised, allowing unauthorized code changes.
  • A dependency is modified upstream and later pulled by other projects.
  • A malicious update is pushed through an automated build or release process.
  • Cloud or CI/CD credentials are abused to perform unauthorized actions.

A report on GitHub-related incidents and threats shows that stolen credentials and account takeovers are a frequent cause of security incidents. RepoJacking is one of the most commonly used techniques, where attackers exploit renamed or deleted repository namespaces to distribute trojanized code to consumers.

CISA identifies several types of attacks that take advantage of trust between systems, such as:

  • Stealing credentials from trusted users or services.
  • Injecting malicious code into trusted systems.
  • Abusing dependency resolution and update mechanisms.
  • Manipulating build and deployment workflows.

One type of attack within this group is the software supply chain attack.

Understanding the Software Supply Chain

The software supply chain refers to the complete set of systems, tools and processes involved in creating, building, validating, packaging and distributing software before it reaches the end user.

NIST defines the term software supply chain as

The linked set of resources and processes between multiple parties involved in the development, deployment, and maintenance of software.

Unlike traditional supply chains, software supply chains are highly automated, globally distributed and deeply interconnected, which means trust is inherited across multiple systems.

1

Core Components of the Software Supply Chain

A software supply chain consists of many components that help software to be built and deployed:

Source Code Repositories Source code repositories store application code, manage version histories and control who can modify or change the codebase. Popular examples include GitHub, GitLab and Bitbucket.

They are responsible for, and trusted to:

  • Maintain the integrity of the application code.
  • Enforce access controls for repository modification.
  • Preserve the change history and authorship of the repository.

For example, GitHub notes that repositories form the root of trust for modern software projects, as downstream systems and end consumers of the code assume that repository contents are legitimate.

Weaknesses

  • Trust is tied directly to account identity.
  • Changes are often accepted based on who has modification rights instead of independent verification.

Dependency Management Systems

Dependency managers such as npm, PyPI, Maven and RubyGems automatically resolve and install external libraries needed by an application.

From a technical perspective, these systems:

  • Resolve dependencies using manifest files like requirements.txt or package.json.
  • Can build a dependency graph that includes both direct and transitive dependencies.
  • Fetch artifacts from centralized public registries.

Weaknesses

  • Dependency resolution is automated.
  • Transitive dependencies are rarely reviewed directly.

Build Systems and CI/CD Pipelines

Build systems and CI/CD platforms are used to transform the source code and dependencies of an application into executable artifacts. They also handle compilation, testing, packaging and signing of the software.

Common Build Systems and CI/CD Platforms

PlatformCI/CD ModelExecution EnvironmentConfiguration Mechanism
GitHub ActionsEvent-driven workflowsGitHub-hosted runners or self-hosted runnersYAML (.github/workflows)
GitLab CIPipeline-based CI/CDGitLab shared runners or self-managed runnersYAML
(.gitlab-ci.yml)
JenkinsJob-based automationSelf-hosted agents (nodes)Groovy
(Jenkinsfile)
CircleCIPipeline-based CI/CDCloud-managed or self-hosted runnersYAML (.circleci/config.yml)

All the platforms and systems are trusted to execute the build steps, isolate build environments, safeguard API keys and signing credentials and also produce artifacts that reflect source inputs.

All of these platforms and systems are trusted to execute build steps, isolate build environments, safeguard API keys and signing credentials, and produce artifacts that accurately reflect the source inputs.

Artifact Storage and Distribution

Once artifacts are built, they are stored and delivered through various channels such as package registries, vendor update services, container registries and binary distribution portals.

Distribution systems are trusted to:

  • Deliver artifacts without modification.
  • Preserve the integrity of code during storage and transport until delivery.
  • Distribute the intended build outputs.

Single Weak Link, End-to-End Impact

The entire software supply chain operates as a sequential trust system. One small mistake can lead to total failure. A failure at any stage affects all downstream stages that consume its output.

This behavior is not the result of any specific attack or exploit, but rather a structural property of how modern software is assembled and delivered.

What Is a Software Supply Chain Attack

In 2017, CCleaner’s official distribution pipeline was compromised. Attackers infiltrated the vendor’s build and delivery infrastructure and implanted a trojan into a digitally signed release of the software. The compromised version was installed by more than 2.27 million users because the software was delivered through official channels and appeared authentic.

Downstream users were not compromised because their systems were vulnerable; they were compromised because they trusted a legitimate tool delivered through an expected medium. This is an example of a supply chain attack 3.

What a Software Supply Chain Attack Is

A software supply chain attack occurs when a hacker or a group of hackers compromises a trusted component or process involved in software development or distribution and uses it to inject their own malicious code and deliver it to downstream users.

They compromise trusted upstream components such as:

  • Software vendors
  • Build pipelines
  • Update mechanisms
  • Third-party dependencies

Attackers exploit the trust relationships embedded in modern software development and distribution.

CISA describes the software supply chain attack as -

A software supply chain attack occurs when a cyber threat actor infiltrates a software vendor’s network and employs malicious code to compromise the software before the vendor sends it to their customers. The compromised software then compromises the customer’s data or system.

In supply chain attacks, the primary targets are entities that others trust, such as:

  • Open-source projects
  • Build and CI/CD tooling
  • Software vendors
  • Package distribution mechanisms

The actual victims are the users and organizations who consume software from those sources.

The core idea is simple:

The victim installs the malicious code themselves, believing it to be legitimate.

Consider a manufacturing supply chain for medical equipment as an example.

Hospitals rely on manufacturers to supply safe equipment, but if the manufacturer’s production process is compromised or altered, defective equipment is shipped to hospitals. Software supply chains operate in the same way: trust in upstream sources is necessary, but it can also lead to systemic failure.

Signed Builds and Libraries

A signed build is a software artifact that has been digitally signed using a private signing key controlled by the software publisher. The signature is generated over a cryptographic hash of the artifact and is distributed along with the software so consumers can verify it.

Digital signatures are used to verify:

  • The identity of the software publisher.
  • Whether the software has been modified after signing.

The process of digitally signing software or builds is usually implemented using:

  • X.509 certificates and PKI for vendor software.
  • GPG-based signatures for open-source releases.
  • Platform-specific signing mechanisms (e.g., Authenticode, Apple code signing).

1

What Digital Signatures Do Not Guarantee

Even though signed builds are a good security measure, they still do not provide:

  • Malware detection
  • Intent validation
  • Assurance that the code is benign or safe

A valid signature only confirms that the software was signed by a trusted key and has not been changed since it was signed.

In the modern software supply chain, signed artifacts are commonly pulled automatically by package managers and verified directly during software installation or update.

From an attacker’s standpoint, compromising a signing process or a trusted vendor transforms the user’s trust into a highly reliable delivery channel.

Why detection is minimal in a supply chain attack

Detection is minimal because nothing violates the system’s trust model.

Most security controls in a system are designed to answer questions like:

  • Is this software signed?
  • Does it come from an approved source?
  • Is it installed through an allowed mechanism?
  • Is it behaving within expected boundaries?

In a supply chain attack, the answer to all of these questions is “yes,” and yet your system is still compromised.

From the system’s perspective:

  • The publisher identity is valid.
  • The cryptographic signature is verified.
  • The update path is expected.
  • The execution context is authorized.

As a result, security controls apply their policies as intended and still execute malicious code. In other words, the detection systems are doing exactly what they were designed to do – they are simply validating the wrong trust assumptions.

How a Supply Chain Attack Works (Anatomy)

A supply chain attack is not a smash-and-grab operation; it is a trust subversion campaign that follows a repeatable and structured workflow. While individual incidents differ in tooling and impact, the anatomy is consistent: attackers identify a trusted point in the software lifecycle, compromise it upstream and then allow normal distribution mechanisms to deliver malicious code downstream.

The Codecov incident provides a clear example of how such an attack unfolds. It targeted a CI/CD component embedded directly into automated build pipelines across thousands of organizations.

In this section, we will walk through the anatomy of a supply chain attack step by step.

1

Each phase represents a deliberate exploitation decision, not an accident.

Reconnaissance and Target Mapping

The first stage of a supply chain attack is not vulnerability scanning; it is mapping trust and execution paths.

In the Codecov incident, attackers focused on a component that met several criteria:

  • The component executed automatically in CI pipelines.
  • It was widely adopted across unrelated organizations.
  • It was trusted as part of normal development workflows.
  • It was positioned where secrets are routinely exposed.

The component was the Codecov Bash Uploader. It was designed to run inside CI environments, where it had access to environment variables containing credentials and tokens required for automation. From an attacker’s perspective, this represented a high-frequency execution primitive.

At this stage, no code was modified and no systems were breached. The attacker was mapping:

  • Where execution happens.
  • What context is inherited.
  • How trust flows downstream.

Initial Access

Before a supply chain attack is carried out, attackers first gain access to a third-party system, application or tool that they plan to exploit — this is also known as an upstream attack. This can be done by stealing credentials, targeting vendors with temporary access to an organization’s systems or exploiting a software vulnerability, among other methods.

Initial access in a supply chain attack targets the producer side of the ecosystem, not the consumer.

In this step, attackers mostly seek control over:

  • Source repositories
  • Build infrastructure
  • Artifact storage
  • Distribution mechanisms

Access is often achieved through mistakenly exposed credentials (as happened in the Codecov case), misconfigured build systems, overprivileged service accounts and insecure artifact publishing workflows. Once access is gained at this layer, attackers no longer need to interact with victims directly.

In the Codecov incident, initial access targeted Codecov’s artifact production and storage pipeline, not its customers.

The attackers obtained credentials that allowed them to modify the Bash Uploader hosted on Codecov’s infrastructure. This access was possible because of a flaw in the container build process, where a cloud storage credential was exposed to attackers in a Docker image layer 4.

Injection, Signing, and Publishing

After gaining upstream access, attackers typically try to modify a legitimate component rather than create a new malicious one. This step is part of the downstream attack.

In this phase, attackers aim to:

  • Make minimal code changes so the modification does not look suspicious.
  • Preserve the original functionality of the software.
  • Avoid disrupting normal workflows.
  • Rely entirely on existing trust signals.

The malicious logic is designed so that it:

  • Executes internally as part of normal behavior.
  • Avoids obvious indicators of compromise, allowing it to remain in the system for a long time without detection.
  • Blends into expected operational output.

Because of the existing trust, attackers often do not need to bypass cryptographic protections — they are modifying the authoritative source itself.

In the case of Codecov, the uploader script was modified to include logic that collected environment variables at runtime and transmitted them to an external server, all while continuing to operate normally as a coverage reporting tool. The injection was achieved by adding a single line of Bash code that exfiltrated all environment variables from the CI environment to the attacker’s server. Source

1

Distribution and Execution

Distribution in a supply chain attack is typically automatic and passive. It occurs through standard CI workflows.

Once a compromised component is published:

  • CI systems download it during routine builds.
  • Update mechanisms pull it as part of normal software patches.
  • Execution occurs inside approved workflows.
  • The privileges granted to the component remain unchanged.

This phase is where scale is achieved: a single upstream modification can result in thousands of downstream executions, without the attacker ever touching a user’s system directly.

In the Codecov case, CI pipelines across thousands of organizations automatically downloaded and executed the modified uploader between January and April 2021. The injected malicious code ran inside thousands of CI environments with access to credentials and cloud tokens, leading to large-scale credential exposure 5.

Detection and Containment

Detection of supply chain attacks is delayed and difficult because all execution paths remain legitimate and all processes run as they are supposed to.

Traditional security controls monitor:

  • Unauthorized access attempts
  • Abnormal process behavior
  • Policy violations

Supply chain attacks often avoid all of these signals because:

  • Access to the component is authenticated.
  • Execution is expected, since we unknowingly install the malicious component to perform its original function.
  • The component’s behavior aligns with the documented workflow of the original component.

Discovery of such attacks often happens through manual integrity verification, third-party reporting, or when attackers later perform secondary misuse of the exposed credentials.

1

The compromise in Codecov was detected only when a downstream user manually compared the SHA-256 hashes of the uploader and identified a mismatch. By the time remediation began, the compromised script had already executed across a large number of CI environments and collected a huge amount of data.

Containment requires revoking exposed credentials and removing the modified artifacts from all compromised CI environments. Auditing build infrastructure and redesigning the artifact publishing process are also necessary to help restore trust 6.

Modern software is no longer built from scratch; instead, it is assembled from layers of third-party components hosted in public registries such as npm for JavaScript, PyPI for Python, Maven Central for Java, RubyGems and others. Applications are built from these pre-existing open source components, while the registries act as distribution hubs that supply code to development environments, CI/CD pipelines and production systems at a global scale.

What npm Is and Why It Matters

npm (Node Package Manager) is the default package registry and dependency manager for the JavaScript ecosystem, especially for Node.js applications. It contains millions of modules that developers around the world use as building blocks in applications.

From a technical standpoint, npm provides:

  • A public package registry accessible over HTTPS.
  • A dependency resolution engine that selects package versions.
  • A local installation mechanism that places third-party code directly into application paths.

A typical npm-based project declares its dependencies in a package.json.

npm is not unique; other language ecosystems operate under the same trust and automation model. Some examples of other ecosystems are:

1

EcosystemLanguageRegistry RoleCommon Usage Context
PyPIPythonCentral package indexWeb apps, ML, automation
Maven CentralJavaArtifact repositoryEnterprise, Android
RubyGemsRubyPackage hostingWeb frameworks
Go ModulesGoDistributed module systemCloud services

Despite differences in tooling, all these ecosystems share three structural properties:

  • Automated dependency retrieval
  • Implicit trust in maintainers
  • Transitive expansion of dependencies

Open source dependencies are widely used because they reduce development time and offload complexity to third-party libraries, including:

  • Cryptography
  • Serialization
  • Logging
  • Authentication
  • Networking
  • UI rendering

Because these ecosystems are highly interconnected, once a package is published it can be pulled into thousands of independent projects.

Developers reference external packages in project manifest files like package.json or requirements.txt.

Large registries like npm host millions of packages with billions of downloads per week, which makes them one of the largest attack surfaces for supply chain attacks.

Common Attack Methods in Open-Source Dependency Ecosystems

Attackers use a range of techniques that exploit the trust placed in third-party packages and the automation of dependency managers. Some of the most common methods are:

1. Typosquatting

Typosquatting is a method in which an attacker publishes malicious packages with names that are close misspellings of legitimate packages. Because package names are often typed manually or selected from suggestions, developers can accidentally install the wrong package due to a typo.

Just as users sometimes mistype google.com and end up on a fake look-alike site, developers can mistype a package name and install the wrong one.

1

A real example occurred when attackers published over 287 spoofed npm packages with misspelled versions of widely used names in an attempt to launch a supply chain attack.

2. Dependency Confusion

Dependency confusion exploits the way package managers resolve package names. If a project references a private package name but a package with the same name exists in a public registry, the package manager may download the public version instead of the intended private one. This can lead to corrupted code being pulled into the project’s internal environment without any vulnerability being exploited, since it is downloaded with full permissions by the package manager.

The attacker benefits from the automatic resolution and prioritization rules of the package manager.

1

A notable example occurred with PyTorch in 2022: a malicious package named torchtriton was uploaded to PyPI, and when users installed PyTorch, the malicious package was pulled in.

The malicious package stole system details and SSH keys 7.

3. Maintainer Account Hijacking

Attackers target maintainer accounts on registries like GitHub or npm. If they gain access, for example through phishing, they can publish malicious changes or insert malicious code into legitimate packages.

Compromised maintainer credentials provide a direct path for trusted distribution, since packages signed or published by these maintainers are treated as trustworthy by package managers and CI/CD pipelines.

A major npm attack in 2025 is an example of this: attackers accessed a maintainer account via phishing, which allowed them to inject malicious code into 18 widely used packages such as chalk, debug and others that were used by billions of downloads 8.

How One Library Can Impact Many Downstream Projects

These libraries are used by billions of people and, with their daily downloads, have become an essential part of many projects. Dependencies in ecosystems like npm and PyPI are transitive and deeply interconnected; even a tiny package can disrupt or break multiple functions, and a small change can ripple across countless applications.

1

  • A supply chain incident often begins with malicious code or a broken package; this could be a compromised update or a hijacked library.
  • Once the package is published, it becomes available through a registry such as npm or PyPI. Registries distribute packages globally and generally do not verify whether the code is safe or contains problematic logic.
  • During dependency resolution, package managers automatically select and download the package. Developers may never explicitly reference it, yet it still becomes part of the application.
  • The same dependency is then installed inside CI/CD pipelines, where builds run without human interaction or oversight.
  • The dependency is bundled into production deployments; at this point, the application is delivered with the compromised library embedded inside it.
  • The final destination is the end users and their systems, where failures and data exposures take place.
  • This is how one small library can quietly affect thousands of projects simply by moving through the trusted and automated stages of the software supply chain.

Here are some examples of real incidents where individual libraries, even small ones, affected an entire ecosystem:

  • event-stream / flatmap-stream A dependency of a widely used npm library called event-stream was modified to include malicious code targeting cryptocurrency wallets. Attackers introduced a new dependency called flatmap-stream that contained stealer logic for specific applications. In 2018, this malicious chain was used to steal funds from Bitcoin wallet apps that depended on event-stream.

1

  • left-pad When the tiny npm package left-pad was removed in 2016, it broke thousands of builds across major JavaScript projects because it was used in critical frameworks and depended on transitively. This incident showed how even 11 lines of code could halt a large ecosystem 9.

1

  • colors / faker The maintainers of the popular npm packages colors and faker deliberately sabotaged and corrupted their code, causing failures around the world in applications that depended on them. This demonstrated how maintainer control can be abused to trigger failures in downstream systems and applications 10.

    1

These examples show that open-source dependencies are not optional; they are foundational, which is why they are heavily targeted. Understanding them is essential to defending modern software systems.

Case Studies: When the Supply Chain Became the Weapon

Supply chain attacks are particularly dangerous because they move with authority: they operate with the permissions directly granted by the user, travel through legitimate infrastructure and execute inside the environment right under the user’s nose, while the code is assumed to be safe.

The following case studies show what happens when trust itself becomes the main driver of an attack.

SolarWinds Orion (2020): When Trust Became a Backdoor

1

SolarWinds is a major provider of IT monitoring and management software used not only by enterprises but also by governments to manage networks, servers, identities and cloud infrastructure. The Orion platform was deployed deep inside internal networks, with high privileges and broad visibility. This made Orion an ideal surface for a supply chain attack.

The attackers did not breach SolarWinds customers directly; instead, they compromised SolarWinds’ internal software build environment. The main component targeted was the process responsible for compiling and signing Orion updates.

Attackers inserted malicious logic into the build pipeline itself and ensured that the updates were cryptographically signed and operationally indistinguishable from legitimate Orion software releases.

  • Investigations revealed that the attackers established access to SolarWinds’ build system and injected a backdoor named SUNBURST.
  • The code was compiled and digitally signed with SolarWinds’ legitimate certificate.
  • The updates were then distributed via official SolarWinds update servers.

1

The corrupted update easily passed code signing verification, hash checks and update integrity controls.

After the SUNBURST backdoor was installed, it performed a number of functions:

  • Delayed execution for weeks to evade sandbox analysis.
  • Used domain generation techniques to blend its command-and-control traffic with normal Orion communications.
  • Selectively activated only on chosen high-value targets.

All of this minimized detection while enabling long-term takeover.

Once the attack was successful and the systems of high-value targets were compromised, Orion became a stealthy access vector into the targets’ networks. Attackers harvested credentials, accessed identity providers such as Azure Active Directory and deployed second-stage payloads. Many organizations remained compromised until the discovery 11.

According to a report from Fortinet, more than 18,000 organizations installed the compromised update, including U.S. federal agencies, defense contractors and infrastructure operators. Incident response included:

  • System rebuilds
  • Large-scale credential rotation
  • Long-term intelligence and monitoring operations

The financial impact on both organizations and the public was reported in the billions of dollars, and the incident also led to a significant loss of trust in SolarWinds.

MITRE ATT&CK Mapping

PhaseTechnique
Initial AccessT1195.002 – Supply Chain Compromise (Software)
ExecutionT1059 – Command and Scripting Interpreter
Defense EvasionT1027 – Obfuscated / Encrypted Payloads
PersistenceT1053 – Scheduled Tasks
Command & ControlT1071.001 – Web Protocols
Lateral MovementT1021 – Remote Services

NPM Ecosystem – Shai-Hulud Campaign (2024)

1

As discussed earlier, npm is the default package registry for JavaScript and Node.js, supporting frontend applications, backend services and CI/CD tooling. npm packages are automatically installed and executed, often inside CI environments that have access to secrets and environment variables.

This automation created a large implicit trust surface, which was ideal for attackers to exploit.

Rather than targeting a single vendor, attackers targeted the dependency ecosystem itself by compromising multiple npm packages. They focused on maintainer credentials, publishing tokens and automated release workflows to gain control.

How the Attack Took Place

  1. Maintainer credentials were compromised and abused to gain access.
  2. Malicious versions of popular packages were published and distributed to users.
  3. Packages were automatically installed via npm install.
  4. CI pipelines executed install-time scripts, which harvested environment variables and secrets from CI environments.
  5. No software vulnerability was required — the attack relied entirely on registry trust and automation.

Once the attack was successful, the attackers stole credentials and used them to access private repositories, extract secrets and move laterally across development infrastructure. Many affected organizations only discovered the exposure after the stolen credentials were abused externally. Thousands of repositories and CI pipelines were exposed globally, and organizations were forced to rotate credentials, audit their dependencies and reassess their trust in registry-based distribution.

Shai-Hulud 2.0 (2025) was a follow-up or revamped attack building on Shai-Hulud 1.0. Instead of publishing new malware packages, attackers reused stolen CI tokens and maintainer credentials to modify legitimate repositories.

According to a GitGuardian investigation, the campaign led to the exposure of 33,000+ unique secrets, such as:

  • GitHub personal access tokens
  • npm publish tokens
  • Cloud provider credentials
  • CI/CD secrets embedded in workflows

Kaseya VSA & MOVEit Transfer (2021–2023)

Kaseya provides remote monitoring and management software used by Managed Service Providers (MSPs) to administer thousands of downstream customer systems.

MOVEit Transfer is widely deployed for secure data exchange involving government, financial and healthcare data. Both platforms operate with elevated privileges and a high level of trust.

In the case of Kaseya, attackers exploited vulnerabilities in the VSA platform to distribute ransomware via MSP infrastructure. In the MOVEit incident, attackers exploited a zero-day SQL injection vulnerability in a public-facing file transfer application, enabling unauthorized access and data theft.

1

Kaseya’s compromise allowed malicious updates to be pushed downstream automatically to managed endpoints. MOVEit exploitation allowed attackers to deploy web shells and perform silent bulk data exfiltration.

In the Kaseya incident, attackers encrypted systems at MSP scale, while in the MOVEit breach they stole large volumes of sensitive personal and government data.

Double extortion tactics were used to disrupt public services and leak stolen data.

More than 1,500 organizations were affected through MSPs in the Kaseya incident, while 2,000+ organizations reported data exposure in the MOVEit breach.

Regulatory investigations, lawsuits and remediation costs pushed total losses into the hundreds of millions of dollars, not including long-term reputational damage.

Across all cases, attackers did not bypass security controls — they inherited trust. Each incident demonstrated that when software becomes infrastructure, its compromise becomes systemic rather than isolated.

Detecting a Supply Chain Compromise

Supply chain compromises are rarely detected through traditional exploit indicators. In most real-world incidents, detection occurs when trust assumptions break at the integrity or identity layer, not when malware is executed.

Software Bill of Materials (SBOM) Verification

A Software Bill of Materials (SBOM) is a complete, structured inventory of all software components used to build an application, including:

  • Direct dependencies
  • Transitive dependencies
  • Component versions resolved at build time
  • Cryptographic hashes
  • Build metadata (compiler, build system, timestamps)
  • Package names and namespaces

Common formats include SPDX and CycloneDX, both referenced by NIST and CISA as foundational supply chain transparency mechanisms.

SBOM verification is not just the act of generating an SBOM; it is the process of continuously validating that the software we are running still matches the SBOM we trusted at the time of installation. This involves comparing the current software:

  • Against the SBOM generated during the build
  • Against artifacts retrieved from registries
  • Against binaries deployed in production

This helps us determine whether any dependency was altered after the build, whether any unauthorized component entered the dependency graph, or whether the build process itself was manipulated.

An SBOM lifecycle provides continuous visibility, monitoring and control over software dependencies, enabling early detection and containment of supply chain attacks before compromised components propagate downstream.

1

Here are some of the ways inconsistencies usually surface: as unauthorized dependencies, silent version changes or cryptographic trust failures.

Unauthorized dependencies appear when a build or runtime environment contains packages that were never explicitly declared or reviewed. This commonly occurs through transitive dependencies, where upstream libraries pull in additional components without visibility.

Version drift is another indicator. It occurs when the same dependency name resolves to different code over time due to loose version constraints or registry-side changes. In the event-stream incident, downstream projects pulled a malicious version because semantic versioning allowed automatic upgrades.

Common causes include:

  • Loose version constraints (^, ~, *)
  • Registry-side republishing
  • Dependency confusion or namespace collisions

Certificate and signature mismatches expose compromise at the distribution or build level. The Codecov breach is an example: the malicious Bash uploader was detected when customers observed that the SHA hash of the downloaded script did not match the hash published by Codecov.

Detection can occur when:

  • A signed artifact behaves differently than expected.
  • The signature is valid, but the signing context or provenance is inconsistent.
  • Certificates are reused in unexpected pipelines.

Defense and Mitigation

Modern supply chain attacks succeed not because defenses are absent or weak, but because trust is implicit, transitive and rarely verified end to end. The incidents discussed throughout this blog show that protecting individual systems is not enough: defenses must focus on constraining automation and validating integrity continuously, rather than checking only once during the software lifecycle.

Verified Provenance and Package Authenticity

At the core of supply chain defense is the ability to answer a simple question: Where did this software come from, and how was it built?

  • Package signing and
  • Provenance — knowing exactly where a piece of software came from, how it was created, who created it, and being able to prove that cryptographically —

together formalize this trust boundary.

Technologies such as Sigstore and SLSA shift trust away from mutable registries toward verifiable build identities.

Restraining CI/CD as a High-Risk Trust Boundary

CI/CD pipelines represent major trust surfaces in modern software delivery. They combine source access, secrets, signing keys and deployment privileges into a single automated layer.

Effective mitigation should focus on reducing the blast radius, not eliminating automation. This includes:

  • Enforcing least-privilege execution
  • Isolating build runners
  • Ensuring that credentials used by pipelines are short-lived and frequently rotated

Continuous Dependency and Integrity Auditing

Software supply chain compromise mostly occurs after development, so effective defense cannot rely on one-time reviews. Dependency graphs, build artifacts and deployed components must be continuously audited throughout the software lifecycle.

Automated integrity mechanisms such as cryptographic hash verification, SBOM comparison and provenance validation enable organizations to detect when running software changes or diverges from what was originally built, signed or approved. These controls expose silent changes introduced through:

  • Dependency updates
  • Compromised registries
  • Poisoned build environments
  • Unauthorized rebuilds

Maintaining an explicit allow-list of approved dependencies and versions can further constrain the trust boundary and prevent new or unexpected components from entering production without proper review.

These mechanisms do not depend on identifying malicious behavior. Instead, they focus on identifying inconsistencies, which are often the earliest and most reliable indicators of compromise.

In an ecosystem where software has become infrastructure, verification is the only scalable form of trust.

Conclusion

Modern software systems are no longer isolated artifacts; they are composites — collections of code, automation, identities and infrastructure maintained beyond a single organization’s control. This reality makes trust unavoidable, but it also makes implicit trust dangerous.

Supply chain attacks do not break security controls; they operate within them. Code is executed not because it is obviously malicious and sneaks in, but because it is authorized — and that is what makes it truly dangerous. At scale, automation amplifies both productivity and failure.

The case studies examined in this blog show that supply chain security cannot be reduced to patching vulnerabilities or auditing vendors in isolation.

As software increasingly functions as infrastructure, the key question is no longer whether trust exists in the supply chain, but whether that trust can be proven, monitored and revoked when it fails.

What is your choise

I can show you how deep the Internet really goes

Discover exposed assets, infrastructure links, and threat surfaces across the global Internet.