Odebrany

CVE-2026-90179

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ę:

apparmor: napraw zakleszczenie w trybie narzekania Change_hat

Użycie zmiany_hat w trybie narzekania może spowodować zakleszczenie
gdy kapelusz nie istnieje i tworzony jest nowy profil uczenia się
dla brakującego profilu. Dzieje się tak, ponieważ funkcja Change_hat() została wykonana
zamek, aby przeszukać listę kapeluszy i stworzyć nową naukę
profil musi przyjąć blokadę, aby dodać go do listy.

Z raportu o błędzie:

Pierwotnie znaleziony w wersji 7.0.0 w LTS Ubuntu 26.04 z pam_apparmor + su
w trybie narzekania ustawionym na zmianę kapeluszy. Następnie zweryfikowano w najnowszym
dostępne jądro waniliowe, które skompilowałem, aby sprawdzić, czy nadal jest obecne:

7.2-rc7 wanilia -> dotknięte

sprawdziłem także inne jądra:
6.18.44 waniliowy -> dotknięty
6.12.95 z łatkami Debiana -> bez zmian

W systemach bez błędów (na przykład debian 6.12.95) po prostu wypisuje:

aa_change_hat rc=0

W systemach z błędem plik wykonywalny zawsze się zawiesza, nic nie drukuje i
staje się nie do zabicia. (A kiedy utkniesz w ten sposób, spowoduje to dowolny
dalsze zmiany kapelusza, które również powodują utknięcie procesu zmiany)

Następnie w syslogu możesz znaleźć wskazówkę dotyczącą przyczyny:

jądro: INFO: zadanie hat:3409 zablokowane na dłużej niż 483 sekundy.
jądro: Nieskażone 7.2.0-rc7 #1
jądro: „echo 0 > /proc/sys/kernel/hung_task_timeout_secs” wyłącza ten komunikat.
jądro: zadanie:hat stan:D stos:0 pid:3409 tgid:3409 ppid:2605 task_flags:0x400000 flags:0x00080800
jądro: Wywołaj śledzenie:
jądro: <ZADANIE>
jądro: __schedule+0x48f/0xfe0
jądro: harmonogram+0x27/0xa0
jądro: harmonogram_preempt_disabled+0x15/0x30
jądro: __mutex_lock.constprop.0+0x569/0xa10
jądro: aa_new_learning_profile+0x15f/0x210
jądro: build_change_hat+0x19f/0x3b0
jądro: zmiana_hat.isra.0+0x5dd/0xd60
jądro: aa_change_hat+0x2f3/0x710
jądro: aa_setprocattr_changehat+0x121/0x1f0
jądro: do_setattr+0x28c/0x340
jądro: apparmor_setselfattr+0x20/0x50
jądro: security_setselfattr+0xf6/0x110
jądro: __x64_sys_lsm_set_self_attr+0x53/0x90
jądro: do_syscall_64+0xdd/0x5e0
jądro: ? __mod_memcg_lruvec_state+0xfd/0x260
jądro: ? lruvec_stat_mod_folio+0x8d/0xd0
jądro: ? __folio_mod_stat+0x2d/0x90
jądro: ? map_anon_folio_pte_nopf+0xd1/0x1f0
jądro: ? do_anonymous_page+0x184/0xa10
jądro: ? __handle_mm_fault+0x805/0x870
jądro: ? liczba_memcg_events+0xef/0x230
jądro: ? handle_mm_fault+0x1f0/0x2f0
jądro: ? do_user_addr_fault+0x2bb/0x7b0
jądro: ? do_syscall_64+0x94/0x5e0
jądro: ? exc_page_fault+0x75/0x160
jądro: wpis_SYSCALL_64_after_hwframe+0x76/0x7e
Jądro: RIP: 0033:0x7f815e134c8d
Jądro: RSP: 002b:00007fff6df94ea8 EFLAGS: 00000246 ORIG_RAX: 00000000000001cc
Jądro: RAX: ffffffffffffffda RBX: 0000556d8c81d040 RCX: 00007f815e134c8d
Jądro: RDX: 0000000000000046 RSI: 0000556d8c81d040 RDI: 0000000000000064
Jądro: RBP: 00007fff6df94ef0 R08: 00007f815e212ac8 R09: 000000000000000c
Jądro: R10: 0000000000000000 R11: 0000000000000246 R12: 0000556d8c81d010
Jądro: R13: 0000000000000026 R14: 0000000000000046 R15: 0000000000000064
jądro: </TASK>
jądro: INFO: zadanie hat:3409 jest zablokowane na muteksie prawdopodobnie należącym do zadania hat:3409.

Aby rozwiązać problem, wyjmij blokadę z rdzenia
aa_new_learning_profile(), wprowadź funkcję opakowującą, która przyjmuje
zablokuj tam, gdzie jest to potrzebne i pozwól, aby build_change_hat() wywołała funkcję podstawową
który nie wymaga już zamka.

Dodatkowo napraw 4 inne problemy wprowadzone przez zatwierdzenie
32e92764d6f8d („apparmor: chwyć blokadę ns i odśwież podczas przeglądania profili podrzędnych Changehat”)
- aa_get_profile_rcu() została zastąpiona przez: aa_get_profile bez
towarzyszący rcu_dereference_protected()
- na początku wprowadzono dodatkową aa_get_label(label).
change_hat() bez towarzyszącej aa_put_label() powodującej
wyciek liczby referencji.
- wprowadzono wyciek liczby referencji w label_is_stale(label)
przypadku, w którym wyciekłby najnowszy profil zamiast
etykieta przekazana do funkcji.
- potencjalny UAF, gdy wyszukiwanie wchodzi w górę drzewa z new_ns != ns
nowa etykieta
---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