دو زبان برنامه‌نویسی مشهور، جاوا و پایتون(۱)، دارای مشکلات امنیتی مشابهی هستند که می‌توانند به‌منظور فرستادن پست‌های الکترونیک غیرمجاز و bypass کردن هر نوع فایروالی مورد بهره‌برداری قرار گیرند.

پایتون

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

این دو نقص وصله نشده بر روی روشی که زبان‌های برنامه‌نویسی جاوا و پایتون لینک‌های پروتکل انتقال فایل یا همان FTP را مدیریت می‌کنند قرار دارد. در این روش این زبان‌های برنامه‌نویسی پارامتر نام کاربری را syntax-check نمی‌کنند، که به گفته محققان امنیتی منجر به عیب تزریق پروتکل می‌شود.

تزریق FTP از طریق جاوا و پایتون برای فرستادن پست‌های الکترونیک SMTP غیرمجاز

در یک گزارش منتشر شده در هفته گذشته[۱]، محقق امنیتی Alexander Klink جزئیات آسیب‌پذیری تزریق پروتکل FTP را در (۲)XXE منتشر کرد که به مهاجمان اجازه می‌دهد دستورات مخرب غیر FTP را درون یک درخواست ارتباط FTP تزریق کنند.

برای اثبات این حمله، Alexander نشان داد که چگونه می‌توان یک پست الکترونیک غیرمجاز را از طریق SMTP(3) در یک ارتباط FTP ارسال کرد، حتی اگر ارتباط FTP به شکست منجر شود، سرورهای FTP از احراز هویت پشتیبانی می‌کنند اما CRها(۴) یا LFها(۵) موجود را در نام‌های کاربری بررسی نمی‌کنند.

Alexander این‌گونه نتیجه‌گیری کرده است که این حمله به‌خصوص در یک سناریو جالب خواهد بود که شما می‌توانید از طریق یک ماشین که عمل تجزیه XML را انجام می‌دهد به سرورِ میلِ داخلی بدون هیچ‌گونه محدودیتی دسترسی داشته باشید.

تزریق FTP جاوا یا پایتون اجازه Bypass کردن فایروال را می‌دهد.

بااین‌حال، دو روز بعد از آشکار شدن این آسیب‌پذیری‌ها  و در یک گزارش امنیتی جداگانه، محقق امنیتی Timothy Morgan از شرکت امنیتی Blindspot Security سناریو‌های بهره‌برداری تهدیدآمیزتری را عنوان کرد که کنترل‌کننده‌های FTP URL در جاوا و پایتون می‌توانند برای bypass کردن فایروال‌ها مورد استفاده واقع شوند[۲].

Morgan می‌گوید که همچنین نقص تزریق پروتکل FTP می‌تواند برای گول زدن فایروال قربانی مورد استفاده واقع شود تا ارتباطات TCP را از وب به سیستم آسیب‌پذیر میزبان بر روی پورت‌های high شامل ۱۰۲۴ تا ۶۵۵۳۵ قبول کند.

علاوه بر این، حمله تزریق پروتکل FTP، به یک مسئله امنیتی ۱۰ ساله در پروتکل FTP که classic mode FTP نامیده می‌شود و نوعی مکانیزم ناایمن فعل‌وانفعالات FTP بین مشتری و سرور است، مربوط می‌شود و متأسفانه بسیاری از تولیدکنندگان فایروال همچنان از آن به‌صورت پیش‌فرض پشتیبانی می‌کنند.

هنگامی‌که ارتباط classic mode FTP آغاز می‌شود، فایروال به‌صورت موقت پورت‌های در بازه ۱۰۲۴ تا ۶۵۵۳۵ را در دستور PORT تعیین شده‌اند، باز می‌کند که این امر منجر به ایجاد ریسک‌های امنیتی می‌شود.

با استفاده از مشکل تزریق پروتکل FTP در جاوا و پایتون، یک مهاجم که آدرس IP داخلی میزبان را می‌داند می‌تواند یک ارتباط classic mode FTP را آغاز کند که در نهایت می‌تواند از آن‌ برای پیش بردن اهداف خصمانه خود بهره ببرد.

