LearnCTEM.com, Best CTEM Learning Platform
CVE Intelligence Hub

CVE-2026-82976: image-customization-controller used in OpenShift's bare metal provisioning stack Security Vulnerability

CVE-2026-82976 explained: high Security Vulnerability in image-customization-controller used in OpenShift's bare metal provisioning stack. CVSS 7.1. Affected version

Last updated: Nov 3, 2026

CVSS
7.1 HIGH
EPSS
n/a
CISA KEV
Not listed
CWE
CWE-548

Sources: National Vulnerability Database, CVE.org, CISA KEV, FIRST EPSS

CVE-2026-82976 Overview

A flaw was found in the image-customization-controller used in OpenShift's bare metal provisioning stack. The controller registers an HTTP file server on port 8084 with no authentication. The custom imageFileSystem implementation exposes a browsable HTML directory listing of all registered images at the root path. The only access control on per-host images is the random UUID filename; the directory listing discloses those UUIDs to any caller on the provisioning network. Each served image embeds an Ignition config containing the base64-encoded cluster pull secret, optional IRONIC_RAMDISK_SSH_KEY, proxy settings, and per-host NetworkManager keyfiles. An adjacent network attacker can enumerate all image UUIDs via directory listing, download any image, extract the embedded Ignition config, and recover the cluster pull secret and SSH key. ### Evidence **pkg/imagehandler/imagefilesystem.go — root directory is browsable and enumerates all UUID image names** ```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 — file server bound on all interfaces without auth or TLS** ```go http.Handle("/", http.FileServer(imageServer.FileSystem())) go func() { server := &http.Server{ Addr: imagesBindAddr, // default ":8084" ReadHeaderTimeout: 5 * time.Second, } err := server.ListenAndServe() ``` **pkg/ignition/service_config.go:94-100 — pull secret is embedded in every served image** ```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"}, ... ``` ### Attack Pattern Adjacent provisioning-network client → GET / lists UUID image names → download ISO/initramfs → extract embedded Ignition → recover cluster pull secret and SSH key.

Critical Impact

Local or adjacent, unauthenticated attackers can exploit this Security Vulnerability in image-customization-controller used in OpenShift's bare metal provisioning stack. The CVSS base score is 7.1 (High).

Affected Products

  • image-customization-controller used in OpenShift's bare metal provisioning stack: see the vendor advisory for the exact affected versions

Discovery Timeline

  • 2026-11-03: CVE-2026-82976 published to the National Vulnerability Database by secalert@redhat.com
  • 2026-11-03: last updated in the NVD database

Technical Details for CVE-2026-82976

Vulnerability Analysis

CVE-2026-82976 is a Security Vulnerability weakness (CWE-548) in image-customization-controller used in OpenShift's bare metal provisioning stack. Based on its CVSS vector, the flaw needs local or adjacent access, needs no login, and needs no user interaction.

With a CVSS base score of 7.1, apply the vendor fix and confirm exposure on internet facing and business critical assets first.

Root Cause

The vendor description states: A flaw was found in the image-customization-controller used in OpenShift's bare metal provisioning stack. The controller registers an HTTP file server on port 8084 with no authentication. The custom imageFileSystem implementation exposes a browsable HTML directory listing of all registered images at the root path. The only access control on per-host images is the random UUID filename; the directory listing discloses those UUIDs to any caller on the provisioning network. Each served image embeds an Ignition config containing the base64-encoded cluster pull secret, optional IRONIC_RAMDISK_SSH_KEY, proxy settings, and per-host NetworkManager keyfiles. An adjacent network attacker can enumerate all image UUIDs via directory listing, download any image, extract the embedded Ignition config, and recover the cluster pull secret and SSH key. ### Evidence **pkg/imagehandler/imagefilesystem.go — root directory is browsable and enumerates all UUID image names** ```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 — file server bound on all interfaces without auth or TLS** ```go http.Handle("/", http.FileServer(imageServer.FileSystem())) go func() { server := &http.Server{ Addr: imagesBindAddr, // default ":8084" ReadHeaderTimeout: 5 * time.Second, } err := server.ListenAndServe() ``` **pkg/ignition/service_config.go:94-100 — pull secret is embedded in every served image** ```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"}, ... ``` ### Attack Pattern Adjacent provisioning-network client → GET / lists UUID image names → download ISO/initramfs → extract embedded Ignition → recover cluster pull secret and SSH key.

Attack Vector

Based on the CVSS vector, the flaw needs local or adjacent access, needs no login, and needs no user interaction. Attack complexity is low complexity.

No exploitation in the wild is confirmed by CISA at the time of the last update. Check the references below for any vendor or researcher proof of concept.

CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N

Detection Methods for CVE-2026-82976

Detection Strategies

  • Inventory every instance of image-customization-controller used in OpenShift's bare metal provisioning stack and compare the running version with the affected range above.
  • Check external attack surface scans for internet facing instances of the component.
  • Run an authenticated vulnerability scan once your scanner ships a check for this CVE.

Monitoring Recommendations

  • Forward image-customization-controller used in OpenShift's bare metal provisioning stack application, access and audit logs to your SIEM for retrospective hunting.
  • Alert on new processes, configuration changes or outbound connections from the affected service.
  • Track the vendor advisory and the CISA KEV catalog for changes in exploitation status.

How to Mitigate CVE-2026-82976

Immediate Actions Required

  • Apply the fixed version of image-customization-controller used in OpenShift's bare metal provisioning stack named in the vendor advisory.
  • Prioritize internet facing and business critical instances first.
  • Rescan after the change to confirm the exposure is closed.

Patch Information

Use the fixed version listed in the vendor advisory for image-customization-controller used in OpenShift's bare metal provisioning stack.

Workarounds

  • If patching must wait, restrict network access to the affected service and place it behind authentication or a web application firewall rule.

CWE References

Technical References

This entry is built directly from NVD, CISA KEV and EPSS data. Verify fixed versions in the vendor advisory before you deploy.

Frequently asked questions

CVE-2026-82976 is a high severity Security Vulnerability in image-customization-controller used in OpenShift's bare metal provisioning stack with a CVSS score of 7.1. Apply the vendor fix and confirm exposure on internet facing and business critical assets first.
Your next credential

Earn your free CTEM certification.

Learn to scope, prioritize, validate and mobilize fixes for CVEs like CVE-2026-82976 with a free CTEM certification.

Free to takePublicly verifiable

Beginner / Practitioner / Program Leader

Explore certifications