Podatność w podsystemie NFSv4.2 jądra Linux powoduje double-free bufora scratch oraz odwołanie do wskaźnika NULL, co może prowadzić do awarii systemu lub eskalacji uprawnień. Błąd dotyczy obsługi żądań READ_PLUS i jest oceniony jako krytyczny z wynikiem CVSS 9.8.
▸ Pokaż oryginał (EN)
In the Linux kernel, the following vulnerability has been resolved: NFSv4.2: Rework scratch handling for READ_PLUS (again) I found that the read code might send multiple requests using the same nfs_pgio_header, but nfs4_proc_read_setup() is only called once. This is how we ended up occasionally double-freeing the scratch buffer, but also means we set a NULL pointer but non-zero length to the xdr scratch buffer. This results in an oops the first time decoding needs to copy something to scratch, which frequently happens when decoding READ_PLUS hole segments. I fix this by moving scratch handling into the pageio read code. I provide a function to allocate scratch space for decoding read replies, and free the scratch buffer when the nfs_pgio_header is freed.
Funkcja nfs4_proc_read_setup() jest wywoływana tylko raz dla struktury nfs_pgio_header, natomiast kod odczytu może wysyłać wiele żądań przy użyciu tej samej struktury. Powoduje to okazjonalne podwójne zwolnienie (double-free) bufora scratch (CWE-415), a także ustawienie wskaźnika NULL przy niezerowej długości w buforze scratch XDR. Błąd objawia się jako oops (crash jądra) przy pierwszym dekodowaniu, które wymaga skopiowania danych do bufora scratch — co często zdarza się przy dekodowaniu segmentów dziur (hole segments) protokołu READ_PLUS. Poprawka przenosi obsługę bufora scratch do kodu pageio read, zapewniając jego alokację i zwolnienie w odpowiednim miejscu cyklu życia struktury nfs_pgio_header.
Atakujący lub złośliwy serwer NFS może doprowadzić do awarii systemu (kernel oops/crash), a w sprzyjających warunkach — do eskalacji uprawnień lub wykonania arbitralnego kodu w kontekście jądra systemu operacyjnego.
Należy zastosować patche dostępne u producenta zgodnie z referencjami: commity 303a78052091, a2f4cb206bd9, adac9f0ddd2b oraz ae5d5672f1db w repozytorium stable jądra Linux (git.kernel.org).
Jądro Linux z aktywną obsługą NFSv4.2 i protokołu READ_PLUS; dokładne wersje wskazane w referencjach producenta (patche dostępne na git.kernel.org).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux Kernel
OSLinux6.4 – 6.4.16 (bez)6.5 – 6.5.3 (bez)
Powiązane podatności
Type confusion w V8 (Google Chrome) — zdalne uszkodzenie sterty
Commvault Command Center – nieuwierzytelniony RCE przez path traversal w ZIP
RCE przez YAML deserialization w IBM Aspera Faspex
RCE w VMware Workspace ONE Access i Identity Manager poprzez server-side template injection
Command Injection w VMware Workspace One Access i Identity Manager