CVE-2026-89714 در Kernel لینوکس: نشت جدول delegation در mount ناموفق NFSv4

/images/linux-nfs-cve-2026-89714.png

یک poller بکاپ Longhorn حدود ۱۰ بار در ثانیه mount.nfs4 را روی سرور فقط-NFSv3 تکرار می‌کرد. نتیجه در خود توصیف CVE آمده: حدود ۳٫۴ گیگابایت slab غیرقابل‌بازپس‌گیری (kmalloc-rnd-13-4k) در روز؛ نود تا حدود ۱۲ گیگابایت slab نشت‌شده رسید. منبع با tracepoint kmem:kmalloc و call_site=nfs4_delegation_hash_alloc پیدا شد.

۱۴ سپتامبر ۲۰۲۶ اوبونتو همین رفتار را به‌عنوان CVE-2026-89714 در Kernel لینوکس ثبت کرد. OpenCVE همان شناسه را حدود ۱۱ سپتامبر با امتیاز CVSS 3.1 = 7.5 (High) و بردار CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H آورده است. کلاس ضعف: CWE-772 (آزاد نشدن منبع بعد از پایان عمر مفید). در KEV نیست. رکورد CVE.org هم همان شناسه را دارد.

باگ در کلاینت NFSv4 است، نه در سرور فایل. این RCE نیست؛ خطر عملی Availability نود است.

تخصیص زود، destroy دیر

تابع nfs4_server_common_setup() جدول server->delegation_hash_table را خیلی زود تخصیص می‌دهد، اما server->destroy — تنها مسیری که آن جدول را از طریق nfs4_destroy_server() آزاد می‌کند — تازه آخر تابع ست می‌شود.

اگر یکی از گام‌های میانی شکست بخورد (is_ds_only_client()، nfs4_init_session()، nfs4_get_rootfh()، یا nfs_probe_server())، تابع با destroy هنوز برابر NULL برمی‌گردد. بعد nfs_free_server() callback را رد می‌کند و جدول می‌ماند: حدود ۴ کیلوبایت در هر تلاش، با watermark پیش‌فرض delegation.

از userspace در دسترس است: هر mount ناموفق NFSv4 یک تخصیص نشت می‌دهد. کلاینتی که mount شکست‌خورده را پشت‌سرهم retry کند، حافظه Kernel را بدون حد هدر می‌دهد.

رشته باگ از commit f5b3108e6a14 شروع می‌شود: «NFS: use a hash table for delegation lookup». تا وقتی destroy ست نشده، مسیر خطا cleanup ندارد. فیکس جدول را روی همان مسیرهای خطا، قبل از انتساب server->destroy، آزاد می‌کند.

نشت مال Kernel است. Longhorn فقط تقویت‌کننده عملی است: کنترلر backup target وقتی مسیر NFS غلط باشد، mount را سریع retry می‌کند. Issue #13468 همان الگوی retry را روی export/پوشه ناموجود نشان می‌دهد (طوفان udev و تلاش روی nfsvers 4.2 / 4.1 / 4.0). آن تیکت خود CVE نیست؛ زمینه operational است. روی کلاستر Kubernetes با backup target از نوع NFS، یک URL که mount نمی‌شود کافی است تا نود به‌جای «بکاپ خراب» به حافظه slab تمام‌نشدنی برسد.

کدام درخت‌ها فیکس دارند

commit mainline: 2092f5b38f88be306140c77aeeeb43fc1adacacc در 7.3-rc1. نویسنده: Nate Prodromou؛ بازبینی Christoph Hellwig؛ Signed-off-by از Trond Myklebust (۱۴ ژوئیه ۲۰۲۶).

طبق CNA کرنل، نسخه‌های سالم از جمله 6.18.50 (شاخه 6.18)، 7.2.4 (شاخه 7.2) و 7.3-rc1 به بعد هستند. کد آسیب‌پذیر از 6.17 وارد درخت شده. بک‌پورت‌های stable از صفحه اوبونتو لینک شده‌اند:

دبیان برای bookworm و trixie نوشته not-affected (کد آسیب‌پذیر در آن درخت‌ها نیست). forky/sid با 7.1.13-1 هنوز آسیب‌پذیر است. بسته‌های linux اوبونتو تا ۱۴ سپتامبر هنوز Needs evaluation هستند؛ یعنی USN پچ‌شده را فرض نکنید.

Kernel را به نسخه‌ای که فیکس دارد برسانید: 7.3-rc1، 7.2.4+، 6.18.50+، یا بک‌پورت توزیع. روی اوبونتو تا انتشار USN صبر نکنید اگر نود NFS کلاینتِ پرretry دارد. retry خودکار mount.nfs4 را قطع کنید: backup target غلط Longhorn، اسکریپت مانیتور، هر چیزی که mount شکست‌خورده را در حلقه می‌گذارد. SUnreclaim در /proc/meminfo را زیر نظر بگیرید؛ رشد پایدار هم‌زمان با خطای mount NFSv4 همان سیگنال این باگ است.

آخرین مطالب