هشدار امنیتی برای مدیریت مخازن گیت محلی

پلتفرم متن‌باز Gitea نسخهٔ 1.27.1 را منتشر کرد تا یک حفرهٔ کد از راه دور (RCE) را در نسخه‌های قدیمی‌تر برطرف کند. این باگ که به شماره CVE-2026-60004 ثبت شده و امتیاز بحران 9.8 را کسب کرده، به کاربران عادی با دسترسی نوشتن روی مخازن اجازه می‌دهد تا محتوای کنترل‌شده را به یک Git Hook تبدیل کرده و دستورات شل را با امتیازات حساب سرویس گیتا اجرا کنند.

چگونه یکپارچه‌سازی پچ به باغ می‌کشی سیستمی تبدیل می‌شود؟

هسته فنی این آسیب‌پذیری در نقطه انتهایی /api/v1/repos/{owner}/{repo}/diffpatch قرار دارد. وقتی درخواستی حاوی یک پچ به این اندپوینت فرستاده می‌شود، گیتا آن را در یک کپی موقت و بدون شاخه (Bare Clone) پردازش می‌کند. نسخه‌های آسیب‌پذیر از دستورات git apply با فلگ‌های --index، --recount، --cached و --binary استفاده می‌کنند. در سرورهایی که نسخه 2.32 یا بالاتر گیت را اجرا می‌کنند، گزینه بازگشت سه‌طرفه -3 نیز فعال می‌شود.

حمله‌کننده با ارسال دقیقاً همان پچ دو بار، یک تداخل Add/Add ایجاد می‌کند. در این حالت، مکانیزم بازگشت سه‌طرفه مسیر ایندکس‌شده را بررسی کرده و فایل اجرایی مخرب را در مسیر hooks/post-index-change قرار می‌دهد. از آنجایی که کلون موقت از نوع Bare است، ریشه عملیات مستقیماً برابر با متغیر $GIT_DIR خواهد بود و گیت به‌طور خودکار هک جدید را هنگام به‌روزرسانی ایندکس اجرا می‌کند. این پروتکل نیاز به هیچ‌گونه درخواست خروجی ندارد و پیامد دستورات را مستقیماً در اشیای گیت ذخیره می‌کند تا مهاجم بتواند آن را از طریق پروتکل Smart HTTP بازیابی کند.

تصویر نمادین از معماری پلتفرم‌های مدیریت کد و کنترل نسخه

خطر پنهان: تنظیمات پیش‌فرض ثبت‌نام باز

نکته نگران‌کننده این داستان به پیکربندی ذاتی پروژه برمی‌گردد. مسیر حمله برای به‌دست آوردن دسترسی نوشتن مستلزم احراز هویت است، اما خودِ گیتا به‌صورت پیش‌فرض ثبت‌نام را باز نگه می‌دارد. این یعنی نیاز به تأیید ایمیل یا تایید دستی برای اکانت‌های جدید وجود ندارد و هیچ محدودیتی برای تعداد مخازن قابل ساخته شدن اعمال نمی‌شود. یک بازدیدکننده ناشناس می‌تواند بدون حتی یک حساب از پیش ساخته‌شده، با استفاده از این تنظیمات پیش‌فرض، دسترسی نوشتن را به‌دست آورده و باگ را فعال کند.

سوءاستفاده موفق از این تکنیک، دسترسی کامل حساب سیستم‌عاملی که گیتا با آن اجرا می‌شود را به مهاجم واگذار می‌کند. بسته به سطح ایزولاسیون سرور، این دسترسی می‌تواند منجر به لو رفتن رازهای برنامه‌نویسی، اطلاعات احراز هویت پایگاه‌داده، اعتبارنامه‌های OAuth و نفوذ به سرویس‌های داخلی متصل به سرور شود.

زمان‌بندی پچ و راهکارهای فوری

تیم توسعه‌دهنده گیتا در تاریخ 27 ژوئیه نسخهٔ 1.27.1 را منتشر کرد و در اطلاعیه 28 ژوئیه به رفع این باگ پرداخت. نسخه‌های ابری گیتا به‌طور خودکار به‌روزرسانی شدند.

یکی از اشتباهات رایج در به‌روزرسانی، نادیده گرفتن این پچ است. تیم گیتا تغییرات پایه‌ای را از حالت Bare به Non-Bare تغییر داد و این تغییر بسیار حیاتی در بخش MISC در یادداشت‌های انتشار ثبت شده، نه در بخش SECURITY. برای ایمن‌سازی فوری سرورهای شخصی:

  • فوراً پلتفرم خود را به نسخهٔ 1.27.1 ارتقا دهید.
  • تا زمان استقرار کامل پچ، گزینه ثبت‌نام کاربران را در تنظیمات مدیریت، غیرفعال کنید.
  • لاگ‌های دسترسی به اندپوینت diffpatch را برای هرگونه درخواست دوگانه و غیرعادی پایش کنید.

علاوه بر این آسیب‌پذیری، نسخهٔ 1.27.1 یک باگ جداگانه مربوط به درج فایل (File Inclusion) را نیز پوشاند که امکان بازیابی فایل‌های سیستمی مانند /etc/passwd را در نسخهٔ 1.27.0 می‌داد. این پچ رندرکننده Org-mode را تغییر داد تا مسیرهای Include را مستقیماً از روی درایو سرور نخواند.

نگهداری امنیت در پلتفرم‌های توسعه‌باز بیشتر از هر زمان دیگری نیازمند به‌روزرسانی مداوم و پیکربندی دقیق است. در آینده نزدیک با افزایش اتوماسیون CI/CD، نقاط ورودی هکری در لایه پردازش پچ‌ها حساس‌تر از قبل خواهند شد و سازمان‌ها باید اولویت امنیتی را به کنترل سخت‌گیرانهٔ نسخه‌های گیتا بدهند.