۵۰ هزار ایمیل اسپم و یه پروژهی فراموششده
خلاصهٔ کاملتر
نویسنده (Daniel Petrica) با خلاصه شروع میکنه: یکی از یه نسخهی قدیمیِ Livewire روی یه پروژهی جانبیِ متروکهش سوءاستفاده کرده، فایلِ .env رو دزدیده، با کلیدهای API مربوط به Mailcoach پنجاههزار ایمیل اسپم فرستاده، و اون یه شبِ تمام رو با وحشت صرفِ گشتن تو همهی پروژههاش کرده تا منبع رو پیدا کنه.
ماجرا از یه ایمیلِ Mailcoach شروع میشه که میگه ارسالها بهخاطرِ نرخِ بالای bounce یا گزارشِ اسپم مسدود شدن. وقتی نویسنده لاگین میکنه، میبینه بیش از ۵۰ هزار ایمیلِ اسپم با لینکهای فیشینگ از اسمِ اون رفته بیرون. واکنشِ فوریش این بوده که همهی توکنهای API تو Mailcoach و GitHub رو حذف کنه و از تیمِ پشتیبانی کمک بخواد.
بعد نُه ساعت گشتن تو همهی پروژهها (لاگها، دسترسیهای فایل، هر چیزِ غیرعادی) اول چیزی پیدا نمیکنه، مخصوصاً که همون روز Symfony هم ۱۹ تا CVE اعلام کرده بوده و ذهنش سمتِ اون رفته. فردا با ادامهی جستوجو بالاخره منبع رو پیدا میکنه: یه پروژهی جانبیِ کوچیک که یه نسخهی قدیمیِ Livewire با یه CVEِ عمومی داشته و آپدیت نشده بوده. به گفتهی نویسنده، این تقصیرِ خودش بوده.
مهاجم از راهِ اسکنِ خودکار پیداش کرده؛ همون باتهایی که وب رو دنبالِ آسیبپذیریهای شناختهشده میگردن. اونها Livewire و CVEش رو پیدا کردن و ظرفِ چند ساعت داخل بودن، یه اسکریپتِ مدیریتیِ وب آپلود کردن که اجازه میداد هرچی کاربرِ Apache داخلِ اون کانتینرِ Docker بهش دسترسی داشت رو بخونن، از جمله فایلِ .env که کلیدهای Mailcoach توش بوده.
نقطهی نجات، Docker بوده. اون پروژه داخلِ یه کانتینر اجرا میشده و مهاجم با اینکه به همون کانتینر دسترسی داشته، نتونسته ازش فرار کنه و به پروژهها، دیتابیسها یا سیستمِ میزبانِ دیگه برسه؛ شعاعِ انفجار به همون یه سرویس محدود مونده. نویسنده میگه Docker Compose رو اولش فقط برای راحتیِ خودش راه انداخته بوده، نه بهعنوان یه اقدامِ امنیتی، ولی همون شده دیواری که جلوی گسترشِ حمله رو گرفته.
یه پشیمانی هم داره: وقتی کانتینرِ آلوده رو پیدا کرده، سریع با حذفِ volumeها خاموشش کرده و در نتیجه شواهد (web shell و لاگها) از بین رفته؛ بعداً فهمیده باید اول از استوریجِ کانتینر کپی میگرفته. خوشبختانه لاگهای reverse proxy مونده بودن و الگوی حملهی خودکار رو نشون میدادن. Mailcoach هم اسپم رو زودتر از خودش تشخیص داده، پیشاپیش ارسالها رو معلق کرده و در نهایت هزینهی اون ۵۰ هزار ایمیل رو کامل بخشیده. نویسنده بعد از این ماجرا هشدارِ خودکارِ آپدیتِ وابستگیها راه انداخته، پروژههای جانبیش رو بازبینی کرده (بعضی آپدیت، بعضی آرشیو، بعضی تعطیل) و دامنهی توکنها رو محدودتر کرده.
نکات کلیدی:
- سوءاستفاده از یه Livewireِ آپدیتنشده روی یه پروژهی متروکه منجر به دزدیدهشدنِ .env و ارسالِ ۵۰ هزار ایمیل اسپم شد.
- حمله کاملاً خودکار بود؛ اسکنرها آسیبپذیریِ شناختهشده رو پیدا کردن و ظرفِ چند ساعت نفوذ کردن.
- اجرا داخلِ کانتینرِ Docker شعاعِ انفجار رو به همون یه سرویس محدود کرد و مانعِ گسترش شد.
- حذفِ سریعِ کانتینر همراه با volumeها باعثِ از دست رفتنِ شواهد شد؛ بهتر بود اول از استوریج کپی گرفته میشد.
- درسِ اصلی: پروژههای جانبیِ فراموششده با وابستگیِ قدیمی، هدفِ اسکنرهان؛ یا آپدیتشون کن یا تعطیل.




