CVE-2026-82976 in OpenShift Container Platform
Sumário
de VulDB • 03/11/2026
Foi encontrada uma falha no controlador de personalização de imagem (image-customization-controller) utilizado na pilha de provisionamento de metal bruto do OpenShift. O controlador registra um servidor HTTP para arquivos na porta 8084 sem autenticação. A implementação personalizada do imageFileSystem expõe uma listagem navegável em HTML dos diretórios contendo todas as imagens registradas no caminho raiz. O único controle de acesso sobre as imagens por host é o nome do arquivo UUID aleatório; a listagem do diretório divulga esses UUIDs para qualquer solicitante na rede de provisionamento. Cada imagem servida incorpora uma configuração Ignition que contém o segredo de pull da cluster codificado em base64, a chave SSH opcional IRONIC_RAMDISK_SSH_KEY, configurações de proxy e arquivos-chave do NetworkManager por host. Um atacante com acesso adjacente à rede pode enumerar todos os UUIDs das imagens por meio da listagem de diretórios, baixar qualquer imagem, extrair a configuração Ignition embutida e recuperar o segredo de pull do cluster e a chave SSH.
### Evidência **pkg/imagehandler/imagefilesystem.go — o diretório raiz é navegável e enumera todos os nomes UUID das imagens** ```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 — servidor de arquivos vinculado a todas as interfaces sem autenticação ou TLS** ```go http.Handle("/", http.FileServer(imageServer.FileSystem()))
go func() {
server := &http.Server{
Addr: imagesBindAddr, // padrão ":8084" ReadHeaderTimeout: 5 * time.Second, } err := server.ListenAndServe() ```
**pkg/ignition/service_config.go:94-100 — o segredo de pull está embutido em cada imagem servida** ```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"},
... ```
### Padrão de Ataque Cliente adjacente na rede de provisionamento → GET / lista os nomes UUID das imagens → download do ISO/initramfs → extrai a Ignition embutida → recupera o segredo de pull do cluster e a chave SSH.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.