مهاجمی که تغییراتی را در یک مخزن منبع باز در GitHub ارسال میکند، میتواند باعث شود پروژههای نرمافزاری پاییندستی که شامل آخرین نسخه یک مؤلفه هستند، بهروزرسانیها را با کد مخرب جمعآوری کنند.
طبق گفته شرکت امنیتی زنجیره تامین نرمافزار Legit Security، که در توصیهنامهای که در 1 دسامبر منتشر شد، گفت که این ضعف "مسمومیت با مصنوعات" میتواند پروژههای نرمافزاری را که از GitHub Actions استفاده میکنند - سرویسی برای خودکارسازی خطوط لوله توسعه - با راهاندازی فرآیند ساخت تحت تاثیر قرار دهد. یک تغییر در یک وابستگی نرم افزاری شناسایی می شود.
این آسیبپذیری تئوری نیست: شرکت Legit Security یک حمله به پروژهای که Rust را مدیریت میکند شبیهسازی کرد، که باعث شد پروژه با استفاده از نسخه سفارشیشده – و مخرب – کتابخانه نرمافزار محبوب GCC دوباره کامپایل شود.
لیاو کاسپی، مدیر ارشد فناوری Legit Security میگوید: این مشکل احتمالاً بر تعداد زیادی از پروژههای منبع باز تأثیر میگذارد، زیرا نگهداریکنندگان معمولاً قبل از اینکه خودشان کد را تجزیه و تحلیل کنند، آزمایشهایی را روی کد ارائه شده اجرا میکنند.
او می گوید: «امروزه این یک الگوی رایج است. امروزه بسیاری از پروژههای منبع باز، پس از درخواست تغییر، آزمایشهایی را برای تأیید اعتبار انجام میدهند، زیرا نگهدارنده نمیخواهد ابتدا کد را بررسی کند. در عوض، به طور خودکار آزمایشها را اجرا میکند.»
این حمله از فرآیند ساخت خودکار از طریق GitHub Actions بهره می برد. Legit Security گفت که در مورد زبان برنامه نویسی Rust، الگوی آسیب پذیر می توانست به مهاجم اجازه دهد تا به عنوان بخشی از خط لوله توسعه، کد را به روشی ممتاز اجرا کند، اسرار مخزن را بدزدد و به طور بالقوه کد را دستکاری کند.
به بیان ساده: در یک گردش کار آسیبپذیر، هر کاربر GitHub میتواند فورکی ایجاد کند که یک مصنوع ایجاد میکند. در مشاوره آن بیان شده است. سپس این آرتیفکت را به فرآیند ساخت مخزن اصلی تزریق کنید و خروجی آن را اصلاح کنید. این شکل دیگری از حمله زنجیره تامین نرم افزار است که در آن خروجی ساخت توسط مهاجم اصلاح می شود.
آسیب پذیری حمله ای مشابه را فعال می کند حمله درج بدافزار که CodeCov را هدف قرار داد و از طریق نرم افزار آن شرکت، مشتریان پایین دستی آن.
Legit Security در این مشاوره اظهار داشت: «فقدان پیادهسازی GitHub بومی برای ارتباطات مصنوعات متقابل جریان کار، بسیاری از پروژهها و جامعه GitHub Actions را به ایجاد راهحلهای ناامن برای ارتباطات بین گردش کاری سوق داد و این تهدید را بسیار رایج کرد».
گیت هاب مشکل را تایید کرد و برای اطلاعات پاداشی پرداخت کرد، در حالی که Rust خط لوله آسیب پذیر خود را تعمیر کرد، Legit Security گفت.
زنجیره تامین نرم افزار به امنیت نیاز دارد
این آسیبپذیری آخرین مشکل امنیتی است که بر زنجیرههای تأمین نرمافزار تأثیر میگذارد. صنعت و سازمان های دولتی به طور فزاینده ای به دنبال تقویت امنیت نرم افزار منبع باز و نرم افزار ارائه شده به عنوان یک سرویس بوده اند.
برای مثال، در ماه مه 2021، دولت بایدن فرمان اجرایی خود را در مورد بهبود امنیت سایبری کشور منتشر کرد، یک قانون فدرال که در کنار سایر الزامات، دولت را موظف می کند. برای هر نرم افزاری که خریداری می کند به استانداردهای امنیتی پایه نیاز دارد. در بخش صنعت خصوصی، گوگل و مایکروسافت این کار را انجام داده اند میلیاردها دلار متعهد شد برای تقویت امنیت در اکوسیستم منبع باز، که کدی را ارائه می دهد بیش از سه چهارم از میانگین پایگاه کد برنامه را شامل می شود.
منطقی، اما آسیب پذیر
مسئله امنیتی متعلق به دسته ای از مشکلات است که به سختی قابل یافتن هستند که به عنوان مسائل منطقی شناخته می شوند، که شامل مسائل مربوط به مجوزها، احتمال درج مخازن فورک شده در خط لوله، و عدم تمایز بین مخازن فورک شده و پایه است.
از آنجایی که پروژههای نرمافزاری اغلب از اسکریپتهای خودکار برای بررسی کد ارسالی قبل از ارسال به نگهدارندهها استفاده میکنند، قبل از اینکه هر انسانی آنها را برای کدهای مخرب بررسی کند، درخواستهای کشش از طریق اتوماسیون اجرا میشوند. در حالی که اتوماسیون باعث صرفه جویی در زمان می شود، همچنین باید راهی برای مهاجمان در نظر گرفته شود تا کدهای مخرب را در خط لوله وارد کنند.
کاسپی میگوید: «وقتی توسعهدهی متنباز انجام میدهید، مشکل بزرگتر است، زیرا مشارکت هر کسی در جهان را میپذیرید. "شما چیزهایی را اجرا می کنید که نمی توانید به آنها اعتماد کنید."
GitHub این مشکل را تأیید کرد و راههای حذف ارسالها از همکاران خارجی را از درج خودکار در خط لوله Actions گسترش داد. شرکت GetArtifact و ListArtifacts API های خود را به روز کرد با هدف ارائه اطلاعات بیشتر برای کمک به تعیین اینکه آیا یک مصنوع قابل اعتماد است یا خیر.
کاسپی میگوید: «هر کسی که کاری مانند پروژه Rust انجام دهد - با اعتماد به ورودی یک شخص ثالث - هنوز هم آسیبپذیر است. «این یک مشکل منطقی است. GitHub نوشتن یک اسکریپت امنتر را آسانتر کرده است.»