OpenVAS Scanner: Container-Image-Referenz bricht aus dem Arbeitsverzeichnis aus

Der Scanner baut aus Registry, Image und Tag einen Pfad, ohne .. zu verwerfen, und legt dort als root Verzeichnisse an, schreibt und loescht rekursiv.

Advisory-ID: TP-2026-106
Produkt: OpenVAS Scanner (Schwachstellenscanner, Teil der Greenbone Community Edition, Rust und C)
Schwachstellentyp: Pfaddurchquerung (CWE-22)
CVE: nicht zugewiesen, das Hersteller-Advisory fuehrt den Platzhalter CVE-2026-0000
CVSS 3.1: 9.0 (Kritisch) · CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:H
Betroffene Versionen: openvas-scanner <= 23.45.11, Greenbone OS <= 25.0.4
Hersteller-Advisory: GBSA2026-01
Behoben in: openvas-scanner 23.45.12 und Greenbone OS 25.0.5, beide vom 26. Juni 2026
Gemeldet: 13. Juni 2026

Zusammenfassung

Der Container-Image-Scanner nimmt eine Image-Referenz der Form oci://registry/image:tag entgegen und baut daraus das Verzeichnis, in das er die Schichten des Abbilds auspackt. Die drei Bestandteile wandern unveraendert in den Pfad, .. wird nirgends verworfen. Ein unangemeldeter Aufruf legt damit als root ein Verzeichnis an jeder beliebigen Stelle des Dateisystems an, und zwar bevor ueberhaupt eine Registry kontaktiert wird. Betreibt der Aufrufer zusaetzlich eine eigene Registry, schreibt der Scanner Dateien mit frei gewaehltem Inhalt und Ausfuehrungsrecht dorthin und loescht beim Aufraeumen einen beliebigen vorhandenen Verzeichnisbaum rekursiv. Die Anmeldung ist ab Werk abgeschaltet, der Dienst laeuft als root, und die betroffenen Datentraeger teilt er sich mit den uebrigen Containern des Stapels.

Ursache

Image::from_str zerlegt die Referenz und filtert allein leere Segmente heraus, weshalb .. in Registry, Image und Tag erhalten bleibt (rust/src/openvasd/container_image_scanner/image/mod.rs:171-209). Extractor::initialize haengt diese drei Bestandteile unveraendert an das Arbeitsverzeichnis und ruft create_dir_all auf, und zwar vor dem Abruf des Abbilds (image/extractor/filtered_image.rs:51-72, aufgerufen aus scanner.rs:221). PathBuf::join behaelt .. woertlich, aufgeloest wird es erst vom Betriebssystem beim Anlegen. Beim Auspacken schreibt entry.unpack_in(target_dir) den Inhalt der Schicht in dieses bereits entwichene Verzeichnis, wobei die Beschraenkung der tar-Bibliothek wirkungslos ist, weil sie sich auf das vom Angreifer gewaehlte Wurzelverzeichnis bezieht (:243-263). FileSystemLocator::drop raeumt anschliessend mit remove_dir_all(&self.base) auf, wobei base den entwichenen Pfad und zusaetzlich die Architekturangabe aus dem Manifest des Angreifers enthaelt (:149-162).

Proof of Concept

# Unangemeldet, Standardkonfiguration, Dienst laeuft als root:
POST /container-image-scanner/scans
{"scan_id":"poc","target":{"hosts":["oci://../../../../../../../../CVEFARM_PWNED/img:tag"]},
 "scan_preferences":[{"id":"registry_allow_insecure","value":"true"}]}   -> 201

POST /container-image-scanner/scans/poc   {"action":"start"}              -> 204

# Der Scan scheitert mangels Registry, aber create_dir_all ist schon gelaufen:
ls -la /CVEFARM_PWNED      -> /CVEFARM_PWNED/img/tag   drwxr-xr-x root root
ls /tmp/openvasd           -> fehlt, das vorgesehene Arbeitsverzeichnis
                              wurde nie angelegt, alles ist entwichen.

Das Anlegen des Verzeichnisses ist bedingungslos und braucht keine erreichbare Registry. Fuer das Schreiben und das rekursive Loeschen betreibt der Angreifer eine eigene Registry und setzt accept_invalid_certs ueber die Scan-Einstellungen seiner eigenen Anfrage; wir haben beides live nachgewiesen, einschliesslich der vollstaendigen Loeschung eines vorab angelegten Verzeichnisbaums und einer Datei, die eine fehlerhafte zweite tar-Eintragung dauerhaft ueberleben laesst.

Abweichung zur Bewertung des Herstellers

Das Hersteller-Advisory bewertet mit 7.4 und dem Vektor AV:L/AC:H/PR:N/UI:R/S:C/C:N/I:H/A:H. Wir uebernehmen AV:L, weil die mitgelieferte Compose-Datei den Dienst nur auf die lokale Adresse weiterreicht, widersprechen aber zwei Metriken: der Ablauf gelang in jedem Versuch beim ersten Mal und ohne Wettlauf, was AC:L entspricht, und er braucht keinerlei Zutun eines Nutzers, da der Angreifer den Scan selbst anlegt und startet, was UI:N entspricht. Daraus ergeben sich 9.0.

Auswirkung

  • Rekursives Loeschen beliebiger Verzeichnisbaeume als root, bis hin zum vollstaendigen Leeren des Dateisystems im Container.
  • Dauerhaftes Schreiben von Dateien mit frei gewaehltem Inhalt und gesetztem Ausfuehrungsrecht als root, wobei der Dateiname auf sechs Namen der Paketdatenbank begrenzt bleibt.
  • Zerstoerung des gesamten Scan-Stapels ueber die geteilten Datentraeger, etwa der Feed-Verzeichnisse und des Schluesselbunds, und zwar neustartfest.
  • Kein Lesen fremder Dateien: die Auswertung gibt nur strukturierte Felder zurueck, was wir eigens geprueft und ausgeschlossen haben.

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.