Morgan مشخص کرده است که یک مهاجم می‌تواند یک پورت را در فایروال مورد هدف تنها از طریق ۳ درخواست باز کند:

  1. شناسایی آدرس IP فرد قربانی. این امر نیاز به این دارد که مهاجم یک URL را ارسال کند و منتظر نحوه برخورد کاربر با آن باشد، سپس یک URL دیگر را امتحان کند تا اینکه حمله موفقیت‌آمیز باشد.
  2. مشخص کردن packet alignment و اطمینان حاصل کردن از اینکه دستور PORT در موقع مناسب تزریق شده است و در نهایت منجر به انجام شدن حمله شود.
  3. بهره‌برداری از آسیب‌پذیری

هر درخواست اضافی می‌تواند مورد استفاده قرار گیرد تا یک پورت TCP را باز کند.

عیب تزریق پروتکل به راحتی قابل بهره‌برداری است.

بااین‌حال، این محقق هشدار داده است که بهره‌بردار او می‌تواند به‌منظور حملات MitM(7)، SSRF(6)، XEE و دیگر حملات موجود مورد استفاده قرار گرفته و در هنگام bypass کردن فایروال، میزبان حتی بدون داشتن جاوا بر روی سیستم خود می‌تواند مورد حمله واقع شود.

Morgan می‌گوید: “اگر یک کاربر دسکتاپ متقاعد شود تا هنگامی‌که جاوا بر روی سیستمش نصب است، از یک وب‌سایت مخرب بازدید کند حتی اگر aplet های جاوا غیرفعال باشد، مهاجمان می‌توانند Java Web Start را راه‌اندازی کنند تا یک فایلJNLP(8)  را تجزیه کنند. این فایل‌ها می‌توانند شامل URL های مخرب باشند که در نهایت منجر به ایجاد این آسیب‌پذیری می‌شوند.”

Morgan همچنین به این نکته اشاره می‌کند که: “هنگامی‌که جاوا فایل‌‌های JNLP را قبل از دادن هشدار امنیتی به کاربر تجزیه می‌کند، این حمله می‌تواند کاملاً موفقیت‌آمیز باشد بدون اینکه کاربر متوجه این حمله شده باشد (مگر اینکه مرورگر خودش به کاربر در ارتباط به راه‌اندازی شدن Java Web Start هشدار دهد.”

بر طبق گفته Morgan، یک نقص تقریباً مشابه نیز در کتابخانه‌های urllib و urllib2 وجود دارد، هرچند این تزریق به نظر می‌رسد به حملاتی که اسامی دایرکتوری در URL مشخص شده‌اند، محدود می‌شود.

این عیب تزریق پروتکل همچنان وصله نشده باقی مانده است.

Morgan پیش‌ازاین گفته بود که عیب تزریق پروتکل FTP در ژانویه ۲۰۱۶ به تیم پایتون و در نوامبر ۲۰۱۶ به شرکت اوراکل از طریق شرکت او گزارش داده شده بود، اما هیچ‌یک از این دو به‌منظور بر طرف کردن این آسیب‌پذیری به‌روزرسانی به خصوصی منتشر نکردند.

Morgan یک بهره‌بردار اثبات ادعا(۹) را آماده‌سازی کرده است اما هنوز آن را به صورت عمومی منتشر نکرده است و گفته است تا زمانی که اوراکل و پایتون به این افشاسازی پاسخ داده و وصله‌های مربوطه را منتشر کنند، صبر خواهد کرد.

بهره‌بردار تولید شده توسط Morgan به‌طور موفقیت‌آمیزی علیه شبکه‌های Alto و فایروال‌های Cisco ASA مورد آزمایش قرار گرفته است، گرچه محققان بر این باورند که بسیاری از فایروال‌های تجاری به حملات تزریق جریان(۱۰) FTP نیز آسیب‌پذیر هستند.

بنابراین تا زمانی که وصله‌های مربوطه منتشر شوند، Morgan پیشنهاد داده است که کاربران Java را از روی سیستم‌های شخصی و همچنین مرورگرهایشان پاک کنند و بر روی تمامی فایروال‌ها گزینه پشتیبانی از classic mode FTP را غیرفعال کنند.

 

منابع

[۱] https://shiftordie.de/blog/2017/02/18/smtp-over-xxe/

[۲] http://blog.blindspotsecurity.com/2017/02/advisory-javapython-ftp-injections.html

[۳] http://thehackernews.com/2017/02/python-java-ftp-protocol-injection.html


(۱) python
(۲) Java’s XML eXternal Entity
(۳) Simple Mail Transfer Protocol
(۴) carriage returns
(۵) line feeds
(۶) man-in-the-middle
(۷) server-side request forgery
(۸) Java Network Launch Protocol
(۹) proof-of-concept (PoC)
(۱۰) stream