CVE-2026-104795

Yüksek

Açıklama

insights-runtime-extractor, çalışma zamanı parmak izi alma amacıyla konteyner süreçlerini tarayan ayrıcalıklı bir DaemonSet (`hostPID: true`) olarak çalışır. Bir konteyneri tararken koordinatör şunları yapar: 1. Bir alt süreç için **fork()** işlemini gerçekleştirir. 2. Hedef konteynerin PID ve mount namespace alanlarına **setns()** ile girer. 3. Extractor'ın kendi kök dosya sistemini (burada `/crio.sock` hostPath olarak bağlanmıştır) işaret eden yetim bir FD'ye **fchdir()** ile geri döner. 4. **Yalnızca `seteuid(target_uid)` çağrısını yapar** — etkili UID'yi değiştirir ancak **gerçek UID ve kaydedilmiş-set-UID değerlerini 0'da bırakır** ve **izin verilen yetenek kümesini korur**. 5. `check_no_privileged_perms()` koruması yalnızca Etkili yetenek kümesini denetler (bu nedenle geçer) ve **hedef uid 0 olarak çalıştığında tamamen atlanır**. 6. `VersionExecutable` parmak izi, `/proc/<pid>/cmdline` üzerinden okunan ve **tamamen iş yükü tarafından kontrol edilen** hedefin argv[0] değeri olan `process.command_line[0]` ile `fpr_kind_executable` fonksiyonunu çağırır. 7. `fpr_kind_executable`, `exec.Command(executable, "--version").Output()` çağrısı yaparak, **ana bilgisayar kullanıcı namespace alanında ruid=0 iken**, iş yükünün mount namespace alanı içinde **iş yükünün kendi ikili dosyasını (binary)** çalıştırır. Çalıştırılan süreç, `CAP_SYS_ADMIN` ile tam root yetkisini geri kazanmak için `setuid(0)` çağırabilir ve ana bilgisayar CRI-O soketini içeren extractor konteynerinin dosya sistemine çözümlenen yetim cwd'yi devralır. ## Etkilenen Kod ### 1. Yetersiz ayrıcalık düşürme (Rust — extractor coordinator) **Dosya:** `extractor/src/insights_runtime_extractor.rs` ```rust // Satırlar 139-146 — yalnızca seteuid ile düşürme, root konteynerler için koruma atlanıyor 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 // Satırlar 182-185 — yalnızca etkili UID değiştirildi; ruid/suid 0 kalıyor fn switch_user(uid: u32) -> Result<(), ScannerError> { debug!("... Becoming user: {uid}"); seteuid(uid.into()).map_err(|e| ScannerError::Errno(e)) } ``` ### 2. Güvenilmeyen ikili dosyanın çalıştırılması (Go — fingerprint) **Dosya:** `fingerprints/pkg/utils/file.go` ```go // Satırlar 75-80 — iş yükünün argv[0] değerinden aynen alınan yolu çalıştırır 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ü tarafından kontrol edilen yolun iletilmesi (Rust — version_executable) **Dosya:** `version_executable.rs` ```rust // Satırlar 29-34 — iş yükü tarafından kontrol edilen command_line[0] parmak izine iletiliyor return Some(vec![ fpr_kind_executable, out_dir.to_string(), String::from(&process.command_line[0]), String::from(&version_executable.runtime_kind_name), ]); ``` ## Saldırı Deseni **Saldırgan:** Pod zamanlayabilen herhangi bir kiracı (ayrıcalıksız, herhangi bir namespace) **Kurban:** insights-runtime-extractor DaemonSet'ini çalıştıran düğüm (node) **Tetikleyici:** Otomatik — DaemonSet, düğümdeki tüm konteyner süreçlerini tarar **Saldırı dizisi:** 1. Saldırgan, süreç adı yapılandırılmış bir versiyonlu-ikili desene (`node`, `python`, `python3`, `MainThread` veya `java` içeriyor) uyan bir pod oluşturur. 2. Pod'un ana ikili dosyası (argv[0] ile eşleşen yoldaki), root yetkisini geri kazanmak için `setuid(0)` çağıran kötü amaçlı bir yürütülebilir dosyadır. 3. Insights operatörü bir taramayı tetiklediğinde, DaemonSet fork yapar, saldırganın mount namespace alanına girer ve saldırganın ikili dosyasını ruid=0 ile çalıştırır. 4. Saldırganın kodu, ana bilgisayar kullanıcı namespace alanında `CAP_SYS_ADMIN` ile tam root yetkisini yeniden kazanır. 5. Devralınan cwd, ana bilgisayar CRI-O soketini içerir $\rightarrow$ tam düğüm ele geçirme sağlanır.

ÖnemYüksek
CVSS8.8
İstismar olasılığı—
ÜrünOpenshift 4.19
Yayın14 Eki 2026
İlk görülme14 Eki 2026
Zayıflık türüCWE-250CWE-250

Nasıl düzeltilir

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
openshift 4.19Aralık belirtilmemiş—
openshift 4.20Aralık belirtilmemiş—
openshift 4.21Aralık belirtilmemiş—
openshift 4.22Aralık belirtilmemiş—
Red Hat Red Hat OpenShift Container Platform 5Aralık belirtilmemiş—

Sürümünüzü kontrol edin

Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.

Intelligence 360 paketinde

Attack Surface Management

Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.

CVE-2026-104795 · Openshift 4.19 · Dark Radar