CVEهای Regexp در Ruby: بهروزرسانیهای alt-ruby برای CloudLinux (CVE-2026-97229 و 3 مورد دیگر)

Ruby در نسخههای 4.0.9، 3.4.12 و 3.3.13 که 23 اکتبر 2026 منتشر شدند، چهار باگ تخریب حافظه را در موتور عبارات منظم (regular expression) خود برطرف کرد. مهاجم فقط وقتی به این باگها میرسد که برنامه عبارت منظمی را از متنی کامپایل کند که در اختیار مهاجم است. GitLab نشان داد که این مسئله روی سرورهای GitLab به اجرای کد از راه دور میانجامد و برای CVE-2026-97229 یک اثبات مفهوم (PoC) عمومی هم وجود دارد. تا امروز هیچ سوءاستفادهی فعالی از آن در دنیای واقعی شناخته نشده است.
- نسخههای متأثر: اطلاعیهی امنیتی Ruby فقط از Ruby 3.3، 3.4 و 4.0 نام میبرد و دربارهی شاخههای قدیمیتر چیزی نمیگوید. در CloudLinux، بستههای alt-ruby مربوط به Ruby Selector و ea-ruby27-ruby (cPanel) درگیر این مشکلاند. بخش کدام نسخهها آسیبپذیرند؟ را ببینید.
- راهکار کاهش خطر: عبارات منظم را از ورودیهای نامطمئن کامپایل نکنید. Regexp.timeout جلوی این مشکل را نمیگیرد و محدودکردن طول الگو هم محافظت قابلاتکایی نیست. بخش آیا راهکاری برای کاهش خطر وجود دارد؟ را ببینید.
- وضعیت اصلاحیه: بستههای اصلاحشده در مخازن پایدار قرار گرفتهاند: alt-ruby26، 27، 30، 31، 32، 33، 34، 35 و 40 روی CloudLinux 7، 8 و 9؛ ea-ruby27-ruby روی EasyApache 4 (CloudLinux 7 و 8)؛ و alt-ruby27، 30، 31، 32، 33، 34، 35 و 40 روی CloudLinux for Ubuntu 22.04؛ بستههای TuxCare هم منتشر شدهاند. alt-ruby18 تا alt-ruby25 پشتیبانی نمیشوند و اصلاحیهای نمیگیرند. CloudLinux برای Ubuntu 24.04 بستهی alt-ruby منتشر نمیکند؛ اما بستههای alt-ruby ارائهشدهی TuxCare برای Ubuntu 24.04 این اصلاحیه را دارند. Ruby سیستمی نسخههای 3.3 و 4.0 که از بستهی سیستمعامل نصب میشود، هنوز اصلاحیه ندارد. بخش دستورالعمل بهروزرسانی را ببینید.
- راستیآزمایی: نسخهی انتشار بستهی نصبشده را با جدول بخش چگونه راستیآزمایی کنیم مقایسه کنید. در شاخههایی که اصلاحیه به آنها بکپورت شده، نسخهی Ruby عوض نمیشود؛ پس ruby --version نشان نمیدهد اصلاح شدهاند یا نه.
- صفحهی وضعیت: برای اطلاعیههای انتشار، رخداد ثبتشده در صفحهی وضعیت CloudLinux را دنبال کنید.
Ruby در 23 اکتبر 2026 برای چهار آسیبپذیری موتور عبارات منظم اصلاحیه منتشر کرد. GitLab پیشتر این آسیبپذیریها را در انتشارهای امنیتی خود گزارش کرده بود: CVE-2026-89078، CVE-2026-93577، CVE-2026-97229 و CVE-2026-110264. شناسههای CVE را GitLab اختصاص داده است. Ruby برای این اصلاحیهها شناسهی جداگانهای نگرفته؛ برای همین اطلاعیهی Ruby به همان CVEهای GitLab ارجاع میدهد.
Ruby این مشکلات را فقط در نسخههای 4.0.9، 3.4.12 و 3.3.13 برطرف کرد. CloudLinux، Ruby را با Ruby Selector و در قالب بستههای alt-ruby در اختیار حسابهای میزبانی میگذارد. پس اصلاحیهای که در ruby-lang.org منتشر شده، فقط وقتی به حسابهای شما میرسد که ما بستهها را دوباره بسازیم و شما نصبشان کنید. برای شاخههایی که توسعهدهندگان اصلی دیگر نگهداریشان نمیکنند، CloudLinux اصلاحیهها را بکپورت کرده است.
صفحهی وضعیت.
اطلاعیههای انتشار مربوط به این مشکل در رخداد ثبتشده در صفحهی وضعیت CloudLinux منتشر میشوند. برای باخبر شدن از تغییرات، در صفحهی وضعیت مشترک شوید.
چرا این موضوع در میزبانی اشتراکی مهم است
روی سرور اشتراکی، نسخهی Ruby را برنامهی هر حساب تعیین میکند، نه شما. برنامه فقط وقتی در خطر است که عبارت منظم را از متنی بسازد که کس دیگری میفرستد؛ مثلاً جستوجو یا فیلتری که ورودی کاربر را الگو قرار میدهد. برنامههایی که فقط الگوهای ثابت خودشان را به کار میبرند، آسیبی نمیبینند.
از سمت سرور نمیشود فهمید کدام برنامهها چنین کاری میکنند؛ پس راه عملی، بهروزرسانی مفسر است. این باگها وقتی Ruby الگو را کامپایل میکند، حافظه را تخریب میکنند. GitLab نشان داد که با این کار میشود روی سرورهای GitLab کد را از راه دور اجرا کرد.
کدام نسخهها آسیبپذیرند؟
اطلاعیهی Ruby از شاخههای 3.3، 3.4 و 4.0 نام میبرد و روشن نمیکند که شاخههای قدیمیتر هم آسیبپذیرند یا نه. به همین دلیل CloudLinux اصلاحیهها را به شاخههای قدیمیتری که خودش ارائه میکند هم بکپورت کرده است. وضعیت هر بسته را در جدول زیر میبینید.
| بسته | آسیبپذیر | وضعیت |
|---|---|---|
| alt-ruby33, alt-ruby34, alt-ruby40 Ruby 3.3، 3.4، 4.0؛ اصلاحشده در نسخهی اصلی در 3.3.13، 3.4.12 و 4.0.9 |
❌ بله | ✅ منتشرشده برای CloudLinux 7، 8 و 9 ✅ منتشرشده برای CloudLinux for Ubuntu 22.04 |
| alt-ruby26, 27, 30, 31, 32 Ruby 2.6، 2.7، 3.0، 3.1، 3.2؛ پایان عمر در نسخهی اصلی |
❌ بله، CloudLinux اصلاحیه را بکپورت کرده است. CVE-2026-89078 این شاخهها را شامل نمیشود | ✅ منتشرشده برای CloudLinux 7، 8 و 9 ✅ alt-ruby27، 30، 31 و 32 برای CloudLinux for Ubuntu 22.04 منتشر شدهاند |
| alt-ruby35 نسخهی پیشنمایش Ruby 3.5.0؛ بدون انتشار اصلاحیه در نسخهی اصلی |
❌ بله، CloudLinux اصلاحیه را بکپورت کرده است | ✅ منتشرشده برای CloudLinux 7، 8 و 9 ✅ منتشرشده برای CloudLinux for Ubuntu 22.04 |
| ea-ruby27-ruby (cPanel، EasyApache 4) | ❌ بله، CloudLinux اصلاحیه را بکپورت کرده است. CVE-2026-89078 این شاخه را شامل نمیشود | ✅ منتشرشده برای CloudLinux 7 و 8 |
| alt-ruby19 تا alt-ruby25 | ❌ بله | ℹ️ پشتیبانی نمیشود و اصلاحیه ندارد. یادداشت زیر جدول را ببینید |
| Ruby سیستمی از بستهی سیستمعامل (CloudLinux 10 و module streamهای CloudLinux 8 و 9) | ❌ بله برای Ruby 3.3 و 4.0، طبق اطلاعیهی Ruby | ⏳ هنوز اصلاحیهای منتشر نشده است؛ باید منتظر بیلد اصلاحشدهی فروشندهی سیستمعامل بود |
Ubuntu 24.04: CloudLinux برای Ubuntu 24.04 بستهی alt-ruby منتشر نمیکند، چون بستههای CloudLinux فقط برای Ubuntu 22.04 عرضه میشوند. بستههای alt-ruby ارائهشدهی TuxCare برای Ubuntu 24.04 با اصلاحیه در دسترساند: alt-ruby27، 30، 31، 32، 33، 34، 35 و 40؛ برای مثال alt-ruby33 3.3.13-15، alt-ruby34 3.4.12-14 و alt-ruby40 4.0.9-9.
alt-ruby18 تا alt-ruby25 پشتیبانی نمیشوند و هیچ اصلاحیهی امنیتی، از جمله برای این CVEها، نمیگیرند. CloudLinux از alt-ruby26 به بعد پشتیبانی میکند و TuxCare ELS for Ruby هم نسخههای 2.6 تا 4.0 را پوشش میدهد. اگر برنامهای روی alt-ruby19 تا alt-ruby25 دارید، آن را به یکی از نسخههای پشتیبانیشدهی alt-ruby در جدول بالا منتقل کنید.
Ruby سیستمی مفسری است که همراه سیستمعامل میآید، نه بستهی Ruby Selector. CloudLinux هم آن را نمیسازد. TuxCare Extended Lifecycle Support (ELS) بیلدهای اصلاحشدهی Ruby بومی را برای CentOS 7، RHEL 7، Oracle Linux 7، CloudLinux 7 ELS، Amazon Linux 2، AlmaLinux 9.2 ESU، TuxCare 9.6 ESU، TuxCare 9.8 ESU، Alpine 3.18، Ubuntu 16.04، 18.04 و 20.04 و Debian 10 و 11 منتشر کرده است.
آیا راهکاری برای کاهش خطر وجود دارد؟
بله، اما محدود. اگر هنوز نمیتوانید بهروزرسانی کنید، عبارات منظم را از ورودیهای نامطمئن کامپایل نکنید. در Ruby یعنی Regexp.new، Regexp.compile، Regexp.union و درج متغیر مثل /#{input}/، هر جا ورودی از کاربر، یک درخواست یا هر منبع دیگری بیاید که در اختیار شما نیست.
دو روش دفاعی رایج اینجا کمکی نمیکنند. Regexp.timeout بیاثر است، چون باگها هنگام کامپایل رخ میدهند، نه هنگام تطبیق. محدودکردن طول الگو هم محافظت قابلاتکایی نیست.
این کار خطر را کمتر میکند، اما از بین نمیبرد. راهحل اصلی، نصب بستهی بهروزشده است.
دستورالعمل بهروزرسانی
بستههای اصلاحشده در مخازن پایدارند؛ پس لازم نیست سراغ کانال آزمایشی بروید.
بهروزرسانی: 2026-10-26 12:59 UTC.
بستههای اصلاحشده حالا برای مشتریان TuxCare هم منتشر شدهاند. بستههای alt-ruby در repo.alt.tuxcare.com در دسترساند و بستهی Ruby بومی تحت TuxCare ELS و ESU روی سیستمهای فهرستشده در بالا اصلاح شده است. بیلد فعلی alt-ruby27 برای CloudLinux 7، 8 و 9 نسخهی 2.7.8-152 است که اصلاحیهی نسخهی 2.7.8-151 را هم دارد. پس از بهروزرسانی، برنامههای Ruby را دوباره راهاندازی کنید.
بهروزرسانی: 2026-10-24 03:30 UTC.
بستههای اصلاحشده در مخازن پایدار در دسترساند:
- CloudLinux 7، 8 و 9: alt-ruby26 2.6.10-20، alt-ruby27 2.7.8-151، alt-ruby30 3.0.7-175، alt-ruby31 3.1.7-15، alt-ruby32 3.2.11-16، alt-ruby33 3.3.13-14، alt-ruby34 3.4.12-13، alt-ruby35 3.5.0-0.6.preview1 و alt-ruby40 4.0.9-8.
- CloudLinux for Ubuntu 22.04: alt-ruby27 2.7.8-11، alt-ruby30 3.0.7-177، alt-ruby31 3.1.7-15، alt-ruby32 3.2.11-16، alt-ruby33 3.3.13-15، alt-ruby34 3.4.12-14، alt-ruby35 3.5.0~preview1-7 و alt-ruby40 4.0.9-9.
- EasyApache 4: ea-ruby27-ruby 2.7.8-6.el7.cloudlinux.1 (CloudLinux 7) و 2.7.8-6.el8.cloudlinux.1 (CloudLinux 8).
روی CloudLinux 7، 8 و 9 (از جمله EasyApache 4):
# See which Ruby packages are installed
rpm -qa 'alt-ruby*' 'ea-ruby27-ruby'
# Update them
yum update 'alt-ruby*' 'ea-ruby27*'
روی CloudLinux for Ubuntu 22.04:
dpkg-query -W 'alt-ruby*'
apt-get update
apt-get install --only-upgrade 'alt-ruby*'
برنامههای در حال اجرا تا ریاستارت، همان مفسر قدیمی را به کار میبرند. پس از بهروزرسانی، برنامههای Ruby هر حساب را دوباره راهاندازی کنید. برای ریاستارت یک برنامه، این دستور را اجرا کنید؛ اثرش حدود 10 ثانیه بعد اعمال میشود.
selectorctl --interpreter=ruby --user=USER --restart-webapp APP_DIR
این دستور فقط روی یک برنامه اثر دارد. برای کل سرور، بهجای آن Apache را دوباره راهاندازی کنید که روی همهی سرور اعمال میشود.
apachectl -k graceful
# or, on cPanel:
/scripts/restartsrv_httpd
برای بستههای alt-ruby و ea-ruby27-ruby، CageFS کار اضافهای لازم ندارد. برای Ruby سیستمی، cagefsctl --force-update را اجرا کنید.
چطور مطمئن شویم وصله اعمال شده است
نسخهی انتشار بستهی نصبشده را با حداقل نسخهی اصلاحشده در جدول زیر مقایسه کنید.
# CloudLinux 7, 8, 9
rpm -q alt-ruby33
# CloudLinux for Ubuntu 22.04
dpkg-query -W alt-ruby33
| بسته | حداقل نسخهی اصلاحشده، CloudLinux 7، 8، 9 | حداقل نسخهی اصلاحشده، Ubuntu 22.04 |
|---|---|---|
| alt-ruby26 | 2.6.10-20 | ارائه نمیشود |
| alt-ruby27 | 2.7.8-151 | 2.7.8-11 |
| alt-ruby30 | 3.0.7-175 | 3.0.7-177 |
| alt-ruby31 | 3.1.7-15 | 3.1.7-15 |
| alt-ruby32 | 3.2.11-16 | 3.2.11-16 |
| alt-ruby33 | 3.3.13-14 | 3.3.13-15 |
| alt-ruby34 | 3.4.12-13 | 3.4.12-14 |
| alt-ruby35 | 3.5.0-0.6.preview1 | 3.5.0~preview1-7 |
| alt-ruby40 | 4.0.9-8 | 4.0.9-9 |
| ea-ruby27-ruby (EasyApache 4) | 2.7.8-6.el7.cloudlinux.1 (CloudLinux 7)، 2.7.8-6.el8.cloudlinux.1 (CloudLinux 8) | ارائه نمیشود |
اگر بسته در نسخهی ذکرشده یا بالاتر باشد، اصلاح شده است. برای مثال، مخازن CloudLinux 8 و 9 الان alt-ruby27 2.7.8-152 را دارند که از حداقل نسخه جدیدتر است. changelog همهی بستهها نام CVEها را نمیآورد. برای alt-ruby33، alt-ruby34 و alt-ruby40، راه دوم بررسی نسخهی Ruby است: 3.3.13، 3.4.12 و 4.0.9 یا بالاتر. در شاخههای بکپورتشده نسخهی Ruby عوض نمیشود؛ پس ملاک را نسخهی انتشار بسته بگذارید.
ادامهی این اطلاعیه پیشزمینهای است برای خوانندگان علاقهمند: باگها چطور کار میکنند و این چهار CVE چه ربطی به هم دارند. برای اعمال بهروزرسانی بالا به هیچکدام نیازی نیست.
این چهار CVE چه هستند
هر چهار مورد در موتور عبارات منظم Ruby (Onigmo) هستند. GitLab نشان داد که یک الگوی دستکاریشده میتواند هنگام کامپایل در Ruby حافظه را تخریب کند. روی سرورهای GitLab، که کاربران میتوانند الگوهای خودشان را بفرستند، از این مسئله برای اجرای کد از راه دور استفاده میشود.
| CVE | باگ در Ruby | نخستین نسخهی اصلاحشده: 4.0 / 3.4 / 3.3 |
|---|---|---|
| CVE-2026-89078 | آزادسازی دوباره (double free) وقتی تجزیهی الگو بعد از یک alternation شکست بخورد | 4.0.0 / 3.4.12 / 3.3.13 |
| CVE-2026-93577, CVE-2026-97229 | سرریز عدد صحیح در اندازهی الگوی کامپایلشده | 4.0.8 / 3.4.12 / 3.3.13 |
| CVE-2026-110264 | سرریز شناسههای داخلی در الگویی با تکرارهای زیاد | 4.0.9 / 3.4.12 / 3.3.13 |
CVE-2026-89078 شامل شاخههای قدیمیتر از Ruby 3.3 (alt-ruby26، 27، 30، 31، 32 و ea-ruby27-ruby) نمیشود، چون کدی که این CVE اصلاحش میکند در Ruby 3.3 اضافه شده است.
شدت و افشا
GitLab این CVEها را بین 23 سپتامبر و 22 اکتبر 2026 در انتشارهای وصلهی خود افشا کرد؛ پیش از آنکه Ruby اصلاحیهاش را منتشر کند. برای CVE-2026-97229 یک اثبات مفهوم عمومی وجود دارد (Rapid7 اجرای کد را بازتولید کرده و به یک مخزن لینک داده است). برای سه مورد دیگر چنین چیزی پیدا نشد. Rapid7 هیچ سوءاستفادهی تأییدشدهای از CVE-2026-97229 در دنیای واقعی گزارش نکرده و CISA هم در هر چهار رکورد CVE عبارت «Exploitation: none» را ثبت کرده است.
GitLab در نقش CNA، به این CVEها امتیاز 9.9 تا 10.0 (CVSS 3.1، بحرانی) داده است. این امتیازها مربوط به GitLab بهعنوان یک محصولاند، نه Ruby؛ اطلاعیهی Ruby هیچ رتبهی شدتی اعلام نمیکند. Rapid7 یادآوری میکند که برای بهرهبرداری از CVE-2026-97229 روی GitLab، اول باید یک پیکربندی CI/CD جاگذاری شود؛ نکتهای که در رتبهی «بدون احراز هویت» دیده نشده است.
| CVE | CVSS 3.1 (GitLab) | مهاجم به گفتهی GitLab |
|---|---|---|
| CVE-2026-89078 | 9.9 | احرازهویتشده |
| CVE-2026-93577 | 9.9 | احرازهویتشده |
| CVE-2026-97229 | 10.0 | بدون احراز هویت |
| CVE-2026-110264 | 10.0 | بدون احراز هویت |
خط زمانی
- 2026-10-26 12:59 UTC: بستههای اصلاحشده برای مشتریان TuxCare هم منتشر شد (بخش دستورالعمل بهروزرسانی را ببینید).
- 2026-10-24 03:30 UTC: بستههای اصلاحشده در مخازن پایدار در دسترس قرار گرفتند (بخش دستورالعمل بهروزرسانی را ببینید).
- 2026-10-23 18:48 UTC: اولین پست وضعیت. Ruby 4.0.9، 3.4.12 و 3.3.13 در مخزن اصلی منتشر شده بودند و CloudLinux مشغول بازسازی alt-ruby33، alt-ruby34 و alt-ruby40 و بکپورت اصلاحیهها به شاخههای قدیمیتر بود. آن زمان هنوز هیچ بستهای از CloudLinux منتشر نشده بود.
منابع
- Ruby: اصلاحات کامپایل Regexp مرتبط با CVE-2026-89078، CVE-2026-93577، CVE-2026-97229 و CVE-2026-110264 که GitLab گزارش کرده بود
- Rapid7: CVE-2026-97229، اجرای کد از راه دور بدون احراز هویت در GitLab
- انتشار وصلهی GitLab 19.4.1 و انتشار وصلهی GitLab 19.5.1
- شاخههای Ruby و تاریخهای پایان عمر
- رخداد ثبتشده در صفحهی وضعیت CloudLinux
- به کمک نیاز دارید؟ با پشتیبانی CloudLinux تماس بگیرید
منبع: Ruby Regexp CVEs: alt-ruby Updates for CloudLinux (CVE-2026-97229 and 3 Others)، CloudLinux Blog


