Odebrany

CVE-2026-99109

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

smb: klient: odrzuca żądania SetEA, które nie mieszczą się w buforze żądań

CIFSSMBSetEA() kopiuje wartość rozszerzonego atrybutu wywołującego do
Bufor żądań SMB bez sprawdzania, czy pasuje. Wymaganiem jest
podano w źródle, ale nigdy nie zostało wdrożone:

/*BB dodaj sprawdzenie długości, aby sprawdzić, czy zmieści się
negocjowany rozmiar bufora SMB BB */
/* if (ea_value_len > bufor_rozmiar - 512 (wystarczający na nagłówek)) */
jeśli (ea_value_len)
memcpy(dane_parm->nazwa_listy + długość_nazwy + 1,
ea_value, ea_value_len);

Jedynym ograniczeniem zastosowanym po wejściu jest cifs_xattr_set():

#zdefiniuj MAX_EA_VALUE_SIZE CIFSMaxBufSize
...
jeśli (rozmiar > MAX_EA_VALUE_SIZE)

CIFSMaxBufSize to pełna pojemność bufora, a więc wartość
o dokładnie takim rozmiarze nie pozostawia miejsca na nagłówek SMB, moduł TRANS2
blok parametrów, nagłówek fealist i nazwa EA, które są zapisywane
przed nim w tym samym obiekcie.

SendReceive() już wymusza prawidłowy limit na tej długości:

if (in_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE)

ale jest wywoływany po wykonaniu kopii. Nieuprzywilejowany
setxattr(2) na wierzchołku SMB1 z 250-bajtową nazwą i 16384-bajtowym
wartość zapisuje 16384 bajty, zaczynając od 345 bajtów, w 16588 bajtach
obiekt cifs_request, kończący się 141 bajtami za nim:

BŁĄD: KASAN: płyta poza granicami w CIFSSMBSetEA+0xabc/0xde0
Zapisz rozmiar 16384 pod adresem ffff888003aa0159 przez zadanie init/68
__asan_memcpy+0x3c/0x60
CIFSSMBSetEA+0xabc/0xde0
cifs_xattr_set+0xd3a/0xff0
__vfs_setxattr+0x13e/0x1a0
Błędny adres znajduje się w odległości 345 bajtów
przydzielony obszar 16588 bajtów

Zastosuj limit SendReceive() do złożonego żądania przed kopią
zamiast po nim i rozszerz liczniki bajtów, aby suma nie była możliwa
owinąć przed sprawdzeniem.

byte_count jest również testowany względem U16_MAX, ponieważ jest przechowywany w pliku
16-bitowy pSMB->ByteCount. Staje się to osiągalne, gdy jest CIFSMaxBufSize
podnoszona przy obciążeniu modułu, gdzie można ją ustawić nawet na 1024*127: za pomocą a
5-bajtowa nazwa EA i wartość 65521 bajtów, liczba wynosi dokładnie U16_MAX, podczas gdy
byte_count wynosi 65556, a cpu_to_le16() skróci ją do 20 i
przesłać ramkę, której liczba ByteCount nie odpowiada jej długości. Testowanie
byte_count obejmuje również liczbę bajtów, ponieważ liczba_bajtów jest większa z
dwa i jedyny 16-bitowy konsument count jest zapisywany po tym punkcie.

Funkcja check_add_overflow() jest oceniana jako pierwsza, tak aby przypisano total_len
zanim zostanie to zgłoszone.

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