Odebrany

CVE-2026-99170

opublikowano:
modyfikacja:
Ocena CVSS
n/a
Brak oceny

>_ Opis

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

W jądrze Linuksa usunięto następującą lukę:

przestrzeń nazw: wierzchowiec pominięty przez funkcję copy_tree() nie może przejąć blokady

Od zatwierdzenia c62a4766937e („move_mount: transfer MNT_LOCKED”) zamontowano
można przesuwać pod zablokowanym uchwytem. Zamek wysuwa się ze starej pokrywy
do nowego wierzchowca, który przejmuje zadanie ukrywania tego, co jest pod nim i
starą osłonę można zdemontować. To działa tak długo, jak nowy uchwyt
zostaje. Ale wywołujący wybiera nowy wierzchowiec i funkcja copy_tree() pozostawia plik a
montuj plik przestrzeni nazw montowania z każdej kopii utworzonej bez
CL_COPY_MNT_NS_FILE, razem ze wszystkim, co jest na nim zamontowane, i nigdy
patrzy na MNT_LOCKED. unshare(CLONE_NEWNS) i wykonaj propagację montowania
takie kopie.

Zatem zadanie, które jest rootem we własnej przestrzeni nazw użytkownika, pozbywa się zablokowanego
cover na plik bez wyścigu i bez dotykania systemu plików
poniżej. Tworzy dziecko z własną przestrzenią nazw montowania, wiąże plik
dziecko /proc/<pid>/ns/mnt pod pokrywą z MOVE_MOUNT_BENEATH,
który przekazuje blokadę temu powiązaniu i wywołuje funkcję unshare(CLONE_NEWNS). The
nowa przestrzeń nazw montowania nie zawiera niczego w pliku. To zwykły sposób
zamaskuj pojedynczy plik, powiązanie /dev/null lub pusty plik. Z
powiązanie zwykłego pliku, plik pozostaje objęty.

copy_tree() już nie chce pominąć zablokowanego montowania, z którym nie da się powiązać
-EPERM od zatwierdzenia df7342b24018 („mount: Nie zezwalaj na kopiowanie
MNT_UNBINDABLE|MNT_LOCKED mocowania"). Zrób to samo dla zablokowanego mocowania a
zamontuj plik przestrzeni nazw. Dotyczy to również drzewa skopiowanego za pomocą
CL_COPY_MNT_NS_FILE i dołączony do przestrzeni nazw montowania innego użytkownika
przestrzeni nazw, w której lock_mnt_tree() ją blokuje. Pamiętaj, że nie udostępniaj (CLONE_NEWNS)
i clone(CLONE_NEWNS) nie powiodą się z EPERM z takiej przestrzeni nazw montowania z
potem dalej. Nie można pominąć mocowania i nie można go zdemontować.

I odmów przeniesienia wierzchowca pliku przestrzeni nazw montowania pod plik zablokowany
zamontować w pierwszej kolejności. W przeciwnym razie zadanie kończy się zamontowaniem go
nie można odmontować i funkcja unshare(), która kończy się niepowodzeniem.

Chris znalazł także drugiego wierzchowca, który sam odchodzi, klona
automatycznie zamontowany uchwyt, który funkcja Shrek_submounts() zabrała ze swoim rodzicem.
Zatwierdzono f78ddcc87224 („przestrzeń nazw: nigdy nie wygasa zablokowany wierzchowiec”)
zaopiekuj się tym.

W załączeniu reproduktor Chrisa. Tryb nsfile czyta SECRET po
unshare() w wersji 7.3-rc7, w przypadku tej poprawki funkcja move_mount() nie działa
EINVAL i plik pozostaje zakryty. nsfile-control używa zwykłego pliku
i czyta MASKA w obie strony.

// Identyfikator licencji SPDX: GPL-2.0
/*
* Pozbądź się zamkniętej osłony za pomocą MOVE_MOUNT_BENEATH.
*
* „Admin” (root) tworzy tmpfs W:
* Plik W/D, posiada TAJNOŚĆ, zakryty powiązaniem pliku z MASKĄ
* W/Dd/plik wewnętrzny, jest tajny, Dd jest objęty powiązaniem katalogu
* którego „wnętrze” kryje MASKĘ
* Własny katalog o identyfikatorze UID 1000 z plikiem „moje” i rozszerzeniem
* katalog „minedir”, którego „wewnętrzny” zawiera MINE
* W/dbg debugfs, tryb 755. dbg/tracing to punkt automatycznego montowania
* „Atakujący” ma identyfikator uid 1000. Wchodzi do nowej przestrzeni nazw użytkownika z nowym mocowaniem
* przestrzeni nazw, więc W i obie okładki są tam zablokowane.
*
* zastosowanie: prog MODE
* po prostu umieść wiązanie własne/moje pod pokrywą D, odmontuj pokrywę
* nsfile umieszcza powiązanie pliku przestrzeni nazw montowania dziecka pod plikiem
* okładka D, a następnie przestań udostępniać (CLONE_NEWNS)
* nsfile-control to samo z powiązaniem own/moje
* skurczyć się i umieścić automatycznie montowane ślady pod osłoną Dd,
* odmontuj pokrywę, umieść tmpfs pod W, wywołaj umount(W), co kończy się niepowodzeniem
* Kontrola zmniejszania jest taka sama z powiązaniem own/minedir
* Zmienna środowiskowa AUTOMOUNT_DIR nazywa kolejny punkt automatycznego montowania „zmniejszaniem”.
*/
#zdefiniuj _GNU_SOURCE
#include <errno.h>
#include <fcntl.h>
#include <grp.h>
#include <sched.h>
#include <sygnał.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

---obcięty---

>_ 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