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

推荐订阅源

云风的 BLOG
云风的 BLOG
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
P
Proofpoint News Feed
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
美团技术团队
D
Docker
博客园 - Franky
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

Step Security Blog

Announcing Dependabot Configuration Enhancements: Cooldown and Group Support - StepSecurity Securing Vibe Coding and AI Coding Agents: An End-to-End Approach with StepSecurity - StepSecurity Introducing StepSecurity Dev Machine Guard: Protecting Developer Machines from Supply Chain Attacks - StepSecurity Top 2024 Predictions for CI/CD Security - StepSecurity Dev Machine Guard Is Now Open Source: See What's Really Running on Your Developer Machine - StepSecurity Datadog's DevSecOps 2026 Report Validates What We've Been Building - StepSecurity hackerbot-claw: An AI-Powered Bot Actively Exploiting GitHub Actions - Microsoft, DataDog, and CNCF Projects Hit So Far - StepSecurity Cline Supply Chain Attack Detected: cline@2.3.0 Silently Installs OpenClaw - StepSecurity StepSecurity’s Unified Protection Across the SDLC Infrastructure Threat Framework (SITF) - StepSecurity @velora-dex/sdk Compromised on npm: Malicious Version Drops macOS Backdoor via launchctl Persistence - StepSecurity axios Compromised on npm - Malicious Versions Drop Remote Access Trojan - StepSecurity Behind the Scenes: How StepSecurity Detected and Helped Remediate the Largest npm Supply Chain Attack - StepSecurity 10 Layers Deep: How StepSecurity Stops TeamPCP's Trivy Supply Chain Attack on GitHub Actions - StepSecurity Malicious IoliteLabs VSCode Extensions Target Solidity Developers on Windows, macOS, and Linux with Backdoor - StepSecurity TeamPCP Plants WAV Steganography Credential Stealer in telnyx PyPI Package - StepSecurity litellm: Credential Stealer Hidden in PyPI Wheel - StepSecurity Checkmarx KICS GitHub Action Compromised: Malware Injected in All Git Tags - StepSecurity CanisterWorm: How a Self-Propagating npm Worm Is Spreading Backdoors Across the Ecosystem - StepSecurity Trivy Compromised a Second Time - Malicious v0.69.4 Release, aquasecurity/setup-trivy, aquasecurity/trivy-action GitHub Actions Compromised - StepSecurity bittensor-wallet 4.0.2 Compromised on PyPI - Backdoor Exfiltrates Private Keys - StepSecurity Malicious npm Releases Found in Popular React Native Packages - 130K+ Monthly Downloads Compromised - StepSecurity Malicious Polymarket Bot Hides in Hijacked dev-protocol GitHub Org and Steals Wallet Keys - StepSecurity ForceMemo: Hundreds of GitHub Python Repos Compromised via Account Takeover and Force-Push - StepSecurity xygeni-action Compromised: C2 Reverse Shell Backdoor Injected via Tag Poisoning - StepSecurity kubernetes-el Compromised: How a Pwn Request Exploited a Popular Emacs Package - StepSecurity Harden Runner Now Supports Windows and macOS GitHub Actions Runners - StepSecurity 10,000 Open-Source Projects Now Secured by Harden-Runner Community-Tier: A Milestone Three Years in the Making - StepSecurity 20+ Popular NPM Packages Compromised (Chalk, Debug, Strip-ANSI, Color-Convert, Wrap-ANSI...) - StepSecurity 2024 in Review: The Evolution of CI/CD Security & What's Next - StepSecurity How to Use Docker in Actions Runner Controller (ARC) Runners Securely - StepSecurity
How StepSecurity Caught a Release Storm in Microsoft’s @t...
2026-03-01 · via Step Security Blog

On February 17, 2026, StepSecurity AI Package Analyst flagged something unusual: a sudden flood of version releases across several well-known @types/ packages on npm — including @types/mapbox__point-geometry, @types/tar, and others. What started as an anomaly alert turned into a fascinating investigation into a subtle automation bug in one of the most important open-source toolchains in the JavaScript ecosystem.

Background: What Are @types Packages?

@types/ packages on npm are community-maintained TypeScript type definitions for JavaScript packages that don't ship their own types, hosted on DefinitelyTyped. As more packages began bundling types natively, their corresponding @types/ stubs became redundant and are marked deprecated. For a deeper overview, see the official TypeScript handbook.

