CVE-2026-104795

Yüksək

Təsvir

insights-runtime-extractor, runtime barmaq izlərinin çıxarılması üçün konteyner proseslərini skan edən imtiyazlı bir DaemonSet (`hostPID: true`) kimi işləyir. Konteyneri skan edərkən koordinator aşağıdakıları yerinə yetirir: 1. Alt proses yaratmaq üçün **fork()** çağırır 2. Hədəf konteynerin PID və mount namespace-lərinə daxil olmaq üçün **setns()** istifadə edir 3. Extractor-un öz kök fayl sisteminə (burada `/crio.sock` hostPath vasitəsilə montaj edilib) yönəlmiş yetim FD-yə geri qayıtmaq üçün **fchdir()** çağırır 4. **Yalnız `seteuid(target_uid)`** funksiyasını çağırır — effektiv UID-ni dəyişir, lakin **real UID və yadda saxlanılan set-UID-ni 0 səviyyəsində saxlayır** və **icazə verilən capability dəstini qoruyub saxlayır** 5. `check_no_privileged_perms()` mühafizəçisi yalnız Effektiv capability dəstini yoxlayır (beləliklə, yoxlamadan keçir) və **hədəf uid 0 kimi işlədikdə bu mərhələ tamamilə ötürülür** 6. `VersionExecutable` barmaq izi, `/proc/<pid>/cmdline`-dan oxunan və **tamamilə iş yükü (workload) tərəfindən idarə edilən** hədəfin argv[0]-ı olan `process.command_line[0]` ilə `fpr_kind_executable` funksiyasını çağırır 7. `fpr_kind_executable` funksiyası `exec.Command(executable, "--version").Output()` çağırır — beləliklə, **host istifadəçi namespace-də ruid=0 olduğu halda**, iş yükünün mount namespace-i daxilində **iş yükünün öz binar faylını** icra edir İcra olunan proses `CAP_SYS_ADMIN` ilə tam root hüquqlarını bərpa etmək üçün `setuid(0)` çağıra bilər və host CRI-O soketini ehtiva edən extractor konteynerinin fayl sisteminə həll olunan yetim cwd-ni miras alır. ## Təsirə məruz qalan kod ### 1. Qeyri-kafi imtiyaz azaldılması (Rust — extractor koordinatoru) **Fayl:** `extractor/src/insights_runtime_extractor.rs` ```rust // Sətirlər 139-146 — yalnız seteuid ilə azaldma, root konteynerləri üçün mühafizə ötürülür join_process_namespaces(process.pid)?; change_dir(current_dir); switch_user(*process.uid)?; if *process.uid != 0 { perms::check_no_privileged_perms() .expect("Must not have privileged permissions to run fingerprints"); } fingerprint::run_fingerprints(&config, out_dir, &process); ``` ```rust // Sətirlər 182-185 — yalnız effektiv UID dəyişdirilir; ruid/suid 0 olaraq qalır fn switch_user(uid: u32) -> Result<(), ScannerError> { debug!("... Becoming user: {uid}"); seteuid(uid.into()).map_err(|e| ScannerError::Errno(e)) } ``` ### 2. Etibarsız binarın icrası (Go — fingerprint) **Fayl:** `fingerprints/pkg/utils/file.go` ```go // Sətirlər 75-80 — iş yükünün argv[0]-ından olduğu kimi götürülmüş yolu icra edir func GetExecutableVersionOutput(executable string) (string, error) { out, err := exec.Command(executable, "--version").Output() if err != nil { return "", err } return string(out), nil } ``` ### 3. İş yükü tərəfindən idarə olunan yolun ötürülməsi (Rust — version_executable) **Fayl:** `version_executable.rs` ```rust // Sətirlər 29-34 — iş yükü tərəfindən idarə olunan command_line[0] fingerprint-ə ötürülür return Some(vec![ fpr_kind_executable, out_dir.to_string(), String::from(&process.command_line[0]), String::from(&version_executable.runtime_kind_name), ]); ``` ## Hücum nümunəsi **Hücumçu:** Pod təyin edə bilən hər hansı bir kirayəçi (imtiyazsız, istənilən namespace) **Qurban:** insights-runtime-extractor DaemonSet-nin işlədiyi nod **Tətikləyici:** Avtomatik — DaemonSet noddakı bütün konteyner proseslərini skan edir **Hücum ardıcıllığı:** 1. Hücumçu, proses adı konfiqurasiya edilmiş versiyalı-icraedici şablonuna (`node`, `python`, `python3`, `MainThread` və ya `java` ehtiva edən) uyğun gələn bir pod yaradır 2. Pod-un əsas binari (argv[0]-a uyğun gələn yolda) root hüquqlarını bərpa etmək üçün `setuid(0)` çağıran zərərli bir icraedicidir 3. Insights operatoru skanı tətiklədikdə, DaemonSet fork edir, hücumçunun mount namespace-inə daxil olur və hücumçunun binarını ruid=0 ilə icra edir 4. Hücumçunun kodu host istifadəçi namespace-də `CAP_SYS_ADMIN` ilə tam root hüquqlarını yenidən əldə edir 5. Miras alınan cwd host CRI-O soketini ehtiva edir $\rightarrow$ nodun tam kompromisə uğraması

CiddilikYüksək
CVSS8.8
İstismar ehtimalı—
MəhsulOpenshift 4.19
Dərc14 okt 2026
İlk görülmə14 okt 2026
Zəiflik növüCWE-250CWE-250

Necə düzəltmək olar

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
openshift 4.19Aralıq göstərilməyib—
openshift 4.20Aralıq göstərilməyib—
openshift 4.21Aralıq göstərilməyib—
openshift 4.22Aralıq göstərilməyib—
Red Hat Red Hat OpenShift Container Platform 5Aralıq göstərilməyib—

Versiyanızı yoxlayın

Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.

Intelligence 360 paketində

Attack Surface Management

Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.

CVE-2026-104795 · Openshift 4.19 · Dark Radar