Jenkinsسازندگان نرم‌افزار اتوماسیون یکپارچه‌سازی/تحویل و استقرار پیوسته منبع‌باز (CI/CD) یعنی Jenkins نه نقص امنیتی از جمله یک باگ مهم را برطرف کرده اند که اگر با موفقیت مورد بهره برداری قرار گیرد، می‌تواند منجر به اجرای کد از راه دور (RCE) شود.

این مشکل که به آن شناسه CVE CVE-2024-23897 اختصاص‌داده‌شده است[۱]، به‌عنوان یک آسیب‌پذیری خواندنی دلخواه از طریق رابط خط فرمان داخلی ([۲]CLI) توصیف شده است.

سازندگان در گزارشی در روز چهارشنبه ۲۴ ژانویه گفتند[۳]: «جنکینز از کتابخانه args4j برای تجزیه آرگومان‌های فرمان و گزینه‌های کنترل‌کننده جنکینز هنگام پردازش دستورات CLI استفاده می‌کند».

“این تجزیه‌کننده فرمان دارای یک ویژگی است که یک کاراکتر @ و به دنبال آن یک مسیر فایل را در یک آرگومان با محتویات فایل (expandAtFiles) جایگزین می‌کند.”

یک عامل تهدید می‌تواند از این ویژگی برای خواندن فایل‌های دلخواه در سیستم فایل کنترلر جنکینز با استفاده از رمزگذاری کاراکتر پیش‌فرض فرایند کنترل‌کننده جنکینز استفاده کند.

درحالی‌که مهاجمان با مجوز Overall/Read می‌توانند کل فایل‌ها را بخوانند، افرادی که این مجوز را ندارند می‌توانند سه خط اول فایل‌ها را بسته به دستورات CLI بخوانند.  [۴]

علاوه بر این، این نقص می‌تواند برای خواندن فایل‌های باینری حاوی کلیدهای رمزنگاری، البته با محدودیت‌های خاص، مسلح شود. به شرطی که بتوان secretهای binary  را استخراج کرد، جنکینز می‌گوید که می‌تواند راه را برای حملات مختلف باز کند:

  • اجرای کد از راه دور از طریق URLهای ریشه منبع
  • اجرای کد از راه دور از طریق کوکی “Remember Me”.
  • اجرای کد از راه دور از طریق حملات اسکریپت بین سایتی (XSS) ذخیره شده از طریق لاگ‌های ساخت
  • اجرای کد از راه دور از طریق دورزدن حفاظتی CSRF
  • رمزگشایی secretهای ذخیره شده در جنکینز
  • هر موردی را در جنکینز حذف می‌کند.
  • دانلود heap dump جاوا

Jenkins گفت: «درحالی‌که فایل‌های حاوی داده‌های باینری قابل خواندن هستند، ویژگی آسیب‌دیده سعی می‌کند آنها را به‌صورت رشته‌ای با استفاده از رمزگذاری کاراکتر پیش‌فرض فرایند کنترلر بخواند».

“این احتمالاً باعث می‌شود که برخی از بایت‌ها با موفقیت خوانده نشوند و با یک مکان نگهدار جایگزین شوند. اینکه کدام بایت می‌تواند یا نمی‌تواند خوانده شود به این رمزگذاری کاراکتر بستگی دارد.”

محقق امنیتی SonarSource یعنی Yaniv Nizry، این نقص را در ۱۳ نوامبر ۲۰۲۳ کشف و گزارش کرده است[۵]، که با غیرفعال کردن ویژگی تجزیه کننده فرمان در Jenkins 2.442، LTS 2.426.3 برطرف شده است.

به‌عنوان یک راه‌حل کوتاه‌مدت تا زمانی که وصله قابل‌اعمال باشد، توصیه می‌شود دسترسی به CLI را خاموش کنید.

این توسعه تقریباً یک سال پس از آن صورت می‌گیرد که Jenkins به یک جفت آسیب‌پذیری امنیتی شدید[۶] با نام CorePlague (CVE-2023-27898 و CVE-2023-27905) رسیدگی کرد که می‌تواند منجر به اجرای کد در سیستم‌های هدفمند شود.

 

منابع

[۱] https://nvd.nist.gov/vuln/detail/CVE-2024-23897

[۲] https://www.jenkins.io/doc/book/managing/cli

[۳] https://www.jenkins.io/security/advisory/2024-01-24

[۴] https://youtu.be/ucs-XF5X3bE

[۵] https://www.sonarsource.com/blog/excessive-expansion-uncovering-critical-security-vulnerabilities-in-jenkins

[۶] https://thehackernews.com/2023/03/jenkins-security-alert-new-security.html

[۷] https://thehackernews.com/2024/01/critical-jenkins-vulnerability-exposes.html