آسیب‌پذیری در cdnj‌ها که امکان اجرای کد در سرورهای Cloudflare را فراهم می‌کرد

یک آسیب پذیری حیاتی در شبکه تحویل محتوای cdnjs Cloudflare شناسایی شده است که برای سرعت بخشیدن به تحویل کتابخانه های جاوا اسکریپت طراحی شده است و امکان اجرای کد دلخواه در سرورهای CDN را فراهم می کند. خطر این مشکل با این واقعیت تشدید می شود که حدود 12.7٪ از تمام سایت های اینترنت از این سرویس برای دانلود کتابخانه های جاوا اسکریپت استفاده می کنند و به خطر افتادن زیرساخت امکان جایگزینی کتابخانه های ارائه شده توسط هر یک از این سایت ها را فراهم می کند.

سرویس cdnjs بسته ها را از Git یا یک مخزن NPM دانلود می کند، پس از آن به هر سایتی اجازه می دهد تا از شبکه تحویل محتوای Cloudflare به صورت رایگان برای سرعت بخشیدن به بارگذاری کتابخانه های جاوا اسکریپت استفاده کند. هنگام مطالعه کد اجزای cdnjs منتشر شده در GitHub، مشخص شد که برای باز کردن بسته‌های NPM در بایگانی‌های tgz، از ماژول استاندارد آرشیو/tar در زبان Go استفاده می‌شود که لیستی از فایل‌ها را همانطور که هست، بدون عادی‌سازی مسیرها تولید می‌کند. . در صورتی که اسکریپت محتویات را بر اساس لیست داده شده باز کند، حضور در آرشیو فایل هایی مانند "../../../../../../../tmp/test" می تواند منجر به بازنویسی فایل های دلخواه در سیستم، تا جایی که حقوق دسترسی اجازه می دهد.

پیشنهاد شد که مهاجم می تواند برای افزودن کتابخانه خود به cdnj ها و آپلود یک آرشیو ویژه طراحی شده حاوی فایل هایی با کاراکترهای "../" در مسیر مخزن NPM درخواست دهد. در سرورهای cdnjs، یک عملیات "به روز رسانی خودکار" به صورت دوره ای انجام می شود، که طی آن کنترل کننده نسخه های جدید کتابخانه پیشنهادی را دانلود می کند و محتویات را باز می کند. با استفاده از فایل‌هایی با مسیرهای «../»، مهاجم می‌تواند فایل‌ها را با اسکریپت‌های سرویس بازنویسی کند و کد آن‌ها را روی سروری که باز کردن بسته‌بندی روی آن انجام شده است، اجرا کند.

در مورد دانلود به‌روزرسانی‌ها از Git، مشخص شد که مدیریت کننده‌ای که به‌روزرسانی‌ها را دانلود می‌کند، هنگام کپی کردن فایل‌ها از Git، پیوندهای نمادین را در نظر نمی‌گیرد. این ویژگی امکان سازماندهی خواندن هر فایل از سرور را با افزودن پیوندهای نمادین به Git فراهم کرد.

تصمیم گرفته شد آزمایش هایی را با نمایش cdnj های هک برای دریافت جایزه در HackerOne با آزمایش فرضیه مربوط به خواندن فایل آغاز کنیم. یک پیوند نمادین test.js به مخزن Git کتابخانه جاوا اسکریپت اضافه شده است که از طریق CDN ارائه می شود و به فایل /proc/self/maps اشاره می کند. پس از انتشار نسخه جدید کتابخانه، کنترل کننده به روز رسانی این مخزن را پردازش کرد و فایل مشخص شده را در cdnjs منتشر کرد (test.js به عنوان یک پیوند نمادین ایجاد شد و زمانی که این فایل درخواست شد، محتوای /proc/self/maps برگردانده شد. ).

نویسنده مطالعه با جایگزینی پیوند نمادین به فایل /proc/self/environ متوجه شد که داده های داده شده حاوی مقادیر متغیرهای محیطی GITHUB_REPO_API_KEY و WORKERS_KV_API_TOKEN هستند. اولین متغیر کلید API را برای دسترسی نوشتن به مخزن robocdnjs در GitHub ذخیره می کرد. متغیر دوم توکن را در حافظه KV در cdnj ذخیره می کند. با استفاده از اطلاعات دریافتی، مهاجم می تواند تغییراتی در cdnj ها ایجاد کند و زیرساخت را به طور کامل در معرض خطر قرار دهد.

منبع: opennet.ru

اضافه کردن نظر