CVE-2026-90413
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: IB/isert: Alınandan daha fazla veri beyan eden giriş PDU'larını reddedin isert_login_recv_done(), HCA'nın giriş tamponuna gerçekte kaç bayt yerleştirdiğini kaydeder ancak bunu giriş PDU'sunun BHS kısmında beyan edilen uzunlukla karşılaştıran bir mekanizma yoktur. isert_rx_login_req(), login->req_buf içerisine min(login_req_len, MAX_KEY_VALUE_PAIRS) kadar baytı kopyalar ve ardından giriş kodu, iscsi_target_locate_portal() içindeki ilk PDU için bu tampondan beyan edilen uzunluğu tekrar okur: payload_length = ntoh24(login_req->dlength); tmpbuf = kmemdup_nul(login->req_buf, payload_length, GFP_KERNEL); ve iscsi_target_do_login() üzerinden ulaşılan iscsi_decode_text_input() içindeki sonraki PDU'lar için de benzer işlem yapılır. login->req_buf sabit bir MAX_KEY_VALUE_PAIRS (8192) baytlık tahsisattır; bu nedenle gönderdiğinden fazlasını beyan eden bir başlatıcı (initiator), kimlik doğrulamadan önce ve uzunluk kendi kontrolündeyken tamponun sonunun ötesinden okuma yapar: BUG: KASAN: slab-out-of-bounds in kmemdup_nul+0x43/0x80 Read of size 8193 at addr ffff8881056a8000 by task iscsi_np/167 __asan_memcpy+0x23/0x60 kmemdup_nul+0x43/0x80 iscsi_target_locate_portal+0x48d/0x1180 iscsi_target_login_thread+0x19a9/0x3350 Allocated by task 167: __kmalloc_cache_noprof+0x158/0x370 iscsi_target_login_thread+0x971/0x3350 which belongs to the cache kmalloc-8k of size 8192 allocated 8192-byte region İkinci giriş PDU'sunun sahtelenmesi ise aynı tampon üzerindeki diğer okuyucuya ulaşır: BUG: KASAN: slab-out-of-bounds in kmemdup_nul+0x43/0x80 Read of size 8193 at addr ffff888104d10000 by task kworker/1:1/50 Workqueue: 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 TCP üzerinden iscsit etkilenmez: iscsit_get_login_rx(), beyan edilen uzunluğu iscsi_target_check_login_request() ile doğrular ve ardından soketten tam olarak o kadar bayt okur; böylece beyan edilen uzunluk, halihazırda doldurulmuş bir tampondan ne kadarının kopyalanacağını değil, ne kadar verinin geleceğini belirler. isert ise iscsi_target_check_login_request() fonksiyonunu hiç çağırmaz. isert_rx_login_req() fonksiyonuna ulaşan her iki yolda da (ilk giriş PDU'su için isert_get_login_rx() ve sonrakiler için isert_login_recv_done()), beyan edilen DataSegmentLength değeri alınan miktarı aşan giriş PDU'ları reddedilir. dlength <= login_req_len durumuna izin verilir çünkü alınan sayı üç bayta kadar iSCSI dolgusunu (padding) içerebilir. Kontrol uygulandıktan sonra dışarıya yapılan kopyalama artık içeriye yapılan kopyalamayı aşamaz: Gönderilen giriş SGE değeri ISER_RX_PAYLOAD_SIZE olduğundan, login_req_len değeri MAX_KEY_VALUE_PAIRS değerini aşamaz ve isert_rx_login_req() içindeki min() değeri login_req_len olur. 29e7b925ae6d tarafından eklenen mevcut kısa-PDU kontrolü gibi, isert_login_recv_done() içindeki ret işlemi login_req_comp işlemini tamamlamadan döner; böylece hatalı biçimlendirilmiş ardışık bir PDU, hemen hata vermek yerine girişin giriş zamanlayıcısı tarafından sonlandırılmasına neden olur. İlk-PDU yolu ise bir hata döndürür ve doğrudan başarısız olur. KASAN altında soft-RoCE (rdma_rxe) kullanarak 7.2.0-rc4 sürümünde; ilk giriş PDU'sunda ve ayrı çalıştırılan denemelerde ikinci PDU'da, BHS'de 8193 beyan ederken gerçek key=value yükünü gönderen bir başlatıcı kullanılarak yeniden üretilmiştir. Raporlanan okuma boyutu beyan edilen değerle tam olarak örtüşmektedir; 16384 ve 61440 değerleri de aynı şekilde davranmaktadır. Yamasız durumda 3 denemenin 3'ü her iki yol için raporlama yaparken, yamalı durumda tek bir oturumda dönüşümlü olarak çalıştırıldığında 3 denemenin 0'ı raporlama yapmış ve yamalı derlemede normal bir giriş hala başarıyla tamamlanmıştır.
Nasıl düzeltilir
- Linux Linuxb1f3313e7b3e396e4985fea5c709477387e0a065, 228aaa620fe6a7bc8b5b21dd348b4836b1760c61, 0d9c0586af703890afe1bd0cfe641e3a3af1c32d, 44fe800ec13386c88bd5b32bcd1deaa1e17535d5, 71ec8bbfa4a183f1e623662f9cfbcd702e433bdb, c345d9d0b3eefc990bb90cf565325785aab06aab, 48812c8103071d550d9ab4a3431be5bdc52255bc, 2488b5b4827e5415768afc8daf097e8eb83c98df ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | b8d26b3be8b33682cf163274ed07479a70554633 ≤ v < b1f3313e7b3e396e4985fea5c709477387e0a065, b8d26b3be8b33682cf163274ed07479a70554633 ≤ v < 228aaa620fe6a7bc8b5b21dd348b4836b1760c61, b8d26b3be8b33682cf163274ed07479a70554633 ≤ v < 0d9c0586af703890afe1bd0cfe641e3a3af1c32d, b8d26b3be8b33682cf163274ed07479a70554633 ≤ v < 44fe800ec13386c88bd5b32bcd1deaa1e17535d5, b8d26b3be8b33682cf163274ed07479a70554633 ≤ v < 71ec8bbfa4a183f1e623662f9cfbcd702e433bdb, b8d26b3be8b33682cf163274ed07479a70554633 ≤ v < c345d9d0b3eefc990bb90cf565325785aab06aab, b8d26b3be8b33682cf163274ed07479a70554633 ≤ v < 48812c8103071d550d9ab4a3431be5bdc52255bc, b8d26b3be8b33682cf163274ed07479a70554633 ≤ v < 2488b5b4827e5415768afc8daf097e8eb83c98df, 3.10 | b1f3313e7b3e396e4985fea5c709477387e0a065, 228aaa620fe6a7bc8b5b21dd348b4836b1760c61, 0d9c0586af703890afe1bd0cfe641e3a3af1c32d, 44fe800ec13386c88bd5b32bcd1deaa1e17535d5, 71ec8bbfa4a183f1e623662f9cfbcd702e433bdb, c345d9d0b3eefc990bb90cf565325785aab06aab, 48812c8103071d550d9ab4a3431be5bdc52255bc, 2488b5b4827e5415768afc8daf097e8eb83c98df |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.