- شناسه CVE-2026-31431 :CVE
- CWE-669 :CWE
- yes :Advisory
- منتشر شده: آوریل 22, 2026
- به روز شده: آوریل 30, 2026
- امتیاز: 7.8
- نوع حمله: Local Elevation of Privilege (LPE)
- اثر گذاری: Service Takeover
- حوزه: سیستمعاملها و اجزای کلیدی آن
- برند: Linux
- محصول: Linux
- وضعیتPublished :CVE
- Yes :POC
- وضعیت آسیب پذیری: patch شده
چکیده
آسیبپذیری Copy Fail در کرنل لینوکس یک ضعف منطقی در پیادهسازی رابط رمزنگاری Crypto API و بهخصوص در کامپوننت algif_aead است. این ضعف ناشی از مدیریت نادرست عملیات رمزنگاری AEAD در حالت in‑place بوده که منجر به نوشتن کنترلشده در صفحات کش فایل (Page Cache) میشود. در نتیجه این ضعف امنیتی یک کاربر لوکال با دسترسی محدود میتواند مقادیر مشخصی از فایلهای قابلخواندن را در حافظه تغییر دهد و در شرایط خاص، با دستکاری فایلهای اجرایی دارای مجوز ویژه، سطح دسترسی خود را تا root افزایش دهد.
توضیحات
آسیبپذیری CVE-2026-31431 که با نام Copy Fail نیز شناخته میشود، یک ضعف منطقی (Logic Flaw) در کرنل لینوکس است که در کامپوننت algif_aead از زیرسیستم Crypto API رخ میدهد. ماهیت اصلی این آسیبپذیری، انتقال نادرست منابع بین حوزهها بوده که مطابق با طبقهبندی CWE-669 ارزیابی شده است. به این معنا که دادهها یا منابع سیستمی به طور نادرست بین دو دامنه یا سطح دسترسی مجزا منتقل شده و همین امر میتواند منجر به دسترسی غیرمجاز یا دستکاری ناخواسته دادهها شود.
ریشه این ضعف به تغییراتی برمیگردد که در سال 2017 در فایل algif_aead.c اعمال شد. تغییر اعمال شده تلاش میکرد عملیات رمزنگاری AEAD را به صورت in-place انجام دهد، به این معنا که دادههای ورودی و خروجی در یک بافر مشترک پردازش شوند. AEAD یک روش رمزنگاری است که علاوه بر رمزنگاری دادهها، صحت و یکپارچگی آنها را با استفاده از تگ احراز هویت (Authentication Tag) بررسی میکند.
در فرآیند رمزگشایی AEAD، تابع _ aead_recmsg()دادههای تگ احراز هویت را از لیست scatter-gather ورودی (TX SGL) به لیست مقصد (RX SGL) منتقل میکند و سپس درخواست رمزنگاری را با تنظیم همان بافر RX به عنوان منبع و مقصد ارسال میکند. اگر این دادهها از مسیر splice() آمده باشند، صفحات کش فایل (Page Cache) مستقیماً به عنوان بخشی از مقصد قابل نوشتن در نظر گرفته میشوند.
splice () در لینوکس مکانیزمی است که داده را بین توصیفگرهای فایل (File Descriptors) بدون کپی در فضای کاربر منتقل کرده و مستقیماً از صفحات کش فایل استفاده میکند. در این شرایط، پیادهسازی خاص authencesn هنگام رمزگشایی فرض میکند که منبع و مقصد یکسان هستند و 4 بایت داده را در ناحیه تگ مینویسد. این موضوع قبل از بررسی صحت تگ احراز هویت رخ میدهد؛ بنابراین حتی اگر رمزگشایی با خطای EBADMSG شکست بخورد، دادهها در صفحات کش فایل باقی میمانند. این عملکرد، یک قابلیت (primitive) نوشتن کنترلشده در حافظه صفحات کش فایل ایجاد میکند که مهاجم میتواند از آن برای اصلاح یا دستکاری محتوای فایلهای قابلخواندن بهرهبرداری کند.
بهرهبرداری از این ضعف نسبتاً ساده و قابل خودکارسازی است و نیاز به دسترسی لوکال دارد. در این حمله، ابتدا مهاجم یک سوکت AF_ALG در لینوکس باز میکند تا به الگوریتم رمزنگاری authencesn(hmac(sha256),cbc(aes)) دسترسی یابد. سپس با ترکیبی از فراخوانیهای سیستمی sendmsg()، splice() و recv() دادههای کنترلشده خود را به حافظه صفحات کش فایل هدف وارد میکند. هر درخواست قادر است چهار بایت دلخواه مهاجم را در یک offset مشخص از فایل تغییر دهد و با تکرار این فرآیند، چندین بخش از فایل قابل اصلاح خواهد بود.
در نمونه کد اثبات مفهومی (PoC)، مهاجم فایل اجرایی /usr/bin/su را هدف قرار میدهد. ابتدا آدرس Entry Point فایل ELF استخراج کرده و به offset متناظر در فایل تبدیل میشود. سپس با نوشتن چندین بخش چهار بایتی، یک shellcode کوچک در صفحات کش جایگذاری میشود. هنگام اجرای برنامه su، نسخه دستکاریشده موجود در صفحات کش بارگذاری و اجرا شده و یک Shell با دسترسی root ایجاد میشود. Shellcode نمونه شامل فراخوانیهای setuid(0) و execve(“/bin/sh”) است که دسترسی کامل root را برای مهاجم فراهم میکند.
این آسیبپذیری بدون نیاز به تعامل کاربر و تنها با دسترسی اولیه لوکال قابل بهرهبرداری است و تأثیر قابل توجهی بر سه اصل اساسی امنیت سایبری دارد؛ از نظر محرمانگی (Confidentiality)، مهاجم میتواند به دادههای حساس دسترسی یابد، از دید یکپارچگی (Integrity)، امکان تغییر یا دستکاری فایلهای سیستمی و اجرایی وجود دارد و از نظر در دسترسپذیری (Availability)، کنترل کامل سیستم میتواند منجر به اختلال یا توقف سرویسها شود. این آسیبپذیری با اعمال پچهای امنیتی در نسخههای جدیدتر کرنل لینوکس برطرف شده است.
CVSS
| Score | Severity | Version | Vector String |
| 7.8 | HIGH | 3.1 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |

