Wysoki Oczekuje na analizę

CVE-2026-82976

opublikowano:
modyfikacja:
Ocena CVSS
7.1
Wysoki · v3.1
wektor: CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

Znaleziono usterkę w kontrolerze dostosowywania obrazu używanym w stosie udostępniania bare metal w OpenShift. Kontroler rejestruje serwer plików HTTP na porcie 8084 bez uwierzytelnienia. Niestandardowa implementacja imageFileSystem udostępnia przeglądalną listę katalogów HTML wszystkich zarejestrowanych obrazów w ścieżce głównej. Jedyną kontrolą dostępu do obrazów poszczególnych hostów jest losowa nazwa pliku UUID; lista katalogów ujawnia te identyfikatory UUID każdemu dzwoniącemu w sieci udostępniającej. Każdy udostępniany obraz zawiera konfigurację Ignition zawierającą sekret ściągania klastra zakodowany w formacie base64, opcjonalny IRONIC_RAMDISK_SSH_KEY, ustawienia proxy i pliki kluczy NetworkManager dla poszczególnych hostów. Osoba atakująca sąsiadującą sieć może wyliczyć identyfikatory UUID wszystkich obrazów poprzez listę katalogów, pobrać dowolny obraz, wyodrębnić osadzoną konfigurację Ignition oraz odzyskać sekret ściągania klastra i klucz SSH.

### Dowód
**pkg/imagehandler/imagefilesystem.go — katalog główny można przeglądać i wylicza wszystkie nazwy obrazów UUID**
idź
func (f *imageFileSystem) Readdir(n int) ([]fs.FileInfo, błąd) {
f.mu.Lock()
odrocz f.mu.Unlock()
wynik := []fs.FileInfo{}
for _, im := zakres f.images {
wynik = dołącz (wynik, im)
}
zwróć wynik, zero
}

func (f *imageFileSystem) Open(łańcuch nazwy) (http.Plik, błąd) {
f.log.Info("Otwórz", "ścieżka", nazwa)
jeśli nazwa == "/" {
zwróć f, zero
}
...
```

**cmd/controller/main.go — serwer plików powiązany ze wszystkimi interfejsami bez autoryzacji i TLS**
idź
http.Handle("/", http.FileServer(imageServer.FileSystem()))

przejdź do funkcji() {
serwer := &http.Serwer{
Adres: obrazyBindAddr, // domyślny „:8084”
ReadHeaderTimeout: 5 * czas. Drugi,
}
błąd := serwer.ListenAndServe()
```

**pkg/ignition/service_config.go:94-100 — sekret ściągania jest osadzony w każdym udostępnianym obrazie**
idź
func (b *ignitionBuilder) authFile() zapłon_config_types_32.File {
źródło := "data:;base64" + strings.TrimSpace(b.ironicAgentPullSecret)
zwróć zapłon_config_types_32.File{
Węzeł: zapłon_config_types_32.Node{Ścieżka: "/etc/authfile.json"},
...
```

### Wzór ataku
Sąsiedni klient sieci administracyjnej → GET / wyświetla nazwy obrazów UUID → pobierz ISO/initramfs → wyodrębnij osadzony Ignition → odzyskaj sekret ściągania klastra i klucz SSH.

>_ Słabości (CWE)

>_ Referencje

Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.

This product uses the NVD API but is not endorsed or certified by the NVD.

Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.

CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.

NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org