GLOS · واژه‌نامه سرنام بحرانی

RCE — اجرای کد از راه دور

Remote Code Execution

اجرای کد از راه دور (RCE) شدیدترین دسته‌ی آسیب‌پذیری وب است: مهاجم موفق می‌شود کد یا دستور دلخواه خود را روی سرور هدف اجرا کند و عملاً کنترل ماشین را به دست بگیرد.

تیم فنی پی‌هانتر

RCE چیست و چرا بحرانی‌ترین یافته است؟

اجرای کد از راه دور (Remote Code Execution) یعنی مهاجم بتواند کدِ خودش را روی سرورِ هدف به اجرا درآورد، بدون آنکه دسترسی فیزیکی یا حساب معتبری داشته باشد. RCE تقریباً همیشه سقفِ شدت در گزارش تست نفوذ است، چون از آن نقطه به بعد مهاجم می‌تواند داده بخواند و تغییر دهد، سرویس را از کار بیندازد، به دیگر سامانه‌های شبکه حرکت جانبی کند و ماندگاری ایجاد کند.

نکته‌ی کلیدی این است که RCE معمولاً مقصد است، نه مسیر. آسیب‌پذیری‌های متفاوتی به آن ختم می‌شوند و شناخت این مسیرها برای دفاع مهم‌تر از خودِ مفهوم است. در امتیازدهیِ CVSS، یک RCEِ بدونِ احراز هویت و از راه شبکه، معمولاً امتیازِ بحرانی (نزدیک به ۱۰) می‌گیرد، چون هر سه بُعدِ محرمانگی، یکپارچگی و دسترس‌پذیری را هم‌زمان تهدید می‌کند.

مسیرهای رسیدن به RCE

به ترتیب فراوانی امروزی در برنامه‌های وب:

  • سوءاستفاده از CVE شناخته‌شده در اجزا: بزرگ‌ترین سبد امروز. کتابخانه، فریم‌ورک یا میدل‌ورِ وصله‌نشده — از خانواده‌ی Log4Shell تا Struts، Spring، Confluence و Jenkins. همین واقعیت است که چرا OWASP در ۲۰۲۵ «نقص‌های زنجیره‌ی تأمین نرم‌افزار» را به رتبه‌ی A03 آورد.
  • Deserialization ناامن: بازسازی شیء از داده‌ی تحت کنترل مهاجم که به زنجیره‌ی گجت و اجرای کد می‌رسد.
  • SSTI: تزریق به موتور قالب سمت سرور؛ چون موتورهای قالب به گراف اشیاء زبان دسترسی دارند، غالباً مستقیم به RCE ختم می‌شود.
  • تزریق دستور و تزریق آرگومان: رسیدن ورودی به مفسر فرمان سیستم‌عامل.
  • آپلود فایل بدون محدودیت: بارگذاری وب‌شل، یا آپلود در مسیری که مفسر آن را اجرا می‌کند.
  • تزریق SQL به سیستم‌عامل: از راه xp_cmdshell، COPY TO PROGRAM یا نوشتن فایل در ریشه‌ی وب.
باور غلط رایج

«RCE همیشه از یک باگ در کدِ خودمان می‌آید، پس اگر کدمان تمیز باشد در امانیم.» امروز بزرگ‌ترین سبب RCE در وب، CVE شناخته‌شده در کتابخانه‌ها و اجزای وصله‌نشده است، نه کدِ خودِ برنامه. به همین دلیل OWASP در ۲۰۲۵ دسته‌ی «نقص‌های زنجیره‌ی تأمین نرم‌افزار» را به رتبه‌ی A03 ارتقا داد. مدیریتِ وابستگی و وصله به‌اندازه‌ی کدِ امن اهمیت دارد.

سناریوی واقعی

یک پورتال سازمانی از یک کتابخانه‌ی سریال‌سازی جاوا برای نگهداری وضعیت کاربر در کوکی استفاده می‌کند. تستر با ابزار ysoserial یک زنجیره‌ی گجت می‌سازد که هنگام readObject اجرا می‌شود، آن را base64 می‌کند و در کوکی می‌گذارد. سرور کوکی را بازسازی می‌کند و در همان لحظه دستور مهاجم اجرا می‌شود. تستر با یک دستور بی‌ضرر (مثلاً درخواست DNS به Collaborator) وجود RCE را اثبات می‌کند — بدون آنکه سرویس را مختل کند یا داده‌ای بردارد. این تفاوت یک PoC مسئولانه با یک حمله‌ی واقعی است.

در سمتِ مهار، همین سناریو نشان می‌دهد چرا دفاعِ لایه‌ای مهم است: اگر حساب برنامه کم‌امتیاز اجرا می‌شد، اگر خروجیِ شبکه فیلتر بود و اگر ثبتِ رخداد کافی وجود داشت، همان RCE هم برد و اثرِ کمتری داشت و زودتر کشف می‌شد.