شکل 1: تفسیر جدول CVSS
لیست محصولات آسیب پذیر
| Versions | Product |
| affected at 4.14 | Linux |
| affected from 72548b093ee38a6d4f2a19e6ef1948ae05c181f7 before 893d22e0135fa394db81df88697fba6032747667
affected from 72548b093ee38a6d4f2a19e6ef1948ae05c181f7 before 19d43105a97be0810edbda875f2cd03f30dc130c affected from 72548b093ee38a6d4f2a19e6ef1948ae05c181f7 before 961cfa271a918ad4ae452420e7c303149002875b affected from 72548b093ee38a6d4f2a19e6ef1948ae05c181f7 before 3115af9644c342b356f3f07a4dd1c8905cd9a6fc affected from 72548b093ee38a6d4f2a19e6ef1948ae05c181f7 before 8b88d99341f139e23bdeb1027a2a3ae10d341d82 affected from 72548b093ee38a6d4f2a19e6ef1948ae05c181f7 before fafe0fa2995a0f7073c1c358d7d3145bcc9aedd8 affected from 72548b093ee38a6d4f2a19e6ef1948ae05c181f7 before ce42ee423e58dffa5ec03524054c9d8bfd4f6237 affected from 72548b093ee38a6d4f2a19e6ef1948ae05c181f7 before a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5 |
Linux |
لیست محصولات بروز شده
| Versions | Product |
| unaffected from 0 before 4.14
unaffected from 5.10.254 through 5.10 unaffected from 5.15.204 through 5.15 unaffected from 6.1.170 through 6.1 unaffected from 6.6.137 through 6.6 unaffected from 6.12.85 through 6.12 unaffected from 6.18.22 through 6.18 unaffected from 6.19.12 through 6.19 unaffected from 7.0 |
Linux |
| 893d22e0135fa394db81df88697fba6032747667
19d43105a97be0810edbda875f2cd03f30dc130c 961cfa271a918ad4ae452420e7c303149002875b 3115af9644c342b356f3f07a4dd1c8905cd9a6fc 8b88d99341f139e23bdeb1027a2a3ae10d341d82 fafe0fa2995a0f7073c1c358d7d3145bcc9aedd8 ce42ee423e58dffa5ec03524054c9d8bfd4f6237 a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5 |
Linux |
استفاده محصول در ایران
در این جدول، تعداد صفحات ایندکسشده در گوگل با دامنه .ir که Linux kernel را ذکر کرده اند، ثبت شده است. این داده صرفاً برای برآورد تقریبی حضور محصولات در وب ایران استفاده شده و نمایانگر میزان نصب دقیق و استفاده واقعی نیست.
| Approx. Usage in .ir Domain via Google (Total Pages) | Search Query (Dork) | Product |
| 740,000 | site:.ir “linux” | Linux |
| 24,700 | site:.ir “Linux kernel” | Linux kernel |
نتیجه گیری
این آسیبپذیری با شدت بالا به یک کاربر لوکال با دسترسی محدود اجازه میدهد فایلهای اجرایی حساس را دستکاری کرده و در نهایت دسترسی root را بهدست آورد. وجود PoC عمومی و بهرهبرداریهای گزارششده، نشاندهنده ریسک عملیاتی بالای این ضعف در حملات واقعی است. برای کاهش ریسک و جلوگیری از بهرهبرداری از این آسیبپذیری، اجرای اقدامات زیر ضروری است:
- بهروزرسانی کرنل لینوکس: مهمترین اقدام امنیتی بهروزرسانی سیستم به نسخههای پچشده کرنل است. نسخههای 10.254، 5.15.204، 6.1.170، 6.6.137، 6.12.85، 6.18.22، 6.19.12 و 7.0 شامل پچ این ضعف هستند. سایر اقدامات نقش مکمل را دارند و میتوانند به کاهش ریسک این آسیب پذیری و مقابله با حملات مشابه کمک کنند.
- محدودسازی دسترسی کاربران لوکال: در محیطهای چندکاربره، دسترسی کاربران غیرضروری به سیستم باید محدود شود و سیاستهای کنترل دسترسی سختگیرانهتر اعمال گردد تا احتمال بهرهبرداری از آسیبپذیریهای لوکال کاهش یابد.
- نظارت بر یکپارچگی فایلها: استفاده از ابزارهای مانیتورینگ یکپارچگی فایل (مانند AIDE، Tripwire یا Samhain) میتواند تغییرات غیرمنتظره در فایلهای حساس سیستم را شناسایی کند.
- کاهش سطح حمله در سیستم: غیرفعال کردن قابلیتها یا کامپوننتهای غیرضروری کرنل، محدود کردن دسترسی به رابط AF_ALG و کنترل دسترسی به سیستمهای فراخوانی مانند splice در محیطهای حساس میتواند سطح حمله را کاهش دهد.
- مانیتورینگ و ثبت لاگ امنیتی: بررسی لاگهای سیستم و استفاده از سامانههای تشخیص نفوذ میزبان (HIDS) میتواند فعالیتهای غیرعادی مرتبط با دستکاری فایلهای سیستمی را شناسایی کند.
اجرای این اقدامات به ویژه بهروزرسانی سریع کرنل لینوکس میتواند ریسک سوءاستفاده از این آسیبپذیری را به شکل قابل توجهی کاهش داده و امنیت سیستمهای مبتنی بر لینوکس را در برابر حملات افزایش سطح دسترسی افزایش دهد.
امکان استفاده در تاکتیکهای Mitre Attack (در زمان اجرای حمله)
Initial Access (TA0001)
مهاجم نیاز به دسترسی اولیه به سیستم هدف دارد. این دسترسی میتواند از طریق یک اکانت محلی با هر سطح دسترسی، یک اکانت سرویس (مانند www-data، mysql)، یک پردازه مخرب ناشی از اجرای کد از راه دور (RCE) در یک برنامه کاربردی و یا از طریق دسترسی به یک کانتینر به دست آمده باشد. شرط اصلی وجود “دسترسی محلی” است.
Execution (TA0002)
پس از دسترسی، مهاجم اسکریپت بهرهبرداری (که اغلب با زبان Python، Rust یا Go نوشته شده) را اجرا میکند. این اسکریپت با استفاده از فراخوانهای سیستمی استاندارد (socket، sendmsg، splice، recv) و بدون نیاز به کتابخانههای خاص، عملیات نوشتن در حافظه نهان را انجام میدهد.
Persistence (TA0003)
پس از کسب دسترسی root، مهاجم میتواند با نصب درهای پشتی (Backdoor) مانند افزودن یک کاربر جدید با دسترسی بالا، تغییر cron jobها، نصب یک rootkit، یا پیکربندی مجدد سرویسهای SSH، دسترسی دائمی خود را در سیستم فراهم کند.
Privilege Escalation (TA0004)
این تاکتیک، هدف اصلی این آسیبپذیری است. مهاجم با استفاده از “Copy Fail” از یک کاربر بدون امتیاز (Unprivileged) به سطح دسترسی کامل ریشه (Root) ارتقا مییابد. این افزایش دسترسی امکان انجام هر عملیاتی را روی سیستم فراهم میکند.
Defense Evasion (TA0005)
از آنجا که تمام تغییرات فقط در حافظه نهان (Page Cache) اعمال میشود و هیچ فایلی روی دیسک تغییر نمیکند، ابزارهای سنتی تشخیص نفوذ مبتنی بر بررسی یکپارچگی فایلها (File Integrity Monitoring) و آنتیویروسها قادر به شناسایی حمله نخواهند بود. مهاجم همچنین میتواند اسکریپت خود را مبهم (Obfuscate) کند.
Impact (TA0040)
بهرهبرداری موفق از این آسیبپذیری یک نقض کامل امنیتی است. مهاجم با دسترسی کامل root، قادر به نابودی محرمانگی، یکپارچگی و در دسترس بودن دادهها است. این دسترسی میتواند منجر به سرقت اطلاعات حساس (نظیر اسرار تجاری و اطلاعات شخصی کاربران)، تخریب یا اخاذی دادهها (Ransomware)، تغییر در پیکربندی سیستم، ایجاد یک پایگاه دائمی برای حملات بعدی (Lateral Movement) و در نهایت از کار افتادن کامل سرویسهای حیاتی شود. در چنین وضعیتی، اعتماد کاربران از بین رفته و سازمان با هزینههای سنگین ناشی از نقض دادهها، جریمههای قانونی و خسارت به اعتبار خود مواجه خواهد شد.
منابع
- https://www.cve.org/CVERecord?id=CVE-2026-31431
- https://www.cvedetails.com/cve/CVE-2026-31431/
- https://lore.kernel.org/linux-cve-announce/2026042214-CVE-2026-31431-3d65@gregkh/
- https://vulmon.com/vulnerabilitydetails?qid=CVE-2026-31431
- https://vuldb.com/vuln/358784
- https://github.com/Smarttfoxx/copyfail
- https://www.kb.cert.org/vuls/id/260001
- https://copy.fail/
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-31431
- https://nvd.nist.gov/vuln/detail/CVE-2026-31431
- https://websec.net/blog/cve-2026-31431-linux-algifaead-page-cache-write-to-root-69f38a4ccddd2db1f520f170
- https://xint.io/blog/copy-fail-linux-distributions#the-fix-6
- https://cwe.mitre.org/data/definitions/669.html
گزارش اثبات آسیبپذیری CVE-2026-31431
اطلاعات آسیبپذیری
عنوان: افزایش سطح دسترسی محلی در کرنل لینوکس – CopyFail یا CopyGrail
شناسه: CVE-2026-31431
وضعیت مشاوره: Advisory / Patch Available
امتیاز: CVSS: 7.8 (High)
محصول: کرنل لینوکس
محصول / نسخههای آسیبپذیر
در نسخههای زیر (پیش از اعمال پچ امنیتی):
- کرنل لینوکس نسخههای 4.17 تا قبل از patch نهایی
- کلیه توزیعهای اصلی لینوکس
- سیستمهایی که کرنل آسیبپذیر روی آنها نصب شده و کاربران محلی غیرامن به آن دسترسی دارند
- محیطهای کانتینری (Docker، Kubernetes، containerd) که از کرنل آسیبپذیر استفاده میکنند
- سیستمهایی که ماژول algif_aead به صورت بارگذاریشده (loadable) یا کامپایل شده در کرنل قرار دارند
محیطهای درگیر
- سازمانهایی که از سرورهای لینوکس با کاربران چندگانه محلی یا از راه دور (SSH) استفاده میکنند
- محیطهای میزبانی ابری و مجازی (AWS، Azure، GCP) که نمونههای لینوکس را اجرا میکنند
- کلاسترهای Kubernetes و Container-as-a-Service
- CI/CD pipelines و build runners که کد ناامن یا تستشده را اجرا میکنند
- ارائهدهندگان خدمات مدیریت شده (MSP) که دسترسی شل به مشتریان یا کارمندان خود میدهند
- کلیه صنایع (مالی، بهداشت، فناوری، دولت و …) که از زیرساخت لینوکس استفاده میکنند
کامپوننتهای آسیبپذیر
- ماژول کرنل algif_aead – بخش AF_ALG cryptographic API که دسترسی userspace به عملیات رمزنگاری احراز هویتشده (AEAD) را فراهم میکند
- تابع درونخطی (in-place optimization) معرفیشده در commit 72548b093ee3 (سال 2017) که اجازه میدهد صفحات page-cache در یک destination scatterlist قابل نوشتن قرار گیرند
- سوکت AF_ALG (پروتکل 38)
- معماری ()splice و صفحه حافظه نهان (page cache) فایلهای setuid
ریشه مشکل (Root Cause Analysis)
ریشه اصلی این آسیبپذیری به ترکیبی از دو نقص امنیتی اساسی در طراحی و پیادهسازی ماژول algif_aead در کرنل لینوکس بازمیگردد. اولین نقص از نوع «کپی ناامن داده بین حافظه کاربر و هسته» یا Out-of-bounds Read (CWE-125) است. در سال ۲۰۱۷، یک بهینهسازی در این ماژول اعمال شد که اجازه میدهد صفحات حافظه نهان (Page Cache) فایلها به عنوان مقصد عملیات رمزنگاری in-place قرار گیرند، بدون آنکه آن صفحه به عنوان «کثیف» (Dirty) علامتگذاری شود. نقص دوم از نوع «افشای دسترسی به اشیاء حساس بدون سطح دسترسی مناسب» یا exposes sensitive information to an actor (CWE-200) است. در حالت عادی، نوشتن در حافظه نهان یک فایل سیستمی مانند usr/bin/su نیازمند سطح دسترسی ریشه است. اما با زنجیرهسازی ایجاد یک سوکت AF_ALG و فراخوانی سیستمی ()splice، مهاجم میتواند تنها ۴ بایت را در صفحه حافظه نهان فایل هدف بنویسد. این دو ضعف از طریق دسترسی محلی به سیستم (مثلاً یک حساب کاربری معمولی SSH یا یک شل ساده) قابل بهرهبرداری هستند و برای موفقیت، تنها نیاز به وجود فایل setuid در سیستم و فعال بودن ماژول algif_aead وجود دارد. در سناریوی بهرهبرداری کلی، مهاجم با انجام عملیات رمزنگاری در حافظه نهان فایل usr/bin/su، دستورالعملهای آن را به گونهای تغییر میدهد که هنگام اجرای مجدد، یک شل ریشه (root shell) باز شود. از آنجایی که صفحه حافظه هرگز روی دیسک نوشته نمیشود، فایل اصلی فیزیکی تغییری نمیکند و مکانیزمهای سنتی یکپارچگی فایل (مانند rpm -V) قادر به تشخیص تغییر نیستند.
بخش آسیبپذیر
رفتار ناامن سیستم:
وجود یک بهینهسازی ناامن در ماژول algif_aead کرنل که اجازه میدهد صفحات page-cache به عنوان مقصد عملیات رمزنگاری (در حالت in-place) قرار گیرند، بدون آنکه صفحه متعاقباً به عنوان “dirty” علامتگذاری شود. این رفتار ناامن باعث میشود هر کاربر محلی با دسترسی حداقلی (حتی بدون نیاز به sudo) بتواند حافظه نهان هر فایل قابل خواندنی (از جمله فایلهای سیستمی حیاتی) را به طور پایدار و کنترلشده تغییر دهد و هنگام اجرای مجدد آن فایل، کد مخرب خود را با سطح دسترسی owner فایل (معمولاً root) اجرا کند.
نحوه سوءاستفاده مهاجم:
- مهاجم به یک سیستم لینوکس آسیبپذیر دسترسی محلی دارد (مثلاً از طریق SSH به عنوان یک کاربر عادی یا از طریق یک شل)
- مهاجم یک فایل setuid را هدف قرار میدهد، مثلاً usr/bin/su یا usr/bin/sudo
- مهاجم از طریق دستکاری در عملیات سوکت AF_ALG و زنجیرهسازی با ()splice، یک صفحه خاص از page-cache فایل هدف را شناسایی میکند
- مهاجم ۴ بایت کنترلشده (مثلاً یک آفست یا یک دستورالعمل پرش) را در آن صفحه مینویسد
- صفحه page-cache آلوده میشود اما هرگز روی دیسک نوشته نمیشود (فایل اصلی فیزیکی unchanged میماند)
- مهاجم فایل setuid را به طور عادی اجرا میکند
- کرنل صفحه آلوده را از page-cache بارگذاری کرده و کد اصلاحشده را با سطح دسترسی root اجرا میکند
- مهاجم یک شل root به دست میآورد و میتواند هر عملی (نصب بکدور، غیرفعال کردن دفاع، دستکاری سیستم) را انجام دهد
نقش این آسیبپذیری در زنجیره حمله
این آسیبپذیری یک ابزار افزایش سطح دسترسی محلی (Local Privilege Escalation) بسیار قدرتمند و قابل اعتماد در زنجیره حمله محسوب میشود. با توجه به نمره CVSS 7.8 (بالا)، ماهیت محلی و نیاز به دسترسی اولیه به سیستم (مثلاً از طریق یک شل، یک کاربر SSH عادی، یا یک اپلیکیشن کانتینری)، مهاجم ابتدا باید از طریق روش دیگری (مثلاً یک RCE در یک سرویس وب، فیشینگ، یا دانلود بدافزار) یک پایگاه اولیه روی سیستم قربانی ایجاد کند. پس از آن، با بهرهبرداری از این آسیب پذیری، میتواند بدون نیاز به هیچ مجوز اضافی، مستقیماً به بالاترین سطح دسترسی (root) برسد.
پیشنیازهای بهرهبرداری (Prerequisites)
- وجود ماژول algif_aead به صورت loadable یا compiled در کرنل (اکثر توزیعها این ماژول را به صورت پیشفرض فعال دارند)
- وجود یک فایل setuid هدف (تقریباً در تمام سیستمهای لینوکس usr/bin/su یا usr/bin/sudo وجود دارد)
- نبود سیستمهای تشخیص نفوذ سطح کرنل (مانند eBPF-based runtime security) که AF_ALG سوکت را مسدود کنند
- (در محیطهای کانتینری) نیاز به دسترسی به سوکت AF_ALG در داخل کانتینر (معمولاً پیشفرض مسدود نیست)
رفتار مورد انتظار در حالت امن (Expected Secure Behavior)
- ماژول algif_aead نباید اجازه دهد صفحات page-cache به عنوان destination قابل نوشتن در عملیات رمزنگاری in-place استفاده شوند
- هر گونه دستکاری page-cache باید صفحه را به عنوان “dirty” علامتگذاری کند تا تغییر روی دیسک نوشته شود (یا حداقل توسط مکانیزمهای integrity قابل تشخیص باشد)
- عملیات رمزنگاری AF_ALG باید همیشه خروجی را در یک بافر جداگانه (out-of-place) قرار دهد، نه در صفحه منبع
- فراخوانی سیستمی ()splice و سایر فراخوانیهای مرتبط با page-cache باید اعتبارسنجیهای سختگیرانهتری روی صفحات قابل نوشتن داشته باشند
- اصل کمترین دسترسی (Least Privilege) باید رعایت شود – حتی در سطح کرنل، دستکاری مستقیم page-cache فایلهای setuid باید ممنوع شود
راهکارها و کاهش ریسک (Mitigation / Patch Guidance)
اقدامات فوری برای کاهش ریسک:
- غیرفعال کردن پایدار ماژول algif_aead با دستورات زیر (تا زمان در دسترس بودن patch رسمی):
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null || true
توجه: این کار ماژول crypto AF_ALG را غیرفعال میکند و ممکن است برخی برنامهها (مانندopenssl) را تحت تأثیر قرار دهد.
- اگر ماژول در کرنل کامپایل شده باشد پارامتر بوت initcall_blacklist=algif_aead_init را به GRUB اضافه کنید.
- مسدودسازی دسترسیهای محلی غیرضروری به سیستم
اقدامات کوتاهمدت / میانمدت برای کاهش ریسک:
• پیگیری مداوم اطلاعیههای امنیتی توزیع خود و اعمال فوری patch کرنل پس از انتشار
• انجام اسکن کلیه سیستمهای لینوکس سازمان برای شناسایی نسخههای آسیبپذیر کرنل با لیست آسیبپذیر
• در کلاسترهای Kubernetes بهروزرسانی گرهها (node images) به نسخههای اصلاحشده (مثلاً AKS نسخههای v202604.13.0 و v202604.24.0)
• اعمال مکانیزمهای امنیتی اضافی SELinux، AppArmor (با قوانین مسدودسازی AF_ALG)، و eBPF-based runtime security
• آموزش تیمهای عملیاتی در خصوص خطرات این آسیبپذیری و نحوه تشخیص آن
• اجرای بازبینی لاگهای کرنل برای شناسایی بارگذاری مشکوک ماژول algif_aead
اقدامات بلندمدت برای کاهش ریسک:
- استقرار راهکارهای خودکار بهروزرسانی امنیتی
- پیادهسازی فرآیندهای منظم تست نفوذ (با سناریوی افزایش سطح دسترسی محلی) برای ارزیابی وضعیت امنیتی سیستمها
- تدوین و اجرای سیاستهای هاردنینگ کرنل لینوکس بر اساس راهنمای CIS Benchmarks
- استفاده از ابزارهای تحلیل امنیتی Container runtime (مانند kube-bench، trivy و falco) برای شناسایی پیکربندیهای ناامن در کانتینرها (از جمله سوکت AF_ALG باز)
- طراحی زیرساخت به گونهای که کاربران عادی هرگز دسترسی مستقیم به شل سرورهای حیاتی نداشته باشند (استفاده از jump servers و جلسات ضبطشده)
تشخیص و مانیتورینگ (Detection & Monitoring)
نشانههای تلاش برای سوءاستفاده:
- بارگذاری ماژول algif_aead در سیستمهایی که قبلاً وجود نداشته
- ایجاد سوکت از نوع AF_ALG (پروتکل 38) توسط فرآیندهای کاربر عادی
- استفاده غیرعادی از فراخوان سیستمی ()splice همراه با فایلهای setuid
- اجرای مکرر باینریهای setuid (مانند su، sudo و یا pkexec) توسط کاربران عادی در مدت زمان کوتاه
- تغییر در رفتار باینریهای setuid بدون تغییر روی دیسک
- در محیطهای کانتینری، خروج فرآیند از کانتینر به میزبان (container escape) یا دسترسی غیرمجاز به فایلهای سیستمی میزبان
منابع پیشنهادی برای مانیتورینگ و پایش:
- لاگهای کرنل (dmesg و /var/log/kern.log) برای رویدادهای بارگذاری ماژول algif_aead
- خروجی lsmod (برای تشخیص بارگذاری ناگهانی ماژول)
- ابزار auditd با قوانین اختصاصی برای نظارت بر فراخوانی ()socket با خانواده ی AF_ALG
- سیستمهای SIEM برای جمعآوری و تحلیل مرکزی لاگهای احراز هویت و اجرای فرمان
- راهکارهایSentinelOne، CrowdStrike و یا EDR که قابلیت شناسایی الگوهای افزایش سطح دسترسی محلی را دارند
- ابزارهای نظارت بر یکپارچگی فایل (FIM) با قابلیت شناسایی تغییرات in-memory (بسیاری از FIMهای سنتی تغییر روی دیسک را بررسی میکنند که در اینجا رخ نمیدهد – نیاز به راهکارهای پیشرفته دارد)
- راهکارهای Runtime Security مانند Falco (با قوانین اختصاصی برای سوکت AF_ALG)
- ابزارهای اسکن آسیبپذیری مانند Nessus، Qualys، یا OpenVAS با قالب CVE-2026-31431
واکنش به حادثه (Incident Response)
- ایزولهسازی فوری سیستم آلوده از شبکه برای جلوگیری از حرکت جانبی مهاجم (که اکنون دسترسی root دارد)
- جمعآوری و حفظ لاگهای کرنل، لاگهای احراز هویت (var/log/auth.log، /var/log/secure)، لاگهای فرمان (var/log/bash.log در صورت فعال بودن) و ترافیک شبکه
- بررسی لیست ماژولهای بارگذاریشده (lsmod) و وجود algif_aead
- بررسی پراسسهای در حال اجرا با دسترسی root که غیرعادی هستند
- حذف هرگونه بکدور، cron job مخرب، یا SSH key اضافهشده توسط مهاجم
- بازنشانی رمز عبور تمام کاربران (چون مهاجم با دسترسی root میتوانسته هش پسوردها را استخراج کند)
- اعمال patch کرنل (یا حداقل mitigations موقت) قبل از بازگرداندن سیستم به شبکه
- اسکن کامل سیستم با آنتیویروس/EDR برای شناسایی بدافزارهای احتمالی
- مستندسازی کامل حادثه
جریان حمله (Attack Flow)
در نمودار زیر (شکل ۱)، جریان کلی بهرهبرداری از این آسیبپذیری برای افزایش سطح دسترسی از کاربر معمولی به root نشان داده شده است. در این سناریو، مهاجم ابتدا دسترسی محلی (مثلاً از طریق SSH) دارد، سپس با اجرای یک اسکریپت 732 بایتی، 4 بایت در page-cache فایل usr/bin/su را تغییر داده و هنگام اجرای مجدد آن، شل root دریافت میکند.

