CVE-2026-90246
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
apparmor: napraw przepełnienie liczb całkowitych w sprawdzaniu granic funkcji Verify_tags().
zweryfikować_tags() sprawdza tabelę zestawu tagów rozpakowaną z obiektu BLOB zasad.
Dla każdego zestawu odczytuje liczbę i sprawdza, czy przesuwając indeks o
ta liczba pozostaje wewnątrz sets.table[]:
u32 cnt = tagi->zestawy.tabela[i];
if (i+cnt >= tagi->zestawy.rozmiar) {
i, cnt i sets.size to u32, więc i+cnt jest obliczane modulo 2^32.
sets.table[] jest wypełniane przez unpack_tagsets() z aa_unpack_u32(), więc
każdy wpis to surowe, nieograniczone 32-bitowe słowo pobrane z obiektu blob polityki,
a Verify_tags() to funkcja, która ma to sprawdzić. A
liczba bliska U32_MAX powoduje zawijanie sumy do małej wartości, strażnika
przechodzi, a wewnętrzna pętla następnie przechodzi sets.table[++i] poza koniec
alokacja kcalloc(size, sizeof(u32)).
Zauważ, że sets.size jest ograniczone przez 65535, ponieważ unpack_tagsets() czyta
to za pomocą aa_unpack_array() jako u16, więc zawijanie nie może zostać osiągnięte
uprawa stołu; osiąga się go wyłącznie za pośrednictwem atakującego
liczyć.
Z sets.size = 2 i sets.table = { 0, 0xffffffff }:
i = 0: cnt = 0, strażnik 0 + 0 >= 2 jest fałszywy, pętla wewnętrzna nie działa
i = 1: cnt = 0xffffffff, strażnik (1 + 0xffffffff) mod 2^32 == 0 >= 2 to
false, więc strażnik zostanie pominięty i wewnętrzna pętla odczyta
sets.table[2] -- jeden element po alokacji dwóch elementów
Spacer trwa do momentu, gdy wartość wykraczająca poza zakres wyniesie >=
hdrs.size lub błędy dostępu, więc spreparowana polityka daje
odczyt poza granicami na ścieżce ładowania zasad
(aa_replace_profiles -> aa_unpack -> unpack_policydb -> unpack_tags ->
zweryfikować_tagi). unpack_tags() działa przed tabelami perm i DFA
rozpakowany, więc żaden inny stół nie musi być dobrze uformowany, aby do niego dotrzeć.
Ładowanie zasad jest bramkowane przez funkcję aa_may_manage_policy(), która sprawdza
CAP_MAC_ADMIN w odniesieniu do własnej przestrzeni nazw użytkownika podmiotu, a nie
przestrzeń nazw użytkownika init, więc z wartością domyślną
unprivileged_userns_apparmor_policy=1 ścieżka jest osiągalna z:
nieuprzywilejowanego zadania w zagnieżdżonej przestrzeni nazw na dopasowanym poziomie, nie tylko przez a
globalnie uprzywilejowany.
Wykonaj dodawanie w u64, aby nie mogło się zawijać, przywracając plik
zamierzone i + cnt < gwarancja rozmiaru zestawu.
>_ 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