چگونه در تست نفوذ کشف و اثبات می‌شود

روال حرفه‌ای:

  • ابتدا اثرانگشت پشته: نسخه‌ی دقیق فریم‌ورک، سرور و کتابخانه‌ها را با شناسایی مشخص کنید و با پایگاه‌های CVE مطابقت دهید.
  • نقاطی که ورودی به مفسر، موتور قالب یا سریال‌سازی می‌رسد را جدا کنید.
  • برای متغیرهای کور، از تشخیص کانال‌جانبی (تأخیر زمانی، DNS به Collaborator) استفاده کنید — همان اصلی که در SSRF و تزریق دستور کور به کار می‌رود.
  • PoC را حداقلی و غیرمخرب نگه دارید؛ هدف اثبات اجرای کد است، نه بهره‌برداری کامل.

ابزارهایی مثل Nuclei برای تشخیص CVEهای شناخته‌شده و Metasploit برای بهره‌برداری از CVE پشته به کار می‌آیند، اما بخش زیادی از کشف RCE هنوز کار دستی است.

نمونه‌ی فنی

الگوی مفهومیِ کشف تزریق دستورِ کور با تأخیر زمانی — نه یک اکسپلویت کامل:

GET /ping?host=127.0.0.1;sleep+10 HTTP/1.1
Host: app.example.com

اگر پاسخ حدود ۱۰ ثانیه دیرتر بیاید، احتمال اجرای فرمان جدی است و باید با اثبات کانال‌جانبی تأیید شود.

ارتباط با OWASP و CWE

RCE یک دسته‌ی مستقل OWASP نیست بلکه پیامد چند دسته است: A05:2025 تزریق (تزریق دستور، CWE-94 تزریق کد)، A08 نقص یکپارچگی (Deserialization، CWE-502)، و A03 نقص‌های زنجیره‌ی تأمین (CVE اجزا). در CWE Top 25 سال ۲۰۲۵، CWE-94 در رتبه‌ی ۱۰ و CWE-78 (تزریق دستور سیستم‌عامل) در رتبه‌ی ۹ قرار دارند.

پرسش‌های متداول

تفاوت RCE با تزریق دستور چیست؟

تزریق دستور یکی از مسیرهای رسیدن به RCE است. RCE مفهوم عام‌ترِ «اجرای کد دلخواه روی سرور» است که می‌تواند از تزریق دستور، Deserialization، SSTI، آپلود فایل یا CVE اجزا حاصل شود.

شدیدترین پیامد RCE چیست؟

کنترل کامل سرور: خواندن و تغییر داده، ماندگاری، و حرکت جانبی به دیگر سامانه‌های شبکه. به همین دلیل RCE تقریباً همیشه با شدت Critical در CVSS امتیازدهی می‌شود.

امروز رایج‌ترین علت RCE در وب چیست؟

سوءاستفاده از CVE شناخته‌شده در کتابخانه‌ها و اجزای وصله‌نشده. همین واقعیت باعث شد OWASP در ۲۰۲۵ دسته‌ی «نقص‌های زنجیره‌ی تأمین نرم‌افزار» را به رتبه‌ی A03 ارتقا دهد.

پیشگیری / رفع

مهار و پیشگیری، لایه‌به‌لایه:

  • مدیریت وصله و وابستگی: چون بزرگ‌ترین سبب RCE امروز، CVE اجزاست، SBOM و به‌روزرسانی منظم مهم‌ترین اقدام است.
  • هرگز داده‌ی نامعتمد را deserialize نکنید؛ از فرمت‌های داده‌محور با نگاشت اسکیمای صریح استفاده کنید.
  • قالب را از ورودی کاربر نسازید؛ برای فرمان‌ها از APIهای آرایه‌ای بدون شل استفاده کنید و ورودی را با فهرست سفید بسنجید.
  • آپلود را محدود کنید: نوع فایل، مسیر ذخیره‌ی خارج از ریشه‌ی وب، و جلوگیری از اجرای مفسر روی پوشه‌ی آپلود.
  • حساب برنامه را کم‌امتیاز اجرا کنید تا حتی در صورت RCE، دامنه‌ی آسیب محدود بماند (اصل کمترین امتیاز و جداسازی).
  • پایش و هشدار: ثبت رخداد کافی تا اجرای کد ناشناخته زود کشف شود.
→ بازگشت به دانشنامه
PUT IT TO THE TEST

امنیت سامانه‌ی شما را
به مهاجمان واگذار نکنید

تیم پی‌هانتر با دیدِ یک مهاجم واقعی، این آسیب‌پذیری‌ها و ده‌ها مورد دیگر را روی دارایی‌های شما می‌سنجد.