در یک حمله زنجیره تأمین PyPI که فرآیند انتشار نرمافزار را هدف قرار داده بود، نسخهای آلوده از پکیج پرکاربرد elementary-data در مخزن PyPI منتشر شد. این نسخه مخرب حاوی یک infostealer پیشرفته بود که وظیفه سرقت اطلاعات حساس توسعهدهندگان و کیفپولهای رمزارزی را برعهده داشت. همچنین حمله زنجیره تأمین PyPI باعث شد Docker image پروژه نیز بهطور خودکار آلوده و در چرخه CI/CD منتشر شود؛ موضوعی که آسیبپذیری workflowهای خودکار را بهوضوح آشکار میکند.
جزئیات حمله به زنجیره تأمین PyPI و نحوه انتشار نسخه مخرب
نسخه آلوده 0.23.3 پس از انتشار در PyPI و ساخت خودکار Docker image، تعداد زیادی از کاربران بالقوه را تحتتأثیر قرار داد. این بسته که ماهانه بیش از 1.1 میلیون بار دانلود میشود، یکی از ابزارهای مهم نظارت بر داده (data observability) در اکوسیستم dbt است.
گزارش StepSecurity نشان میدهد مهاجم بدون دسترسی مستقیم به حساب توسعهدهندگان اصلی پروژه، از طریق بهرهبرداری از آسیبپذیری موجود در workflow پروژه موفق به اجرای کد شده است.
سوءاستفاده از GitHub Actions در جریان حمله به زنجیره تأمین PyPI
مهاجم با ارسال یک کامنت مخرب روی یک Pull Request، ضعف Script Injection در GitHub Actions را فعال کرد. این ضعف باعث اجرای اسکریپت مهاجم در محیط اجرا شد. مراحل کلیدی حمله شامل:
- افشای توکن GITHUB_TOKEN
- ایجاد commit و tag جعلی با نسخه 23.3
- فعال کردن pipeline انتشار رسمی پروژه
این روند موجب شد pipeline معتبر پروژه، بهجای توسعهدهنده واقعی، نسخه بکدور را روی PyPI و همچنین ایمیج آلوده را روی GitHub Container Registry منتشر کند و نسخه مخرب کاملاً رسمی بهنظر برسد.
تحلیل بدافزار Infostealer مستقر در بسته آلوده
نسخه آلوده شامل فایلی به نام elementary.pth بود که بهطور خودکار در زمان startup اجرا میشد و پیلود سرقت اطلاعات را بارگذاری میکرد. این پیلود طیف وسیعی از اطلاعات حساس را هدف قرار میداد، از جمله:
- کلیدهای SSH
- اعتبارنامههایGit
- Secretهای محیط AWS، GCP و Azure
- دادههای Kubernetes، Docker و CI/CD
- فایلهای .env و توکنهای توسعهدهندگان
- کیفپولهای رمزارزی (BTC, LTC, DOGE, Zcash, Dash, Monero, Ripple)
- فایلهای سیستمی مانند /etc/passwd، لاگها و تاریخچه shell
این پیلود بهدلیل ساختار workflow، به Docker image پروژه نیز منتقل شد؛ زیرا فرآیند ساخت و بارگذاری (build و push) بهصورت یکپارچه و خودکار انجام میشد.
کاربرانی که تحت تأثیر حمله به زنجیره تأمین PyPI قرار گرفتهاند
کاربرانی که نسخه elementary-data==0.23.3 یا ایمیجهای hcr.io/elementary-data/elementary:0.23.3 و ghcr.io/elementary-data/elementary:latest را در بازه انتشار نصب یا pull کردهاند، احتمالاً با نفوذ مواجه شدهاند. StepSecurity توصیه کرده است که کاربران اقدامات زیر را انجام دهند:
- تغییر کامل تمام رمزها و کلیدهای حساس
- بازگرداندن محیطها به یک snapshot معتبر و سالم
- بهروزرسانی به نسخه 0.23.4 یا جدیدتر
- استفاده از pinning نسخهها برای جلوگیری از pull ناخواسته نسخههای مخرب
تحلیل نهایی؛ اهمیت روزافزون امنیت در جریان توسعه
این رخداد نشان میدهد workflowهای خودکار و زیرساختهای CI/CD همچنان یکی از اهداف جذاب برای مهاجمان هستند. ضعف در pipeline میتواند حتی بدون نفوذ به حساب توسعهدهنده، راه را برای انتشار نسخههای بکدور باز کند. این موضوع اهمیت نظارت امنیتی مستمر، محدودسازی سطح دسترسی و اعمال کنترلهای سختگیرانهتر در فرآیندهای خودکار را بیش از پیش نمایان میکند.