Use of Unmaintained Third Party Components

Description

Use of Unmaintained Third Party Components occurs when a product depends on third-party components that are no longer actively maintained or supported. Unmaintained components do not receive security patches, leaving known vulnerabilities unaddressed. As new vulnerabilities are discovered, they remain exploitable indefinitely. This creates an ever-growing attack surface as the component ages. Additionally, unmaintained components may have compatibility issues with newer systems and may lack documentation for proper security configuration.

Risk

Unmaintained components are a significant supply chain security risk. When vulnerabilities are discovered in abandoned libraries, no patches are forthcoming, leaving all dependent applications permanently vulnerable. The Log4j vulnerability (CVE-2021-44228) demonstrated how a single library vulnerability can affect millions of applications. Dependency chains mean that even indirect dependencies on unmaintained components create risk. Attackers actively scan for applications using known-vulnerable versions of popular libraries.

Solution

Maintain an inventory of all third-party components (Software Bill of Materials - SBOM). Monitor components for maintenance status and security advisories. Replace unmaintained components with actively maintained alternatives before they become security liabilities. Use automated dependency scanning tools (Dependabot, Snyk, OWASP Dependency-Check). Implement policies requiring minimum maintenance activity for approved components. Plan for component lifecycle—have migration strategies ready. Consider forking critical abandoned projects if no alternatives exist.

Common Consequences

ImpactDetails
ConfidentialityScope: Data Exposure

Unpatched vulnerabilities in components can be exploited to access sensitive data.
IntegrityScope: System Compromise

Known vulnerabilities in unmaintained components enable attacks.
AvailabilityScope: Service Disruption

Compatibility issues and exploits can cause system failures.

Example Code + Solution Code

Vulnerable Code

// VULNERABLE: package.json with unmaintained dependencies
{
  "dependencies": {
    "event-stream": "3.3.6",     // Compromised in 2018, no longer maintained
    "left-pad": "1.3.0",         // Infamous npm incident, abandoned
    "request": "2.88.2",         // Deprecated since 2020
    "moment": "2.29.1",          // In maintenance mode, no new features
    "lodash": "3.10.1"           // Very old version with known vulnerabilities
  }
}
<!-- VULNERABLE: pom.xml with unmaintained Java libraries -->
<dependencies>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts-core</artifactId>
        <version>1.3.10</version>  <!-- Struts 1 EOL since 2013! -->
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>  <!-- Known deserialization vuln -->
    </dependency>
</dependencies>
# VULNERABLE: requirements.txt with unmaintained packages
django==1.11              # EOL since 2020
Pillow==5.0.0            # Very old, many CVEs
requests==2.6.0          # Old version with vulnerabilities
pycrypto==2.6.1          # Unmaintained, replaced by pycryptodome

Fixed Code

// SAFE: package.json with maintained alternatives
{
  "dependencies": {
    "readable-stream": "^4.0.0",  // Maintained alternative to event-stream
    "string.prototype.padstart": "^3.1.0",  // Native-like alternative
    "axios": "^1.6.0",            // Active alternative to request
    "date-fns": "^3.0.0",         // Active alternative to moment
    "lodash": "^4.17.21"          // Current maintained version
  },
  "scripts": {
    "audit": "npm audit",
    "outdated": "npm outdated"
  }
}
<!-- SAFE: pom.xml with maintained libraries -->
<dependencies>
    <!-- Use Spring MVC or other maintained framework -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>6.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.4</version>  <!-- Maintained version -->
    </dependency>
</dependencies>

<!-- Add OWASP dependency check plugin -->
<plugin>
    <groupId>org.owasp</groupId>
    <artifactId>dependency-check-maven</artifactId>
    <version>9.0.0</version>
    <executions>
        <execution>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>
# SAFE: requirements.txt with maintained packages
django>=4.2,<5.0         # LTS version, actively maintained
Pillow>=10.0.0           # Current maintained version
requests>=2.31.0         # Current version
pycryptodome>=3.19.0     # Maintained fork of pycrypto

# Add to CI/CD pipeline:
# pip install pip-audit
# pip-audit --requirement requirements.txt
# SAFE: GitHub Actions workflow for dependency monitoring
name: Dependency Security

on:
  schedule:
    - cron: '0 0 * * 1'  # Weekly
  push:
    branches: [main]

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run npm audit
        run: npm audit --audit-level=moderate

      - name: Check for outdated packages
        run: npm outdated || true

      - name: Run Snyk security scan
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

  sbom:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Generate SBOM
        uses: anchore/sbom-action@v0
        with:
          format: spdx-json
          output-file: sbom.spdx.json

Exploited in the Wild

Log4Shell (Log4j, 2021)

CVE-2021-44228 in Apache Log4j affected millions of applications. While Log4j is maintained and was patched quickly, applications using older versions or those slow to update remained vulnerable for extended periods.

event-stream npm Package Compromise (2018)

The event-stream npm package was transferred to a malicious maintainer who injected cryptocurrency-stealing code, demonstrating risks when package ownership changes.

Apache Struts 1 Vulnerabilities (Ongoing)

Applications still using Struts 1 (EOL since 2013) remain vulnerable to known exploits with no patches available.


Tools to test/exploit


CVE Examples


References

  1. MITRE. "CWE-1104: Use of Unmaintained Third Party Components." https://cwe.mitre.org/data/definitions/1104.html

  2. OWASP. "A06:2021 – Vulnerable and Outdated Components." https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components/