Product1 distinct publisher3 min readUpdated
The cheapest way to run code on a developer's machine now needs approval. Checkmarx expects attackers to move to runtime, and developers to start rubber-stamping the prompt.
The Product Desk · Product desk
Compiled by The Product DeskSomething wrong?How this is made
npm v12 no longer runs dependency lifecycle scripts automatically during installation; they are blocked unless explicitly allowed, and developers have to approve them first [1][4]. That closes the cheapest known path for getting attacker code onto a developer machine, because until now any script bundled with a package ran on install with no review, no approval and no second look [2].
The economics of the old path were hard to beat. A poisoned package with a malicious postinstall script required nothing from the victim beyond running npm install [3]. Removing that removes an attacker's guarantee of execution, and attacker cost is one of the few levers defenders actually control [13].
What it does not remove is the incentive to compromise the package in the first place [13]. Checkmarx's analysis argues attackers will simply relocate the payload from install-time scripts into code that executes when the compromised package runs [5]. Darren Meyer, security research advocate at Checkmarx [14], put it as follows: "It's a bit like locking a door in a glass house: robbers will just start breaking windows" [6]. His reasoning is about effort rather than capability: lifecycle scripts get used because they are nearly guaranteed to execute, runtime infection takes more work, and with the door locked that extra work becomes worth doing [7].
The second failure mode is procedural, and it is the one operators can actually manage. A prompt is only a checkpoint if someone reads it, and Checkmarx warns the protection weakens if developers routinely allow scripts without sufficient review [8]. Meyer expects exactly that: developers under pressure to ship will get used to approving scripts they know are usually safe, a cursory look is unlikely to catch cleverly hidden malicious content, and the likely end state is approving without reading or finding a way to auto-approve everything [9]. Which means upgrading npm changes the default but not the decision, because the decision still sits with a developer mid-sprint [1].
The recommendation from Checkmarx is not "ignore scripts and call it done." Meyer frames allowlisting as a shared decision between security and engineering rather than a blanket restriction handed down [10]. In practice that means an allowScripts policy that denies lifecycle scripts which are not essential and approves those assessed as acceptably safe, backed by configuration management that makes strict-allow-scripts the default npm behaviour, which he argues reduces alert fatigue while keeping a safety net [11]. The target is not zero scripts, since some packages genuinely need theirs to function; it is fewer unreviewed ones, enforced by default rather than left to individual judgement calls [12].
The operator reading of this is straightforward. If your response to npm v12 is a version bump, you have converted a silent execution risk into an approval queue that your team will learn to clear quickly [9][1]. The durable version is a checked-in allowlist, a default enforced by configuration management rather than by the person typing the install command [11], and detection that assumes payloads now fire at import or use time rather than at install [5].
Worth watching: whether real-world malicious packages start shipping runtime payloads instead of postinstall hooks [5], and whether teams end up with auto-approve workarounds that restore the old behaviour under a new name [9].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Meyer's advice for security teams is to treat allowlisting as a shared decision between security and engineering rather than a blanket restriction handed down from above, noting every team's risk tolerance will be different.
Meyer said teams should work with developers to set an allowScripts policy that denies lifecycle scripts that are not essential and approves those assessed as acceptably safe, and that combining this with configuration management making 'strict-allow-scripts' the default npm behaviour can reduce alert fatigue while still providing a safety net.
Some packages genuinely need their install scripts to function; the goal is not zero scripts but fewer unreviewed ones, enforced by default rather than left to individual judgement calls in the middle of a sprint.
npm v12 blocks dependency lifecycle scripts by default unless they are explicitly allowed, closing off a common software supply chain attack path.
Before this change, installing a package from npm caused any lifecycle script bundled with it to run automatically, with no review, no approval and no second look.
A poisoned package with a malicious postinstall script does not require a developer to do anything other than run npm install.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One trade article resting on a single vendor spokesperson
The behavioural change itself is stated clearly and consistently within the piece, including in its FAQ, but everything beyond that — the runtime-shift prediction, the approval-fatigue prediction, the policy recommendation — comes from one Checkmarx interviewee in one publication. No npm release notes, no independent researcher, and no data are supplied.
Default shipped; no uptake data
The only adoption fact available is that the default-deny behaviour exists in npm v12, which by construction reaches anyone on that major version. Nothing is supplied about how many teams have upgraded, how allowScripts policies are being configured in practice, or how often approvals are granted, so the signal cannot be scored higher without inventing it.
Mildly overstated by unmeasured predictions
The article is unusually self-limiting for security trade coverage: it credits the control, then immediately caps the claim by noting it does not remove attacker incentive. The modest positive gap comes from two confident behavioural forecasts — attackers relocating to runtime, developers rubber-stamping approvals — presented as near-certain while no incident data, telemetry, or independent corroboration is offered.
Vendor-sourced analysis of its own market
The analysis and every quote come from a security research advocate at Checkmarx, a supply-chain security vendor whose product relevance grows if the threat is framed as merely relocating from install-time to runtime and if human approval controls are framed as unreliable. The recommendation to layer allowScripts policy and continued monitoring sits in the same commercial neighbourhood. This is disclosed in the article rather than hidden, and npm's change is not the vendor's own product, which caps the score.
Confident on the change, weak on the consequences
High confidence that npm v12 blocks lifecycle scripts by default and requires approval, since the source states it plainly and repeats it in FAQ form. Low confidence in the downstream narrative: single publisher, single vendor voice, no primary documentation, no adoption or behavioural measurement, and two central claims that are predictions rather than findings.
build
The npm audit that works because it never installs the package1 distinct publisher
build
Claude Code's new default is a confession: the approval prompt was never a control1 distinct publisher
product
Cloudsmith's cooldown policies make delay a control, and that makes it your decision1 distinct publisher
security
The dependency gate moves upstream: why post-commit SCA misses hallucinated packages1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 20, 2026