Verwendung nicht gewarteter Drittanbieter-Komponenten

Beschreibung

Verwendung nicht gewarteter Drittanbieter-Komponenten tritt auf, wenn ein Produkt von Drittanbieter-Komponenten abhängt, die nicht mehr aktiv gewartet oder unterstützt werden. Nicht gewartete Komponenten erhalten keine Sicherheitspatches, wodurch bekannte Schwachstellen unbehandelt bleiben. Wenn neue Schwachstellen entdeckt werden, bleiben sie unbegrenzt ausnutzbar. Dies erzeugt eine ständig wachsende Angriffsfläche, während die Komponente altert. Zusätzlich können nicht gewartete Komponenten Kompatibilitätsprobleme mit neueren Systemen haben und keine Dokumentation für ordnungsgemäße Sicherheitskonfiguration besitzen.

Risiko

Nicht gewartete Komponenten sind ein erhebliches Supply-Chain-Sicherheitsrisiko. Wenn Schwachstellen in aufgegebenen Bibliotheken entdeckt werden, sind keine Patches verfügbar, was alle abhängigen Anwendungen dauerhaft verwundbar lässt. Die Log4j-Schwachstelle (CVE-2021-44228) zeigte, wie eine einzelne Bibliotheksschwachstelle Millionen von Anwendungen betreffen kann. Abhängigkeitsketten bedeuten, dass selbst indirekte Abhängigkeiten von nicht gewarteten Komponenten Risiken erzeugen. Angreifer scannen aktiv nach Anwendungen, die bekannt verwundbare Versionen populärer Bibliotheken verwenden.

Lösung

Führen Sie ein Inventar aller Drittanbieter-Komponenten (Software Bill of Materials - SBOM). Überwachen Sie Komponenten auf Wartungsstatus und Sicherheitshinweise. Ersetzen Sie nicht gewartete Komponenten durch aktiv gewartete Alternativen, bevor sie zu Sicherheitsrisiken werden. Verwenden Sie automatisierte Abhängigkeits-Scan-Tools (Dependabot, Snyk, OWASP Dependency-Check). Implementieren Sie Richtlinien, die minimale Wartungsaktivität für genehmigte Komponenten erfordern. Planen Sie den Komponentenlebenszyklus - haben Sie Migrationsstrategien bereit. Erwägen Sie das Forken kritischer aufgegebener Projekte, wenn keine Alternativen existieren.

Häufige Auswirkungen

AuswirkungDetails
VertraulichkeitBereich: Datenpreisgabe

Ungepatchte Schwachstellen in Komponenten können ausgenutzt werden, um auf sensible Daten zuzugreifen.
IntegritätBereich: Systemkompromittierung

Bekannte Schwachstellen in nicht gewarteten Komponenten ermöglichen Angriffe.
VerfügbarkeitBereich: Dienstunterbrechung

Kompatibilitätsprobleme und Exploits können Systemausfälle verursachen.

Beispielcode + Lösungscode

Anfälliger Code

// ANFÄLLIG: package.json mit nicht gewarteten Abhängigkeiten
{
  "dependencies": {
    "event-stream": "3.3.6",     // Kompromittiert 2018, nicht mehr gewartet
    "left-pad": "1.3.0",         // Berüchtigter npm-Vorfall, aufgegeben
    "request": "2.88.2",         // Veraltet seit 2020
    "moment": "2.29.1",          // Im Wartungsmodus, keine neuen Features
    "lodash": "3.10.1"           // Sehr alte Version mit bekannten Schwachstellen
  }
}
<!-- ANFÄLLIG: pom.xml mit nicht gewarteten Java-Bibliotheken -->
<dependencies>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts-core</artifactId>
        <version>1.3.10</version>  <!-- Struts 1 EOL seit 2013! -->
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>  <!-- Bekannte Deserialisierungsschwachstelle -->
    </dependency>
</dependencies>
# ANFÄLLIG: requirements.txt mit nicht gewarteten Paketen
django==1.11              # EOL seit 2020
Pillow==5.0.0            # Sehr alt, viele CVEs
requests==2.6.0          # Alte Version mit Schwachstellen
pycrypto==2.6.1          # Nicht gewartet, ersetzt durch pycryptodome

Korrigierter Code

// SICHER: package.json mit gewarteten Alternativen
{
  "dependencies": {
    "readable-stream": "^4.0.0",  // Gewartete Alternative zu event-stream
    "string.prototype.padstart": "^3.1.0",  // Native-ähnliche Alternative
    "axios": "^1.6.0",            // Aktive Alternative zu request
    "date-fns": "^3.0.0",         // Aktive Alternative zu moment
    "lodash": "^4.17.21"          // Aktuelle gewartete Version
  },
  "scripts": {
    "audit": "npm audit",
    "outdated": "npm outdated"
  }
}
<!-- SICHER: pom.xml mit gewarteten Bibliotheken -->
<dependencies>
    <!-- Spring MVC oder anderes gewartetes Framework verwenden -->
    <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>  <!-- Gewartete Version -->
    </dependency>
</dependencies>

<!-- OWASP Dependency-Check-Plugin hinzufügen -->
<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>
# SICHER: requirements.txt mit gewarteten Paketen
django>=4.2,<5.0         # LTS-Version, aktiv gewartet
Pillow>=10.0.0           # Aktuelle gewartete Version
requests>=2.31.0         # Aktuelle Version
pycryptodome>=3.19.0     # Gewarteter Fork von pycrypto

# Zur CI/CD-Pipeline hinzufügen:
# pip install pip-audit
# pip-audit --requirement requirements.txt
# SICHER: GitHub Actions Workflow für Abhängigkeitsüberwachung
name: Abhängigkeitssicherheit

on:
  schedule:
    - cron: '0 0 * * 1'  # Wöchentlich
  push:
    branches: [main]

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

      - name: npm audit ausführen
        run: npm audit --audit-level=moderate

      - name: Auf veraltete Pakete prüfen
        run: npm outdated || true

      - name: Snyk-Sicherheitsscan ausführen
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

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

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

Ausgenutzt in der Praxis

Log4Shell (Log4j, 2021)

CVE-2021-44228 in Apache Log4j betraf Millionen von Anwendungen. Obwohl Log4j gewartet wird und schnell gepatcht wurde, blieben Anwendungen, die ältere Versionen verwenden oder langsam aktualisieren, für längere Zeiträume verwundbar.

event-stream npm-Paket-Kompromittierung (2018)

Das event-stream npm-Paket wurde an einen bösartigen Maintainer übertragen, der Kryptowährungs-stehlenden Code einschleuste, was Risiken bei Wechsel der Paketeigentümerschaft demonstriert.

Apache Struts 1 Schwachstellen (fortlaufend)

Anwendungen, die noch Struts 1 verwenden (EOL seit 2013), bleiben anfällig für bekannte Exploits ohne verfügbare Patches.


Tools zum Testen/Ausnutzen


CVE-Beispiele


Referenzen

  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/