CVE-2026-82976 in OpenShift Container Platform
Zusammenfassung
von VulDB • 03.11.2026
Es wurde ein Fehler im image-customization-controller gefunden, der in OpenShifts Bare-Metal-Bereitstellungs-Stack (Provisioning Stack) verwendet wird. Der Controller registriert einen HTTP-Dateiserver am Port 8084 ohne Authentifizierung. Die benutzerdefinierte ImageFileSystem-Implementierung bietet eine durchsuchbare HTML-Verzeichnisauflistung aller registrierten Images im Root-Pfad. Die einzige Zugriffskontrolle für host-spezifische Images ist der zufällige UUID-Dateiname; die Verzeichnisauflistung offenbart diese UUIDs jedem Aufrufer im Bereitstellungsnetzwerk. Jedes bereitgestellte Image enthält eine Ignition-Konfiguration, die das base64-codierte Cluster-Pull-Secret, optionalen IRONIC_RAMDISK_SSH_KEY, Proxy-Einstellungen und host-spezifische NetworkManager-Keyfiles beinhaltet. Ein Angreifer mit benachbartem Netzwerkzugang kann alle Image-UUIDs über die Verzeichnisauflistung auflisten, jedes beliebige Image herunterladen, die eingebettete Ignition-Konfiguration extrahieren und das Cluster-Pull-Secret sowie den SSH-Schlüssel wiederherstellen.
### Nachweis **pkg/imagehandler/imagefilesystem.go — Root-Verzeichnis ist durchsuchbar und listet alle UUID-Image-Namen auf** ```go func (f *imageFileSystem) Readdir(n int) ([]fs.FileInfo, error) {
f.mu.Lock() defer f.mu.Unlock() result := []fs.FileInfo{}
for _, im := range f.images {
result = append(result, im) } return result, nil }
func (f *imageFileSystem) Open(name string) (http.File, error) {
f.log.Info("Open", "path", name) if name == "/" {
return f, nil } ... ```
**cmd/controller/main.go — Dateiserver gebunden an alle Schnittstellen ohne Auth oder TLS** ```go http.Handle("/", http.FileServer(imageServer.FileSystem()))
go func() {
server := &http.Server{
Addr: imagesBindAddr, // Standard ":8084" ReadHeaderTimeout: 5 * time.Second, } err := server.ListenAndServe() ```
**pkg/ignition/service_config.go:94-100 — Pull-Secret ist in jedem bereitgestellten Image eingebettet** ```go func (b *ignitionBuilder) authFile() ignition_config_types_32.File {
source := "data:;base64," + strings.TrimSpace(b.ironicAgentPullSecret) return ignition_config_types_32.File{
Node: ignition_config_types_32.Node{Path: "/etc/authfile.json"},
... ```
### Angriffsmuster Benachbarter Bereitstellungsnetzwerk-Client → GET / listet UUID-Image-Namen auf → Download von ISO/initramfs → Extrahieren der eingebetteten Ignition-Konfiguration → Wiederherstellen des Cluster-Pull-Secrets und SSH-Schlüssels.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.