گزارش آسیب‌پذیری Apache Superset

گزارش آسیب‌پذیری Apache Superset

تاریخ ایجاد

آسیب‌پذیری با شناسه CVE-2023-27524 با شدت بالا و امتیاز 8.9 در محصولات Apache Superset یافت شده است. Superset  روی پایتون و فریمورک Flask توسعه داده شده است. یکی از روشهای رایج در برنامه های Flask  برای مدیریت وضعیت کاربر، استفاده از کوکی های جلسه امضاء و رمزنگاری شده است. وقتی یک کاربر به سایت لاگین را انجام می‌دهد، برنامه یک کوکی جلسه (session cookie)، که شامل شناسه کاربر است به مروگر آن ارسال می‌کند. برنامه وب، این کوکی را با SECRET_KEY امضاء میکند، که یک مقدار تصادفی است و در یک فایل پیکربندی محلی ذخیره می‌شود. مرورگر با هر درخواست وب ، این کوکی جلسه را به برنامه وب می فرستد و برنامه، قبل از پردازش درخواست و با بررسی ان در هر درخواست، کاربر را مجددا احرازهویت می‌کند.
در حقیقت امنیت برنامه وب، بستگی به مخفی بودن SECRET_KEY دارد. اگر SECRET_KEY فاش شود، مهاجم میتواند کوکی خود را بسازد و کارهایی که برای کاربر با امتیاز بالا در نظر گرفته شده را انجام دهد. یک ابزار بنام Flask Unsign برای هک این موارد توسعه داده شده است، این ابزار  برای جمع آوری، رمزگشایی کردن، بروت فورس و ساخت کوکی های جلسه برنامه های فلسک با حدس زدن SECRET_KEY  توسعه داده شده است.
اگر سرور Superset در پشت یک SSO قرار نگرفته باشد، مهاجم میتواند با استفاده از ابزار flask-unsign مقدار user_id یا _user_id رو به مقدار 1 تغییر بدهد و یه کوکی جعلی بسازد و درنهایت بعنوان ادمین وارد سیستم شود. مقدار 1 نشان دهنده اولین کاربر Superset است که اغلب همون مدیر محسوب میشود. مهاجم، کوکی جعلی رو میتواند در local storage مرورگر خود تنظیم کند و با Refresh کردن صفحه، ادمین محسوب شود. برای سرورهایی که پشت SSO قرار دارند، مهاجم نیاز به کارهای بیشتر دارد تا بتواند user_id را بدست آورد.
همانطور که بیان شد Superset ، برای مصورسازی و کاوش روی داده طراحی شده است. بنابراین اگر یک مهاجم بعنوان ادمین وارد شود، میتواند این داده ها را تغییر یا حذف کند. به طور پیش فرض، دسترسی اتصالات دیتابیس ها بصورت فقط خواندنی است، اما مهاجم با امتیاز مدیر، میتواند دسترسی نوشتن یا DML را هم فعال کند. رابط SQL Lab این امکان را برای مهاجم فراهم میکند تا دستورات دلخواه SQL را روی دیتابیس اجرا کند. بسته به امتیاز کاربر دیتابیس، مهاجم علاوه بر خواندن داده ها، دستکاری یا حذف آنها ، میتواند روی سرور دیتابیس، کد دلخواه خود را اجرا کند.
راههای اصلاح:
در بین 2000 سرور آسیب پذیر، شرکتهای بزرگ، کوچک، سازمانهای دولتی و دانشگاهها وجود دارند. محققان برای برخی از آنها، هشدارهایی را صادر کردند، که بعد از مدت کوتاهی، پیکربندی را اصلاح کردند.
همچنین بیان شده است اگر از Superset استفاده میکنید، می‌توانید با اسکریپت زیر، آسیب پذیر بودن را بررسی کنید. اسکریپت با استفاده از ابزار flask-unsign و کلیدهای پیش فرض این موضوع را بررسی میکند.
 

% python3 CVE-2023-27524.py -h                           

usage: CVE-2023-27524.py [-h] --url URL [--id ID] [--validate] [--timeout TIMEOUT]

 optional arguments:

  -h, --help                    show this help message and exit

  --url URL, -u URL     Base URL of Superset instance

  --id ID                        User ID to forge session cookie for, default=1

  --validate, -v              Validate login

  --timeout TIMEOUT, -t TIMEOUT

  Time to wait before using forged session cookie, default=5s

اگر اسکریپت نشان دهد که آسیب پذیر هستید و سرور از طریق اینترنت قابل دسترسی است، هر چه سریعتر ان را اصلاح کنید یا از معرض دیده شدن از طریق اینترنت جلوگیری کنید.

مراجع

https://www.horizon3.ai/cve-2023-27524-insecure-default-configuration-in-apache-superset-leads-to-remote-code-execution/

https://github.com/horizon3ai/CVE-2023-27524

https://nvd.nist.gov/vuln/detail/CVE-2023-27524