Odebrany

CVE-2026-90413

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

IB/isert: odrzuć logowanie PDU deklarujące więcej danych niż otrzymano

isert_login_recv_done() rejestruje, ile bajtów faktycznie umieścił HCA
bufor logowania, ale nic nie porównuje tego z długością logowania
Deklaruje BHS PDU. isert_rx_login_req() kopiuje min(login_req_len,
MAX_KEY_VALUE_PAIRS) bajtów do login->req_buf, a następnie kod logowania
odczytuje zadeklarowaną długość z tego bufora - dla pierwszego PDU w
iscsi_target_locate_portal(),

długość_ładowania = ntoh24(login_req->dlength);
tmpbuf = kmemdup_nul(login->req_buf, długość_ładowania, GFP_KERNEL);

i dla tych po nim w iscsi_decode_text_input(), osiągane z
iscsi_target_do_login().

login->req_buf to stała alokacja bajtów MAX_KEY_VALUE_PAIRS (8192), więc
inicjator, który deklaruje więcej niż wysyła, odczytuje jego koniec,
przed uwierzytelnieniem i przy kontrolowanej przez niego długości:

BŁĄD: KASAN: płyta poza granicami w kmemdup_nul+0x43/0x80
Odczyt rozmiaru 8193 pod adresem ffff8881056a8000 w zadaniu iscsi_np/167
__asan_memcpy+0x23/0x60
kmemdup_nul+0x43/0x80
iscsi_target_locate_portal+0x48d/0x1180
iscsi_target_login_thread+0x19a9/0x3350
Przydzielone przez zadanie 167:
__kmalloc_cache_noprof+0x158/0x370
iscsi_target_login_thread+0x971/0x3350
który należy do pamięci podręcznej kmalloc-8k o rozmiarze 8192
przydzielony region 8192-bajtowy

Zamiast tego sfałszowanie drugiego PDU logowania dociera do drugiego czytnika na stronie
ten sam bufor:

BŁĄD: KASAN: płyta poza granicami w kmemdup_nul+0x43/0x80
Odczytanie rozmiaru 8193 pod adresem ffff888104d10000 przez zadanie kworker/1:1/50
Kolejka robocza: isert_login_wq iscsi_target_do_login_rx
__asan_memcpy+0x23/0x60
kmemdup_nul+0x43/0x80
iscsi_decode_text_input+0xc6/0x11c0
iscsi_target_do_login+0x261/0x1470
iscsi_target_do_login_rx+0x51d/0x7d0

iscsit przez TCP nie jest ujawniany: iscsit_get_login_rx() sprawdza poprawność
zadeklarowana długość za pomocą iscsi_target_check_login_request(), a następnie odczytuje
dokładnie tyle bajtów poza gniazdem, więc decyduje deklarowana długość
ile przybywa, a nie ile jest kopiowane z już wypełnionego
bufor. isert w ogóle nie wywołuje metody iscsi_target_check_login_request().

Odrzuć PDU logowania, którego zadeklarowana długość DataSegmentLength przekracza wartość poprzednią
otrzymane w obu ścieżkach prowadzących do isert_rx_login_req():
isert_get_login_rx() dla pierwszego logowania PDU i isert_login_recv_done()
dla tych, którzy po nim nastąpią. dlength <= login_req_len jest dozwolone, ponieważ
odebrana liczba może obejmować maksymalnie trzy bajty uzupełnienia iSCSI.

Po dokonaniu czeku kopia wysłana nie może już przekraczać kopii w:
opublikowany login SGE to ISER_RX_PAYLOAD_SIZE, więc login_req_len nie może
przekracza MAX_KEY_VALUE_PAIRS, a min() w isert_rx_login_req() wynosi
login_req_len.

Podobnie jak istniejąca kontrola krótkich PDU dodana przez 29e7b925ae6d, odrzucenie w
isert_login_recv_done() zwraca bez ukończenia login_req_comp, więc a
zniekształcone kolejne PDU powodują, że login zostaje usunięty przez login
timer, zamiast natychmiastowego niepowodzenia. Ścieżka pierwszej jednostki PDU zwraca plik
błąd i od razu kończy się niepowodzeniem.

Powielone w wersji 7.2.0-rc4 z soft-RoCE (rdma_rxe) pod KASAN, przy użyciu
inicjator, który wysyła prawdziwy ładunek klucz=wartość podczas deklarowania 8193 cali
BHS, na pierwszym PDU logowania i na drugim w oddzielnych przebiegach. The
raportowany rozmiar odczytu dokładnie śledzi zadeklarowaną wartość; 16384 i 61440
zachowywać się tak samo. Niezałatany raport z 3 z 3 uruchomień na każdej z dwóch ścieżek,
poprawiono 0 z 3 na obu, uruchamiaj naprzemiennie w jednej sesji i normalnie
logowanie nadal kończy się w poprawionej wersji.

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