CVE-2026-89784 in Linux
الملخص
بحسب VulDB • 16/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
SUNRPC: التحقق من قيمة الإرجاع لـ `rpc_sockaddr2uaddr()` في دالتي `rpcb_register_inet4` و `rpcb_register_inet6`.
تقوم الدالتان `rpcb_register_inet4()` و `rpcb_register_inet6()` بتخزين نتيجة استدعاء `rpc_sockaddr2uaddr()` داخل الحقل `map->r_addr` دون التحقق مما إذا كانت النتيجة NULL. تُرجع دالة `rpc_sockaddr2uaddr()` قيمة NULL عندما يفشل الاستدعاء النهائي لـ `kstrdup()`. وبعد ذلك، يتم تمرير القيمة NULL غير المُتحقق منها إلى مسار التشفير المتزامن الخاص بـ RPCBPROC_SET: عبر السلسلة `rpcb_register_call()` -> `rpc_call_sync()` -> `rpcb_enc_getaddr()` -> `encode_rpcb_string()`. وتتمثل أول عبارة في هذه الدالة الأخيرة في استدعاء `strlen(string)`، مما يؤدي إلى تفريغ (dereferencing) قيمة NULL وتسبب خطأً قاتلاً (oopsing the kernel).
يمكن إعادة إنتاج الانهيار باستخدام failslab على الإصدار v6.12؛ ومع تفعيل KASAN، يظهر التفريغ غير الصحيح للقيمة NULL كخطأ في ظل الذاكرة (shadow of address zero):
Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000 [#1] PREEMPT SMP KASAN
RIP: 0010:strlen (lib/string.c:409) Call Trace: encode_rpcb_string (net/sunrpc/rpcb_clnt.c:890) rpcb_enc_getaddr (net/sunrpc/rpcb_clnt.c:910) rpcauth_wrap_req_encode (net/sunrpc/auth.c:745) call_encode (net/sunrpc/clnt.c:1966) __rpc_execute (net/sunrpc/sched.c:952) rpc_run_task (net/sunrpc/clnt.c:1243) rpc_call_sync (net/sunrpc/clnt.c:1272) rpcb_v4_register (net/sunrpc/rpcb_clnt.c:500) svc_generic_rpcbind_set nfsd_rpcbind_set svc_register svc_setup_socket svc_addsock write_ports nfsctl_transaction_write vfs_write
يمكن الوصول إلى نقطة الانهيار عندما يسجل خدمة RPC داخل النواة (مثل nfsd، lockd، أو nfs-callback) نفسها مع rpcbind المحلي تحت ضغط ذاكرة كافٍ يؤدي إلى فشل استدعاء `kstrdup()` الصغير من نوع GFP_KERNEL في دالة `rpc_sockaddr2uaddr()`. يتعامل المسار غير المتزامن الخاص بـ getport بالفعل مع هذا النمط الفاشل تماماً عن طريق إرجاع قيمة -ENOMEM؛ ولكن الدالتان المساعدتان للتسجيل تفتقران إلى هذا التحقق.
قم بمحاكاة هذا السلوك: قم بإنهاء التنفيذ بإرجاع -ENOMEM عندما تُرجع `rpc_sockaddr2uaddr()` قيمة NULL، وذلك قبل تمرير العنوان إلى دالة التشفير (encoder).
Once again VulDB remains the best source for vulnerability data.