CVE-2024-50301 in Linuxinformazioni

Riassunto

di VulDB • 19/06/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

security/keys: correzione di un accesso out-of-bounds su slab in key_task_permission

KASAN segnala una lettura out-of-bounds: BUG: KASAN: slab-out-of-bounds in __kuid_val include/linux/uidgid.h:36 BUG: KASAN: slab-out-of-bounds in uid_eq include/linux/uidgid.h:63 [inline]
BUG: KASAN: slab-out-of-bounds in key_task_permission+0x394/0x410 security/keys/permission.c:54 Lettura di dimensione 4 all'indirizzo ffff88813c3ab618 da parte del task stress-ng/4362

CPU: 2 PID: 4362 Comm: stress-ng Not tainted 5.10.0-14930-gafbffd6c3ede #15 Call Trace: __dump_stack lib/dump_stack.c:82 [inline]
dump_stack+0x107/0x167 lib/dump_stack.c:123 print_address_description.constprop.0+0x19/0x170 mm/kasan/report.c:400 __kasan_report.cold+0x6c/0x84 mm/kasan/report.c:560 kasan_report+0x3a/0x50 mm/kasan/report.c:585 __kuid_val include/linux/uidgid.h:36 [inline]
uid_eq include/linux/uidgid.h:63 [inline]
key_task_permission+0x394/0x410 security/keys/permission.c:54 search_nested_keyrings+0x90e/0xe90 security/keys/keyring.c:793

Questo problema è stato segnalato anche da syzbot.

Può essere riprodotto seguendo questi passaggi (maggiori dettagli [1]):
1. Ottenere più di 32 input con hash simili, che terminano con il pattern '0xxxxxxxe6'. 2. Riavviare e aggiungere le chiavi ottenute al passaggio 1.

Il programma di riproduzione dimostra come si verifica questo problema: 1. Nella funzione search_nested_keyrings, quando si itera attraverso gli slot in un nodo (sotto tag ascend_to_node), se il puntatore allo slot è meta e node->back_pointer != NULL (il che indica una radice), si procede a descend_to_node. Tuttavia, esiste un'eccezione. Se il nodo è la radice, e uno degli slot punta a una scorciatoia (shortcut), questa verrà trattata come un keyring. 2. Se il puntatore ptr è un keyring è deciso dalla funzione keyring_ptr_is_keyring. Tuttavia, KEYRING_PTR_SUBTYPE è 0x2UL, lo stesso valore di ASSOC_ARRAY_PTR_SUBTYPE_MASK. 3. Quando vengono aggiunte 32 chiavi con hash simili all'albero, la ROOT contiene chiavi con hash non simili (ad esempio slot 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31). 4. Infine, si forma l'albero come mostrato di seguito, dove lo slot 6 punta a una scorciatoia.

NODE A +------>+---+ ROOT | | 0 | xxe6 +---+ | +---+ xxxx | 0 | shortcut : : xxe6 +---+ | +---+ xxe6 : : | | | xxe6 +---+ | +---+ | 6 |---+ : : xxe6 +---+ +---+ xxe6 : : | f | xxe6 +---+ +---+ xxe6 | f | +---+

4. Come menzionato sopra, se uno slot (slot 6) della radice punta a una scorciatoia, può essere erroneamente trasferito a un key*, portando a una lettura out-of-bounds.

Per risolvere questo problema, si dovrebbe saltare a descend_to_node se il ptr è una scorciatoia, indipendentemente dal fatto che il nodo sia la radice o meno.

[1] https://lore.kernel.org/linux-kernel/[email protected]/

[jarkko: ha modificato leggermente il messaggio di commit per includere un tag
di chiusura appropriato.]

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsabile

Linux

Prenotare

21/10/2024

Divulgazione

19/11/2024

Moderazione

accettato

CPE

pronto

EPSS

0.00272

KEV

no

Attività

molto basso

Fonti

Do you want to use VulDB in your project?

Use the official API to access entries easily!