Abandoned packages are a latent supply chain risk: they accumulate unpatched CVEs indefinitely, and their maintainers cannot respond to security disclosures. When an abandoned package becomes popular enough to be a valuable attack surface, malicious actors have successfully requested and received maintainer access — precisely to insert backdoors into what appears to be a legitimate, versioned dependency. OWASP A06 (Vulnerable and Outdated Components) explicitly covers this scenario. CWE-1104 (Use of Unmaintained Third Party Components) names the defect class. SSDF PW.4 requires ongoing vulnerability tracking; you cannot track vulnerabilities in a package whose maintainer has gone dark. The longer an abandoned package stays in your dependency graph, the more likely it becomes that you'll be the last project to find out it was compromised.
Medium because abandonment itself doesn't introduce an immediate exploit, but it guarantees that any future vulnerability in that package will go unpatched and unannounced.
For each abandoned dependency, evaluate alternatives before your next deploy cycle:
src/lib/ and own it directly.Add a scheduled npm outdated review to your quarterly engineering housekeeping to catch abandonment before it becomes a crisis.
ID: dependency-supply-chain.maintenance.no-abandoned-deps
Severity: medium
What to look for: Examine production dependencies (dependencies in package.json) and look for packages that show signs of abandonment: check the resolved version in the lock file against the npm registry metadata if accessible, or evaluate based on version age. Packages to flag: those whose latest version in the lock file was published more than 2 years ago AND which have no indication of intentional maintenance-freeze (i.e., they are not declared as "stable" or "feature-complete" in their README). Well-known stable-by-design packages (e.g., ms, mime-types, mime-db, qs, inherits) do not count as abandoned. Count all instances found and enumerate each.
Pass criteria: All production dependencies show evidence of recent maintainer activity (last release within 2 years), or are well-known intentionally-stable utility packages. At least 1 implementation must be confirmed.
Fail criteria: One or more production dependencies have not received any release in 2+ years and are not known intentionally-stable packages.
Skip (N/A) when: No package.json detected, or the project has no production dependencies listed.
Detail on fail: "Package 'some-lib@1.2.0' in dependencies — last published 3 years ago with no recent activity. Evaluate whether the package is abandoned." List up to 3 packages.
Remediation: Abandoned packages accumulate unpatched vulnerabilities over time, and their maintainers cannot respond to security disclosures. If the package becomes popular enough to be a valuable attack target, it may be taken over by malicious actors.
For each abandoned dependency:
src/lib/.For a broader view of code quality and maintainability practices, the Code Maintainability Audit covers this in depth.