چندین آسیب پذیری در پروژههای مرتبط با Git از جمله GitHub Desktop، Git Credential Manager، Git LFS و GitHub Codespaces شناسایی شده است. این آسیب پذیریها مربوط به نحوه نادرست مدیریت پروتکلهای مبتنی بر متن میباشند. این مشکل در واقع به دلیل پردازش نادرست کاراکترهای newline و carriage return در پیامهای اعتبارسنجی ایجاد شده است و میتواند به افشای دادههای لاگین کاربران منجر شود. این کشف خطرات قابل توجهی را در زمینه امنیت نرمافزار، بهویژه در مکانیزمهای مدیریت دادههای لاگین، آشکار میسازد که در ادامه به آنها پرداختهایم.
پیش از پرداختن به آسیب پذیریها، ابتدا لازم است تا با مفهوم پروتکل Git Credential، آشنا شوید. Git Credential، یک روش برای مدیریت دادههای لاگین (نام کاربری و رمز عبور) در Git است که به Git اجازه میدهد تا بهطور خودکار و امن، نام کاربری و رمز عبور را برای دسترسی به مخازن خصوصی ذخیره و بازیابی کند. این پروتکل برای تسهیل ارتباطGit با سرورهای ریموت مانند GitHub یا GitLab بدون نیاز به وارد کردن مکرر اطلاعات لاگین در هر بار استفاده از دستورات Git طراحی شده است.
پروتکل Git Credential از طریق credential helper عمل میکند که به Git کمک میکند تا دادههای لاگین را در فایلها، سیستمهای مدیریت رمز عبور یا keychainهای سیستمعامل ذخیره کند. برخی از نمونههای credential helperها عبارتند از:
- git-credential-store: ذخیره اطلاعات لاگین در یک فایل متنی ساده.
- git-credential-osxkeychain: ذخیره اطلاعات لاگین درKeychain سیستمعامل macOS.
- git-credential-winstore: ذخیره اطلاعات لاگین در Windows Credential Store.
Git برای بازیابی اطلاعات لاگین از سرور، از این credential helperها استفاده میکند و اطلاعات لاگین را بهطور خودکار از آنها میگیرد تا دستوراتی مانند git pull یا git push بصورت اتومات انجام شوند بدون اینکه کاربر هر بار مجبور به وارد کردن رمز عبور باشد.
مدیریت نادرست پیامها منجر به بروز آسیب پذیری و افشای اطلاعات لاگین در بسیاری از پروژهها شده است.
Git از طریق تبادل پیامهایی مانند موارد زیر با credential helper ارتباط برقرار میکند:
درخواست:
protocol=https
host=github.com
پاسخ:
protocol=https
host=github.com
username=USERNAME
password=PASSWORD
پیامها با Enter از یکدیگر تفکیک شده و توسط هر دو طرف پردازش میشوند. Git به منظور جلوگیری از تزریق ویژگیها (Property Injection)، کاراکترهای خط جدید و بایتهای NULL را در نامها و مقادیر ویژگیها مسدود میکند.
این اقدام به منظور محافظت در برابر حملات احتمالی است که ممکن است از این کاراکترها برای دستکاری یا تزریق دادههای مخرب به پیامها استفاده کنند.
GitHub Desktop
GitHub Desktop یک اپلیکیشن گرافیکی است که توسط گیتهاب برای سیستمهای ویندوز و macOS توسعه داده شده است تا به کاربران این امکان را بدهد که از قابلیتهای Git بدون نیاز به استفاده از خط فرمان (CLI) بهرهمند شوند. این ابزار برای افرادی که با گیت آشنایی کمی دارند یا ترجیح میدهند از اینترفیس گرافیکی برای مدیریت مخازن استفاده کنند، طراحی شده است.
GitHub Desktop اخیرا با یک آسیب پذیری (CVE-2025-23040) مواجه شده است. CVE-2025-23040، به مهاجمان اجازه میدهد تا با فریب کاربر برای کلون کردن یک مخزن از طریق یک URLمخرب، به داده های لاگین کاربر دسترسی پیدا کنند.
GitHub Desktop برای انجام عملیاتهای شبکهای مانند کلون کردن، دریافت (fetch) و ارسال (push) تغییرات، به Git متکی است. هنگامی که کاربر قصد کلون کردن یک مخزن را دارد و نیاز به احراز هویت است،Git از طریق پروتکل Git Credential از GitHub Desktop درخواست میکند تا اطلاعات لاگین مورد نیاز را فراهم کند.
با استفاده از یک URL مخرب، ممکن است درخواست Git Credential بهگونهای تفسیر شود که GitHub Desktop، داده ها را برای میزبان دیگری ارسال کند که این امر منجر به افشای اطلاعات محرمانه خواهد شد.
برای رفع این آسیب پذیری، کاربران باید به نسخه 3.4.12 یا بالاتر GitHub Desktop بهروزرسانی کنند. همچنین، توصیه میشود هرگونه داده لاگین مرتبط را که ممکن است فاش شده باشد، تغییر دهید.
Git Credential Manager
بهطور مشابه، یک آسیب پذیری (CVE-2024-50338) در Git Credential Manager شناسایی شده است که ناشی از استفاده نادرست از کلاس NET StreamReader میباشد. CVE-2024-50338 به مهاجمان این امکان را میدهد تا با استفاده از URLهای مخرب، به اطلاعات حساس مانند نام کاربری و توکنهای دسترسی، دست یابند.
Git Credential Manager یک ابزار امن برای مدیریت دادههای احراز هویت در Git است که بر پایه دات نت نوشته شده است و بر روی سیستمهای ویندوز، macOS و لینوکس اجرا میشود. پروتکل Git Credential بهصورت متنی و از طریق ورودی/خروجی استاندارد عمل میکند و شامل خطوطی از جفتهای کلید-مقدار به فرمت key=value است. مستندات Git استفاده از کاراکترهای NULL (\0) و خط جدید (newline) را در نامها یا مقادیر کلیدها محدود میکنند.
با این حال، Git Credential Manager در برخی شرایط ممکن است این محدودیتها را نادیده بگیرد و اجازه دهد که کاراکترهای خط جدید و بازگشت سطر (\r) در URLهای مخرب گنجانده شوند. این امر میتواند منجر به فاش شدن اطلاعات حساس مانند نام کاربری و توکنهای دسترسی گردد.
کاربران به منظور پچ این آسیب پذیری، باید به نسخه 2.6.1 یا بالاتر از Git Credential Manager بهروزرسانی کنند. همچنین، توصیه میشود هرگونه هرگونه داده لاگین مرتبط را که ممکن است فاش شده باشد، تغییر دهید.
Git Large File Storage
Git Large File Storage (LFS) یک افزونه گیت است که نسبت به CVE-2024-53263، آسیب پذیر میباشد. Git LFS برای نسخهبندی فایلهای بزرگ طراحی شده است. هنگامی که Git LFS برای دریافت اطلاعات لاگین ازGit برای یک میزبان راه دور درخواست میکند، بخشهایی از URL میزبان را به دستور git-credential منتقل میکند بدون اینکه به وجود کاراکترهای کنترل خط جدید توجه کند.
Git LFS سپس، هر دادهای را که از Git credential helper دریافت میکند به میزبان راه دور ارسال میکند. با وارد کردن کاراکترهای کنترل URL-encoded مانند LF یا CR در URL، مهاجم ممکن است بتواند اطلاعات لاگین Git کاربر را بازیابی کند. این آسیب پذیری میتواند منجر به افشای اطلاعات حساس مانند نام کاربری و توکنهای دسترسی شود.
CVE-2024-53858 نیز یک آسیبپذیری امنیتی دیگر در GitHub CLI است که میتواند منجر به افشای توکنهای احراز هویت هنگام کلون کردن مخازن حاوی زیرماژولهای Git از میزبانهای غیر از GitHub.com و ghe.com شود.
در نسخههای پیشین GitHub CLI، هنگام استفاده از دستورات gh مانند repo clone، repo fork و pr checkout برای کلون کردن مخازن حاوی زیرماژولها از میزبانهای غیر از GitHub.com و ghe.com، ممکن بود توکنهای احراز هویت بهصورت ناخواسته به این میزبانها ارسال شوند. این مشکل به دلیل نحوه مدیریت توکنهای احراز هویت در GitHub CLI رخ میدهد که میتواند منجر به افشای اطلاعات حساس شود.
GitHub Codespaces
GitHub Codespaces یک محیط توسعه آنلاین است که توسط GitHub ارائه میشود. این پلتفرم به توسعهدهندگان اجازه میدهد تا محیطهای برنامهنویسی قابل تنظیم را به صورت مستقیم از GitHub ایجاد کنند و به کدهای خود دسترسی داشته باشند.
یک آسیب پذیری در GitHub Codespaces Credential Helper شناسایی شده است که مربوط به نحوه عملکرد اعتبارسنجی و بازگشت GITHUB_TOKEN در این ابزار است.
GitHub Codespaces Credential Helper ابزاری است که برای مدیریت و ارائه توکنهای دسترسی (مانند GITHUB_TOKEN) به GitHub و سایر سرویسها در GitHub Codespaces استفاده میشود. این توکنها برای احراز هویت و دسترسی به منابع مانند مخازن، APIها و عملیات Git مورد استفاده قرار میگیرند.
علت این آسیب پذیری این است که GitHub Codespaces Credential Helper بهطور پیشفرض همیشه GITHUB_TOKEN را باز میگرداند، فارغ از اینکه کدام میزبان (host) درخواست کرده باشد. به عبارت دیگر، حتی اگر یک درخواست از یک میزبان غیرمرتبط یا غیرمجاز (مانند یک دامنه خارجی) دریافت شده باشد، توکن معتبر GitHub به آن ارسال میشود. این رفتار بهطور غیرعمدی منجر به افشای اطلاعات حساس میشود.
اقدامات امنیتی و مقابله با آسیب پذیریها
این آسیبپذیریها توسط RyotaK، یک مهندس امنیتی از شرکت GMO Flatt Security Inc که در پرروژه باگ بانتی GitHub شرکت کرده بود، کشف شدهاند. نتایج این تحقیق که در یک پست وبلاگ بصورت مفصل به اشتراک گذاشته شده، منجر به اتخاذ اقدامات و پچهای امنیتی از سوی پلتفرمهای آسیب پذیر شده است.
توسعهدهندگان Git و تیم GitHub در واکنش به این کشفها، اقداماتی را برای کاهش خطرات و رفع آسیب پذیریها معرفی کردند که شامل موارد زیر میباشند:
- اعتبارسنجی دفاع در عمق (CVE-2024-52006): گیت یک تنظیمات جدید به نام protectProtocol اضافه کرده است که بهطور پیشفرض فعال میباشد و دادههای لاگین که حاوی کاراکترهای بازگشت سطر (carriage return) میباشند را رد میکند.
- GitHub Codespaces: محیط توسعه آنلاین GitHub Codespaces، به منظور اعتبارسنجی Hostهای درخواست داده پیش از به اشتراک گذاشتن اطلاعات لاگین، در credential helper خود تجدید نظر میکند.
- GitHub Desktop و Git Credential Manager، مکانیزمهای بیشتری را برای پاکسازی ورودیها پیادهسازی کردهاند تا از دستکاری کاراکترهای بازگشت سطر (carriage return smuggling) جلوگیری به عمل آورند.
این اقدامات به منظور تقویت امنیت و جلوگیری از افشای دادههای لاگین و دستکاریهای احتمالی در فرآیندهای اعتبارسنجی طراحی شدهاند.
این یافتهها خطرات ناشی از مدیریت نادرست پروتکلهای مبتنی بر متن، بهویژه در زمان تبادل دادههای لاگین را برجسته میکند. حتی سهلانگاریهای کوچک در معماری نرمافزار میتواند منجر به نفوذهای امنیتی قابل توجهی شود.
RyotaK بر اهمیت اعتبارسنجی قوی و پاکسازی ورودیها در تمامی برنامههای نرمافزاری تأکید میکند، بهویژه در برنامههایی که اطلاعات حساسی مانند اطلاعات لاگین را مدیریت میکنند. این تأکید بر اهمیت اقدامات پیشگیرانه بهمنظور کاهش آسیب پذیریها و حفظ امنیت سیستمهای نرمافزاری میافزاید.
منابع
مقالات پیشنهادی:
به روزرسانی GITLAB برای پچ آسیب پذیری CVE-2024-8114
پروژههای GitHub توسط کامیت های مخرب مورد هدف قرار گرفتند
ابزار فیشینگ GoIssue، توسعه دهندگان را در GitHub مورد هدف قرار میدهد
بخش کامنت GitHub برای انتشار Remcos RAT مورد سوء استفاده قرار گرفت
شناسایی بیش از ۳.۱ میلیون ‘ستاره’ جعلی در پروژههای GitHub برای افزایش رتبه آنها