Skip to content
supplychainattack.orgSupply chain attack incident catalog
resolvedcritical

Malicious code in eslint-generate-prerelease (npm)

A malicious npm package eslint-generate-prerelease v99.9.1 was published with an inflated version number to win dependency resolution against a private-registry package of the same name. The package itself is hollow but declares a transitive dependency (ltidisafe) pinned to a tarball URL on a Google Cloud Storage bucket, allowing execution of arbitrary lifecycle scripts and code outside npm's audit scope.

ShareXLinkedInHacker News
Disclosed
Last updated
Blast radius
Any npm user who installed eslint-generate-prerelease v99.9.1 and its transitive dependency ltidisafe from the attacker-controlled GCS bucket.
Ecosystems
Attack vectors
Affected entities
  • eslint-generate-prerelease · 99.9.1
  • ltidisafeTransitive dependency fetched from https://ltidi.storage.googleapis.com/depenconf/ltidisafe-3.6.2.tgz

A targeted dependency-confusion attack was conducted against npm users via the package eslint-generate-prerelease. The attacker published version 99.9.1 under a name resembling internal tooling, using an inflated version number to win resolution against a legitimate private-registry package of the same name.\n\nThe published package contains only an empty module (index.js = 'module.exports = {};'), but declares a single dependency: ltidisafe, pinned not as a registry package but as a direct tarball URL (https://ltidi.storage.googleapis.com/depenconf/ltidisafe-3.6.2.tgz) on a Google Cloud Storage bucket. When npm install is executed, npm fetches this tarball from a location outside the registry's audit scope and executes any lifecycle scripts and main module it contains.\n\nThe attack pattern—version inflation, the path segment 'depenconf', and the use of an external tarball URL—is consistent with a deliberate dependency-confusion attack. The harm is delivered through the URL-pinned transitive dependency rather than the lure package itself.\n\nThe incident was identified and credited to the OpenSSF malicious-packages repository.

Indicators of compromise

Packages
  • eslint-generate-prerelease
  • ltidisafe
Domains
  • ltidi.storage.googleapis.com

Remediation

  • Remove eslint-generate-prerelease v99.9.1 from all environments and lock files.
  • Audit npm install logs and package-lock.json for any fetch of ltidisafe-3.6.2.tgz from https://ltidi.storage.googleapis.com/.
  • If the package was installed, assume the system may have executed arbitrary code; perform a security audit and consider re-imaging affected systems.
  • Use npm audit to check for any remaining malicious or suspicious dependencies.
  • Consider implementing private-registry pinning and dependency verification policies to prevent dependency-confusion attacks.
  • Monitor for similar patterns: inflated version numbers, external tarball URLs, and packages with names resembling internal tooling.

Sources

  1. GitHub Advisory GHSA-m4vp-pxj5-3j47 · GitHub Advisory Database

Cite this entry

"Malicious code in eslint-generate-prerelease (npm)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 13, 2026; last updated August 13, 2026. https://supplychainattack.org/incident/malicious-code-in-eslint-generate-prerelease-npm-1dfe6l

Suggest a correction

Found an error or have a newer source? Corrections to factual errors take priority over new entries.

  1. resolvedcritical

    Malicious code in bcc-design (npm)

    bcc-design@9999.0.0 on npm is a dependency-confusion beacon package with no legitimate functionality. Its postinstall script exfiltrates the installer's hostname and system metadata to an attacker-controlled IP endpoint.

    npmDependency confusionCompromised package
  2. containedcritical

    Malicious code in bcc-design-icons (npm)

    bcc-design-icons@9999.0.0 on npm contains malicious postinstall script that exfiltrates hostname and package name to attacker-controlled IP 91.201.215.48:8000. The package lacks expected icon-library functionality and exhibits characteristics of a dependency-confusion attack targeting internal/private npm installers.

    npmDependency confusionCompromised package
  3. resolvedcritical

    Malicious code in fastly-vcl-language-client (npm)

    The npm package fastly-vcl-language-client contained malicious code in a preinstall script that collected system information and CI environment variables, exfiltrating data to an external webhook endpoint. The package appears to be a dependency-confusion attack targeting internal Fastly tooling.

    npmCompromised packageDependency confusion
  4. resolvedcritical

    Malicious code in depcruise-wrap-stream-in-html (npm)

    depcruise-wrap-stream-in-html@99.9.1 is a malicious npm package that mimics an internal helper of dependency-cruiser. It is a hollow package that downloads and executes arbitrary code from a Google Cloud Storage bucket during installation.

    npmCompromised packageDependency confusionTyposquatting