شکل 1: جریان اجرای آسیب پذیری
اثبات مفهوم (PoC) — کاملاً غیرمخرب
آزمایشگاه تخصصی Vulnerbyte، این آسیبپذیری را در محیط ایزوله و کنترلشده با استفاده از نسخه آسیبپذیر بررسی و اجرا کرده است
- یک سیستم لینوکسی با ماژول algif_aead
- اسکریپت پایتون اجرا می شود و یک شل root باز می کند
- این اثبات مفهوم صرفاً توصیفی و آموزشی بوده و شامل تغییرات مخرب نمیشود

شکل 2: اجرای POC
رفع مسئولیت
این گزارش صرفاً با هدف آموزش، تحلیل فنی و ارتقای امنیت سازمانی تهیه شده است. هرگونه استفاده مخرب یا خارج از چارچوبهای قانونی از محتوای آن ممنوع است.
منابع
https://www.cve.org/CVERecord?id=CVE-2026-31431
https://nvd.nist.gov/vuln/detail/CVE-2026-31431
https://cwe.mitre.org/data/definitions/669.html
https://cwe.mitre.org/data/definitions/125.html
https://cwe.mitre.org/data/definitions/200.html
https://github.com/cleozi/Copy_Grail
Linux Kernel (algif_aead)
CVE-2026-31431 – Page Cache Write via AF_ALG Leading to Local Privilege Escalation
Affects
- Linux Kernel
- Versions:
- All versions from 4.17 up to but not including patched versions (approximately 2017 – mid 2026)
- Components:
algif_aeadkernel module (AF_ALG cryptographic API)- In-place optimization introduced in commit
72548b093ee3
- Files:
crypto/algif_aead.c
- Functions:
aead_sendmsg()aead_recvmsg()
Description
CVE-2026-31431 is a local privilege escalation vulnerability in the Linux kernel’s AF_ALG cryptographic interface.
The algif_aead module allows unprivileged users to perform authenticated encryption (AEAD) operations. A performance optimization added in 2017 (commit 72548b093ee3) introduced a critical flaw: it allows in-place writes to page cache pages without marking them as dirty.
The issue arises because:
- The optimization permits pages from the page cache to be used as destinations for cryptographic operations,
- These pages are never marked as dirty, so changes are never written to disk,
- This allows an attacker to modify a setuid binary’s in-memory page cache without altering the underlying file,
- The modification (as little as 4 bytes) is enough to hijack execution flow.
A local attacker can chain the following syscalls to exploit this vulnerability:
- Create an
AF_ALGsocket with an AEAD algorithm (e.g.,gcm(aes)), - Create a
memfdor open a setuid binary, - Use
splice()to feed the binary’s page cache page as input/output, - Perform an AEAD operation that writes 4 controlled bytes into the page cache page,
- Execute the setuid binary – the kernel loads the corrupted page cache, and the attacker’s code executes with root privileges.
This results in arbitrary 4-byte write to any page cache page, allowing attackers to:
- Modify a setuid binary’s instructions (e.g., patch a
callorjmp), - Execute arbitrary code with root privileges,
- Bypass traditional file integrity monitoring (since the disk file remains unchanged).
Attack Vector
Primary Attack Vector:
Local / Pre‑authentication (requires shell access as unprivileged user)
Attack Scenario:
- An attacker has local access to a vulnerable Linux system (e.g., via SSH as a low-privilege user, a webshell, or a compromised container).
- The attacker identifies a setuid binary (e.g.,
/usr/bin/su,/usr/bin/sudo,/usr/bin/pkexec). - The attacker uses
socket(AF_ALG, ...)to open an AEAD algorithm (e.g.,gcm(aes)). - Using
splice(), the attacker maps the target page of the setuid binary into the cryptographic operation. - The attacker sends a crafted AEAD operation that writes exactly 4 bytes into the page cache page.
- The attacker executes the setuid binary normally.
- The 4-byte modification alters the binary’s control flow, causing it to execute attacker-controlled code (e.g.,
execve("/bin/sh")) with root privileges. - The attacker gains a full root shell.
Key Characteristics:
- No authentication required beyond local access.
- No user interaction required beyond having a shell.
- Reliability is high (race condition not required).
- Public PoC exists (732‑byte Python script).
Conditions Increasing Risk:
- Presence of setuid binaries (nearly all Linux systems).
algif_aeadmodule loaded or compiled into kernel (default in many distributions).- Unpatched kernel (4.17 through mid‑2026).
- Container environments sharing the host kernel.
Impact
Successful exploitation allows:
- Local privilege escalation from unprivileged user to root,
- Complete system compromise,
- Persistence (root backdoors, SSH key planting),
- Disabling security controls (SELinux, AppArmor, auditd),
- Container escape (if exploited from inside a container),
- Data theft or ransomware deployment.
This represents a complete host takeover risk.
Observed Exploitation & Threat Activity
- No confirmed widespread exploitation at disclosure (mid 2026).
- High likelihood of rapid exploitation due to:
- trivial exploitation (public Python PoC available),
- local access only (not remote – but often chained with remote exploits),
- root-level impact,
- kernel patch not yet widely deployed.
Note: While this is a local vulnerability, it is frequently chained with:
- Remote Code Execution (RCE) in web applications,
- Container breakout primitives,
- Supply chain compromise (malicious packages).
Severity & Metrics
- CVSS v3.1: High (7.8)
- Attack Vector: Local
- Privileges Required: Low
- User Interaction: None
Relevant CWE:
- CWE-669 – Incorrect Resource Transfer Between Spheres
- CWE-125 – Out-of-bounds Read (in some related paths)
- CWE-787 – Out-of-bounds Write
- CWE-200 – Exposure of Sensitive Information to an Unauthorized Actor
Patch & Vendor Status
- No official patch available at time of publication (expected mid‑2026).
- Mitigation guidance available (see below).
Distribution status:
- Ubuntu: 22.04, 23.04, 23.10, 24.04 – vulnerable. Workaround via
algif_aeadblacklist. - Red Hat / CentOS / Rocky / Alma: All versions with kernel 4.17+ – vulnerable.
- Debian: Bookworm (6.1+), Trixie (6.6+) – vulnerable.
- Amazon Linux 2023 / 2026: Kernel 6.17+ – vulnerable.
- Alpine Linux: Not affected (does not enable
CONFIG_CRYPTO_USER_API_AEADby default).
Mitigation & Remediation
Immediate Actions
1. Disable the algif_aead module (if loadable):
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null || true
2. If the module is compiled into the kernel (non-removable), add the following to kernel command line (GRUB):
initcall_blacklist=algif_aead_init
Then reboot.
3. For container environments (Kubernetes, Docker, containerd):
Apply a seccomp profile that blocks socket(AF_ALG, ...) (protocol 38):
{
"names": ["socket"],
"args": [{"index": 0, "value": 38, "op": "Equal"}]
}
4. Limit local access:
Restrict SSH access to trusted IPs using firewall rules. Use jump hosts for administrative access.
5. Monitor for suspicious socket creation:
Watch for processes creating AF_ALG sockets (protocol 38).
Defensive Measures
- Upgrade kernel as soon as a patch is released – this is the only complete fix.
- Remove setuid flags from binaries that do not require them:
sudo chmod u-s /usr/bin/su(be careful – this may impact functionality). - Use SELinux or AppArmor to restrict which processes can access
AF_ALGsockets. - Deploy eBPF‑based runtime security (e.g., Falco, Tetragon) to detect
AF_ALGsocket creation. - In Kubernetes: Use Pod Security Standards and block privileged containers.
- Regularly image and patch host nodes.
Detection & Hunting
Indicators of Attempted Exploitation:
- Unexpected loading of
algif_aeadmodule on systems where it was not previously loaded. - Presence of
AF_ALGsockets (protocol 38) opened by low‑privileged processes:lsof | grep AF_ALG - Frequent execution of setuid binaries (
/usr/bin/su,/usr/bin/sudo) by non‑admin users. - Unusual core dumps or segmentation faults from setuid binaries.
- EBPF or audit logs showing
socket(AF_ALG, ...)calls from unexpected processes. - In container environments: processes inside containers attempting to create
AF_ALGsockets (should be blocked by seccomp).
Log Analysis Commands:
# Check for algif_aead module load
dmesg | grep algif_aead
lsmod | grep algif_aead
# Check for AF_ALG sockets
lsof -n | grep AF_ALG
ss -A 'unix' | grep ALG
# Auditd rule for AF_ALG socket creation
auditctl -a always,exit -F arch=b64 -S socket -F a0=38 -k AF_ALG_socket
Falco rule example:
- rule: AF_ALG Socket Created by Unprivileged Process
desc: Detect AF_ALG socket (protocol 38) creation
condition: evt.type = socket and evt.args contains "AF_ALG"
output: AF_ALG socket created by process (proc.name=%proc.name)
priority: WARNING
Post-Incident Response
If exploitation is suspected:
- Isolate affected system from the network immediately (assume root compromise).
- Preserve forensic evidence – collect memory dump, kernel logs,
lsofoutput, module lists, andaudit.log. - Do not reboot before memory capture (volatile evidence may be lost).
- Rotate all credentials and keys stored on the compromised system (SSH keys, API tokens, passwords).
- Audit system for backdoors:
- Check
/etc/crontab, user crontabs,systemdservices, - Check for unauthorized SSH keys in
/root/.ssh/authorized_keys, - Check for suspicious SUID binaries (
find / -perm -4000 -type f), - Check for kernel module persistence (
/etc/modules-load.d/,/etc/modprobe.d/).
- Check
- Assume full compromise – do not simply change passwords. Rebuild the system from a trusted backup or clean installation after forensic extraction.
- If exploited in a container environment:
- Quarantine the container image and any images based on it,
- Scan container registries for malicious layers,
- Review Kubernetes audit logs for suspicious
execcommands.
References
- CVE Record: CVE-2026-31431 (when published)
- NVD Entry: N/A – awaiting analysis
- CWE-669: Incorrect Resource Transfer Between Spheres
- CWE-125: Out-of-bounds Read
- CWE-787: Out-of-bounds Write
- LWN Article: “The algif_aead vulnerability” (coming soon)
- GitHub PoC:
linux-kernel-cve-2026-31431-poc(public – 732-byte Python script) - Theori.io Research: “Copy Fail – Kernel Privilege Escalation via Page Cache Manipulation”
- Security mailing lists: Full disclosure (April 2026)
Disclaimer: This report is provided for educational and defensive purposes only. Proof-of-concept code exists publicly. Use this information to patch and protect your systems, not for malicious purposes.