Podatność w podsystemie sunrpc jądra Linux umożliwia zdalnemu, nieuwierzytelnionemu atakującemu wywołanie awarii systemu (kernel crash) poprzez wysłanie specjalnie spreparowanego pakietu RPC. W określonych warunkach może również prowadzić do niekontrolowanego zapisu w pamięci (memory scribble).
▸ Pokaż oryginał (EN)
In the Linux kernel, the following vulnerability has been resolved: sunrpc: handle SVC_GARBAGE during svc auth processing as auth error tianshuo han reported a remotely-triggerable crash if the client sends a kernel RPC server a specially crafted packet. If decoding the RPC reply fails in such a way that SVC_GARBAGE is returned without setting the rq_accept_statp pointer, then that pointer can be dereferenced and a value stored there. If it's the first time the thread has processed an RPC, then that pointer will be set to NULL and the kernel will crash. In other cases, it could create a memory scribble. The server sunrpc code treats a SVC_GARBAGE return from svc_authenticate or pg_authenticate as if it should send a GARBAGE_ARGS reply. RFC 5531 says that if authentication fails that the RPC should be rejected instead with a status of AUTH_ERR. Handle a SVC_GARBAGE return as an AUTH_ERROR, with a reason of AUTH_BADCRED instead of returning GARBAGE_ARGS in that case. This sidesteps the whole problem of touching the rpc_accept_statp pointer in this situation and avoids the crash.
Gdy klient RPC wysyła specjalnie spreparowany pakiet, dekodowanie odpowiedzi RPC może zakończyć się zwróceniem statusu SVC_GARBAGE bez ustawienia wskaźnika rq_accept_statp. Serwer sunrpc następnie wyłuskuje (dereferencuje) ten wskaźnik i próbuje zapisać do wskazywanego adresu. Jeśli wątek przetwarza pierwsze żądanie RPC od czasu uruchomienia, wskaźnik ma wartość NULL, co skutkuje natychmiastowym crashem jądra (NULL pointer dereference, CWE-476). W pozostałych przypadkach może dojść do nadpisania arbitralnego obszaru pamięci (memory scribble). Poprawka polega na traktowaniu zwrotu SVC_GARBAGE jako błędu uwierzytelniania AUTH_ERROR z kodem AUTH_BADCRED zamiast wysyłania odpowiedzi GARBAGE_ARGS, co eliminuje konieczność odwoływania się do wskaźnika rpc_accept_statp w tej sytuacji.
Zdalny, nieuwierzytelniony atakujący może spowodować natychmiastową awarię jądra systemu (DoS) lub — w sprzyjających warunkach — doprowadzić do niekontrolowanego zapisu w pamięci kernela, co może potencjalnie umożliwić dalszą eskalację uprawnień.
Należy zastosować patche dostępne u producenta zgodnie z referencjami — commity opublikowane w repozytorium kernel.org stable: 353e75b55e58, 599c489eea79, 94d10a4dba0b, c90459cd58bb. Zaleca się aktualizację jądra do wersji zawierającej wymienione poprawki. Do czasu zastosowania patcha należy rozważyć ograniczenie dostępu sieciowego do portów usług RPC/NFS wyłącznie do zaufanych hostów za pomocą firewall.
Jądro Linux — wersje wskazane w referencjach producenta (łatki opublikowane w repozytorium kernel.org dla gałęzi stable)
Podatność została zgłoszona przez badacza o pseudonimie tianshuo han. Publicznie dostępne jest repozytorium proof-of-concept pod adresem https://github.com/keymaker-arch/NFSundown, co zwiększa ryzyko wykorzystania podatności.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux Kernel
OSLinux6.166.46.3.4 – 6.4 (bez)6.4.1 – 6.6.95 (bez)6.7 – 6.12.35 (bez)6.13 – 6.15.4 (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