What We Observed

Our AI Package Analyst detected the following anomalies across multiple @types/ packages:

~50+ semantic version releases published within a 24-hour window for individual packages

No code changes between releases — only version number bumps

The first release in each chain was a legitimate deprecation notice (correct behavior: these are stubs packages whose originals now include their own types)

All subsequent releases were identical deprecated versions, repeating endlessly

This pattern was a clear red flag. Legitimate deprecation publishing should be a one-time event per package. Something was stuck in a loop.

StepSecurity AI Package Analyst report

Tracing the Source: An Automated GitHub Workflow

Digging deeper, we traced all the releases back to a single GitHub Actions workflow: microsoft/DefinitelyTyped-tools → publish-packages.yml

This workflow is responsible for automating npm package publishing for DefinitelyTyped. A few key details about how it works:

It runs every 30 minutes on a scheduled trigger.

Publish Packages workflow running every 30 minutes, triggering repeated ghost releases

On each run, it reads notNeededPackages.json from the DefinitelyTyped repository — a file listing all @types/ packages that are no longer needed because their source packages now bundle types directly

For each package in that list, it publishes a deprecated version to npm

Under normal circumstances, this is a “publish once and move on” process. But something was causing the workflow to keep re-publishing deprecated versions on every run, incrementing the version each time — over and over, every 30 minutes.

The Root Cause: A Broken Loop Guard

The workflow was designed to publish a deprecated version of a package exactly once — before each run, it checks npm to see if the package is already marked as deprecated and skips it if so.

The bug came down to a JavaScript quirk: the code was supposed to pass "latest" as the publish label, but instead passed undefined, which silently overrides built-in library defaults rather than falling back to them. So the label was never applied, the check never found it, and a new version was published on every run — every 30 minutes — resulting in 70+ identical releases with no code changes.

The fix was a one-liner ensuring the label always defaults to "latest", which immediately broke the loop. We raised the issue in the repository here, and maintainer jakebailey who jumped on it immediately — diagnosing the root cause, opening a fix, and getting it reviewed and merged all within the same day. That kind of responsiveness in open source is rare and genuinely appreciated.

Fix to stop the repeated npm release loop

Why This Matters

At first glance, this might seem like a minor operational hiccup — a few extra deprecated versions on npm that nobody will install. But it’s worth thinking about the broader implications:

Noise becomes cover: An attacker who understands how automated pipelines work could potentially exploit or mimic this pattern. A flood of innocuous-looking version bumps is exactly the kind of signal that gets ignored. Our monitoring systems are designed to surface exactly this kind of anomaly before it can be used as camouflage.

Automated publishing pipelines need tight guardrails: This workflow runs every 30 minutes and publishes packages on behalf of one of the most widely used TypeScript toolchains in the world. A bug in the logic — even a one-liner involving undefined — can have outsized, cascading effects across the npm ecosystem.

Supply chain visibility matters: If we weren’t monitoring npm release patterns at scale, this incident could have continued for days or weeks without anyone noticing. The @types/ packages collectively have millions of weekly downloads. Any unexpected behavior in this space deserves attention.

Timeline

Time Event
Feb 17, 2026 StepSecurity npm monitoring detects unusual release pattern across @types/ packages
Feb 17, 2026 Investigation traces releases to publish-packages.yml workflow
Feb 17, 2026 We raise the issue via GitHub issue #1254
Feb 17, 2026 Maintainers respond and fix merged via PR #1255

Conclusion

This was a case where proactive monitoring caught a real automation bug — one that was entirely benign in intent, but had the potential to go unnoticed and erode trust in a critical part of the TypeScript ecosystem. We commend the DefinitelyTyped-tools maintainers for their swift response.

At StepSecurity, we continuously monitor npm, GitHub Actions workflows, and other supply chain vectors for anomalous behavior. This incident is a good reminder that even well-maintained, widely trusted projects can have subtle bugs with ecosystem-wide blast radius.

If you’re interested in how we monitor npm release patterns or want to learn more about supply chain security, reach out to us.

References

microsoft/DefinitelyTyped-tools PR #1255

DefinitelyTyped – notNeededPackages.json

publish-packages.yml workflow