CVE-2026-98163
Beschreibung
Im Linux-Kernel wurde die folgende Sicherheitsanfälligkeit behoben: cgroup: Vermeiden Sie die Iteration von Sterbeaufgaben mit null refcount Der Commit 260fbcb92bbea ("cgroup: Move dying tasks cleanup from cgroup task release() to cgroup task free()") verlängerte die Lebensdauer von Aufgaben auf der Liste der Sterbeaufgaben. Die Iteratoren haben die Möglichkeit, aufgrund sterbender Threadgroup-Führer oder expliziter CSS TASK ITER WITH DEAD durch dying tasks zu gehen, es wurde jedoch erwartet, dass solche Tasks eine neue Referenz erhalten können (was vor cgroup task release()/put task struct rcu user() möglich ist). Die Aufgaben nach cgroup task release() und vor cgroup task free() unterliegen dem Rennen, wenn sie möglicherweise -> Nutzungszahl > Das Rennfenster befindet sich zwischen css task iter next()-Aufrufen, wenn css set lock freigegeben wird und wir möglicherweise zu einem neuen ->task pos gelangen. Der Iterator sollte nicht versuchen, Aufgaben wiederzubeleben, deren -> Nutzungszahl auf Null gesunken ist. (Wenn das passiert, ist put task struct rcu cb() bereits unmittelbar bevorstehend und die zurückgegebene task struct könnte nach kostenlos verwendet werden.) Was den Fix betrifft, können wir nicht einfach die Signal-> Live-Zählung einer Aufgabe auf der Sterbeliste überprüfen, da dies keine regulären Zombies unterscheidet, die darauf warten, von RCU-Restaufgaben geerntet zu werden, die frei sein werden. Fügen Sie daher einen zusätzlichen Check hinzu, um ->usage==0-Tasks aus jeder Iteration auszuschließen. Die Repeat:-Schleife in css task iter advance() berücksichtigt nicht die Anzahl ->usage, also fügen Sie eine neue Schleife zu css task iter next() hinzu, um de-used Tasks auf der dying list zu überspringen. Grobe Darstellung der möglichen Rasse R (Leser von cgroup.procs) T (Thread) L (Gruppenleiter) --------------------------------------- ----------------------------------- ----------------------------------- L exits, signal->live > 0 cgroup task dead(L) css set task user() // skips only cset->taskslist add tail(&L->cg list, &cset->dying tasks) css task iter next() take css set lock css task advance() leader && signal->live != 0 => it->task pos = &L->cg list release css set lock T exits --signal->live == 0 cgroup set lock release task(T) // cap leader cgroup task release(T) release task release(L) put task struct rcu user(L) ...RCU... put task struct(L) L still on dying tasks */...RCU... put task iter next() css task
Quellen & weiterführende Informationen
Hier werden ausschließlich tatsächlich zu dieser Schwachstelle gespeicherte Quellenbelege angezeigt.
Was ist zur Behebung zu tun?
Herstellerhinweise prüfen und das betroffene Produkt kurzfristig patchen oder kompensierende Schutzmaßnahmen aktivieren.
Empfohlene Schritte
- Betroffene Systeme identifizieren: linux linux kernel.
- Exposition prüfen: Internet-Erreichbarkeit, Admin-Oberflächen, VPN, Mail- oder Webdienste.
- Hersteller-Advisory öffnen und verfügbare Updates, Workarounds oder Deaktivierungen prüfen.
- Nacharbeiten dokumentieren: betroffene Assets, Maßnahme, Zeitpunkt, Restrestrisiko.
Übergangsmaßnahmen
- Zugriff auf betroffene Dienste auf vertrauenswürdige Netze einschränken.
- WAF/IDS/EDR-Regeln und Hersteller-IOCs aktivieren, sofern verfügbar.
- Nicht benötigte Funktionen, Plugins oder Dienste temporär deaktivieren.