Odebrany

CVE-2026-89665

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

nfsd: odrzuca usekundy poza zakresem w NFSv2 SETATTR/CREATE

Dekoder sattr NFSv2 konwertuje usekundy drutu na nanosekundy
svcxdr_decode_sattr():

iap->ia_atime.tv_nsec = tmp2 * NSEC_PER_USEC;

tmp2 to u32, a NSEC_PER_USEC to 1000, więc iloczyn jest obliczany w
długi bez znaku. Na ILP32 jest to 32 bity i usekundy poza zakresem
wartość taka jak 4294968 jest zawijana do tv_nsec == 704. W związku z tym korupcja
dzieje się podczas dekodowania, zanim jakakolwiek funkcja proc będzie mogła sprawdzić wartość,
a późniejsze sprawdzenie zakresu w tv_nsec dałoby wynik mieszczący się w zakresie i
zaakceptuj to. Odrzucenie w dekoderze daje odpowiedź RPC GARBAGE_ARGS.
NFSv2 nie definiuje NFSERR_INVAL, więc nie ma żadnego stanu na poziomie NFS, który można by zwrócić
z powodu zniekształconego argumentu czasu i kontrola nie może zostać przeniesiona do proc
działają w taki sam sposób, jak sprawdzanie zakresu nsec v3/v4.

Strzeż surowych sekund przed mnożeniem i odrzucaniem wartości
większa niż 1000000. usekund == 1000000 zostaje zachowane: jest to Słońce
konwencja „ustawiona na bieżący czas serwera” i system Linux w drzewie
Klient NFSv2 emituje go zarówno w polu atime, jak i mtime
touch / utimes(file, NULL) (patrz encode_sattr() i
xdr_encode_current_server_time() w fs/nfs/nfs2xdr.c). Odrzucam 1000000
zamieniłoby tę typową operację w twardą awarię dekodowania dla obu
SETATTR i UTWÓRZ. 1000000 * NSEC_PER_USEC to 10^9, co nie jest zawijane
na ILP32, więc wartość konwencji Sun przechodzi bezpiecznie. Tylko
wartości rzeczywiście wykraczające poza zakres (> 1000000) są odrzucane. Czas i
dlatego strażnicy mtime są symetryczni.

Dekoder zastosował konwencję Sun jedynie w bloku mtime, który
kasuje ATTR_ATIME_SET|ATTR_MTIME_SET, gdy mtime usekund == 1000000. Jeśli a
klient umieszcza 1000000 w polu atime, ale nie w polu mtime, plik
blok atime zapisał tv_nsec poza zasięgiem (10^9) i pozostawił ATTR_ATIME_SET
set, więc fałszywa wartość dotarła do systemu plików. Zastosuj konwencję w
również blok atime, czyszcząc ATTR_ATIME_SET, aby serwer go użył
bieżący czas i ignoruje wartość. Tam jest wyczyszczony tylko ATTR_ATIME_SET.
Blok mtime zachowuje swoje dotychczasowe zachowanie, gdzie 1000000 oznacza „ustaw
zarówno atime, jak i mtime do teraz”.

[ cel: różne poprawki, dodatki i porządki ]

>_ 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