brighter workshop
StandardsRead the notes
Menu

PatternsField note / 2026

SubQL's @subql/common 5.8.3 Was Published Through a Hijacked Build Pipeline

StepSecurity's writeup on the 5.8.3 release gives builders a narrow but urgent window to check what ran on install before patching further downstream.

Version 5.8.3 of @subql/common reached npm through a compromised publishing workflow, according to StepSecurity, and the package harvests credentials both when it installs and when it gets imported into a running project. That timing detail matters: it means exposure is not limited to teams who ran an install script once and moved on. Anyone who imported the package in application code during the window it sat live on the registry inherited the same risk, whether or not they noticed anything unusual in their build logs.

SubQL's tooling sits in the indexing layer that blockchain projects use to query on-chain data, which puts @subql/common in a spot where compromise reaches past a single team's codebase. A hijacked workflow that publishes a malicious point release is a familiar shape of attack across the npm ecosystem: it does not require breaking into a maintainer's personal account, only the automation that account relies on. StepSecurity's report does not attribute the hijack to a specific technique, and that gap is worth naming plainly rather than guessing at.

For builders who pull dependencies through lockfiles and CI caches, the practical work starts with checking whether 5.8.3 ever entered a build, not just whether it sits in a current package.json. Lockfile history, CI artifact logs, and any cached node_modules from the affected window are the places to look, since a credential harvester that fires on import can act before a developer ever opens a terminal. Rotating any secrets that touched a machine during that period is the blunt but necessary response until a clearer timeline of affected versions surfaces.

StepSecurity's post carries no CVE number as of the page it published, which means the usual automated scanning that teams lean on to catch known-bad packages will not flag 5.8.3 by that identifier. Dependency scanners keyed to CVE feeds, including many default GitHub and npm audit configurations, are built around that identifier system, so a gap there is not a formality. It shifts the burden onto teams watching vendor and security-firm advisories directly, which is a slower and less automatable path than the tooling most registries assume developers have in place.

The open question is how far the hijacked workflow reached before anyone caught it, and StepSecurity's account does not say how long 5.8.3 was live or how many installs pulled it before removal. That absence leaves builders working from caution rather than confirmed scope, treating any system that touched the package during the unknown window as compromised until proven otherwise. A single bad point release in a widely used indexing library is a reminder that a publishing pipeline is itself part of the attack surface, not just the code it ships.

Related guides

Primary references