cve.bz

CVE-2026-82976

7.1 highEPSS 0.2%

High (7.1). EPSS 0.2% estimated probability of exploitation activity in the next 30 days.

On this page
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.

Severity

CVSS 3.1

7.1 high
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N
EPSS
0.2% estimated probability of exploitation activity in the next 30 days; 14th percentile. Scored 2026-11-04. A forecast for this CVE across the internet, not for your own systems.
CWE
CWE-548 Exposure of Information Through Directory Listing
OWASP Top 10
A01:2025 Broken Access Control
Published
Modified
Record from
the NVD, synced

Ask an AI about this CVE

Show the promptExplain CVE-2026-82976 for an engineer deciding whether to act. Use https://cve.bz/api/public/cves/CVE-2026-82976?via=ask-ai-copy and https://cve.bz/cve/CVE-2026-82976?via=ask-ai-copy as the source of truth: what is affected and which versions fix it, whether it is in CISA KEV, public exploits, and its EPSS (an internet-wide 30-day estimate of exploitation activity, not a forecast for my systems). If they give no fixed versions, use the CVE record https://cveawg.mitre.org/api/cve/CVE-2026-82976 or the vendor advisory, not third-party mirrors. Tell me how to check whether I am affected and how to verify a fix. Cite the sources and say where they are uncertain.

Opens a third-party assistant; its answer is its own, not cve.bz's. The prompt holds only this CVE's id and public links.

Red Hat

Red Hat rates this Important.

Red Hat's statement

The image-customization-controller is deployed in the openshift-machine-api namespace as part of OpenShift's bare metal IPI provisioning flow. The image server binds on all interfaces at port 8084 with no authentication or TLS. The directory listing is unconditional — any client on the provisioning network can browse and download all served images. The embedded Ignition configs contain the cluster pull secret (registry credentials), optional SSH keys for the IPA ramdisk, proxy settings, and per-host NetworkManager keyfiles. Red Hat rates this as Important because exploitation requires adjacent network access (provisioning network) with no authentication, and the scope of exposed secrets is high — the pull secret grants access to container registries outside the cluster boundary.

Red Hat's mitigation

There is no way to disable the directory listing or add authentication without a code change. As a workaround, administrators can apply network-level controls to restrict access to port 8084 on the image-customization-controller pod to only the BMC/provisioning network hosts that require it. Use NetworkPolicy or firewall rules to block access from workload pods. Additionally, rotate any pull secrets and SSH keys that may have been exposed if unauthorized access to the provisioning network is suspected.

ProductPackageStateAdvisory
Red Hat OpenShift Container Platform 4openshift4/ose-image-customization-controller-rhel8Affected
Red Hat OpenShift Container Platform 4openshift4/ose-image-customization-controller-rhel9Affected
Red Hat OpenShift Container Platform 5openshift5/ose-image-customization-controller-rhel9Affected

Contains Red Hat Security Data © Red Hat, Inc., licensed under CC BY 4.0. Source: https://access.redhat.com/security/data. Modified: reformatted. Red Hat's page for CVE-2026-82976.

References

Check your stackJSON