Part-DB: Authentifizierte Remote-Code-Execution über .phar-Upload aus public/media
Ein angemeldeter Nutzer der Standardgruppe lädt eine .phar-Datei als Bauteil-Anhang hoch und führt sie über das öffentliche Web-Verzeichnis public/media als PHP aus.
Advisory-ID: TP-2026-019
Produkt: Part-DB (Open-Source-Bauteil- und Lagerverwaltung für Elektronik)
Schwachstellentyp: Uneingeschränkter Datei-Upload mit gefährlichem Typ (CWE-434)
CVE: CVE-2026-54630
CVSS 3.1: 9.6 (Kritisch) · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
Betroffene Versionen: <= 2.12.0
Behoben in: 2.12.1
Hersteller-Advisory: GHSA-w5m7-3xf7-6g7g
Gemeldet: 6. Juni 2026
Zusammenfassung
Part-DB ist eine Open-Source-Anwendung zur Verwaltung von Elektronik-Bauteilen und Lagerbeständen. Der Upload-Handler für Bauteil-Anhänge speichert hochgeladene Dateien mit der vom Client gelieferten Dateiendung im web-ausgelieferten Medienverzeichnis, und seine Endungs-Sperrliste enthält phar nicht. Öffentliche Anhänge (die Voreinstellung) landen in public/media/, dem Apache-Dokumentenstamm, und die mitgelieferte Apache-Konfiguration leitet .phar an PHP-FPM weiter, sodass die abgelegte Datei beim Abruf als PHP ausgeführt wird. Da ein nicht-administrativer Nutzer der Standardgruppe einen Anhangstyp ohne Filter anlegen und Dateien an Bauteile hängen kann, führt jeder angemeldete Standard-Nutzer durch Hochladen und Abrufen einer .phar-Datei beliebigen serverseitigen Code aus. turingpoint hat den Ablauf verifiziert und verantwortungsvoll gemeldet; der Hersteller hat ihn in 2.12.1 behoben.
Ursache
Der Upload-Handler für Bauteil-Anhänge übernimmt die vom Client gelieferte Dateiendung und legt die Datei im web-ausgelieferten Medienverzeichnis ab. AttachmentSubmitHandler::renameBlacklistedExtensions() schreibt gefährliche Endungen (php, phtml, sh, cgi, py, js, html, htaccess und weitere) auf .txt um, führt phar jedoch nicht in der Liste, sodass eine .phar-Datei ihre Endung behält. Öffentliche Anhänge (die Voreinstellung) werden nach public/media/ geschrieben, das den Apache-Dokumentenstamm bildet, und die mitgelieferte Apache-Konfiguration routet .phar an PHP-FPM, sodass die Datei beim Abruf als PHP ausgeführt wird. Der pro Anhangstyp konfigurierbare Endungsfilter ist standardmäßig leer und blockiert diesen Pfad nicht, und ein nicht-administrativer Nutzer der Standardgruppe darf einen Anhangstyp ohne Filter anlegen sowie Dateien an Bauteile hängen. Damit lädt jeder angemeldete Standard-Nutzer eine .phar-Datei hoch, ruft sie unter /media/ ab und erreicht serverseitige Code-Ausführung.
Proof of Concept
Als beliebiger Nutzer der Standardgruppe users:
# 1. Anhangstyp ohne Endungsfilter anlegen
# 2. shell.phar (PHP-Payload) als oeffentlichen Anhang an ein Bauteil haengen:
POST /<...>/attachment (multipart/form-data, file=shell.phar)
# 3. Datei unter dem Web-Root abrufen -> Apache leitet .phar an PHP-FPM:
GET /media/<pfad>/shell.phar
renameBlacklistedExtensions() benennt php/phtml/sh/... auf .txt um, lässt phar aber unverändert; öffentliche Anhänge liegen in public/media/ (Apache-Dokumentenstamm), und die mitgelieferte Apache-Konfiguration ordnet .phar PHP-FPM zu, sodass die Datei beim Abruf als PHP ausgeführt wird.
Auswirkung
- Beliebige serverseitige PHP-Code-Ausführung durch jeden angemeldeten Nutzer der Standardgruppe.
- Vollständige Kompromittierung der Part-DB-Instanz und ihrer Daten (Inventar, Zugangsdaten, Konfiguration).
- Möglicher Brückenkopf in das umgebende System bzw. Netzwerk über den ausgeführten Code.
Referenzen
Steckt so etwas in Ihrer Software?
Diese Schwachstelle hat unser Team im Rahmen seiner Arbeit gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.
