WordPress

یک آسیب‌پذیری ساده‌ی DoS و از نوع application-level اما درعین‌حال جدی بر روی پلتفرم مدیریت محتوای WordPress کشف شده است که می‌تواند به هرکسی اجازه دهد که حتی با یک دستگاه و بدون اینکه از مقدار زیادی پهنای باند (مشابه میزان مورداستفاده برای حملات DDoS) استفاده کند، بیشتر وب‌سایت‌های بر پایه WordPress را از کار بیندازد.

ازآنجاکه این شرکت این آسیب‌پذیری را برطرف نکرده است، این آسیب‌پذیری (CVE-2018-6389) همچنان وصله نشده باقی‌مانده است[۱] و تقریباً بر روی تمام نسخه‌های WordPress  که در ۹ سال گذشته منتشر شده‌اند، شامل آخرین نسخه پایدار WordPress  (نسخه ۴٫۹٫۲) تأثیرگذار است.

این آسیب‌پذیری به‌وسیله یک محقق امنیتی به نام Barak Tawily، شناسایی شده است. این آسیب‌پذیری بر روی شیوه‌ای قرار دارد که load-scripts.php، یک اسکریپت داخلی در مدیریت محتوایWordPress ، درخواست‌های تعریف‌شده توسط کاربر را پردازش می‌کند.

فایل load-scripts.php فقط برای کاربران دارای سطح دسترسی مدیر تولید شده است تا به یک وب‌سایت کمک کند تا عملکرد خود را بهبود بخشد و صفحات را سریع‌تر باز کند. این فایل این کار را از طریق یکی کردن فایل‌های جاوا اسکریپت به یک درخواست انجام می‌دهد.

بااین‌حال برای اینکه load-scripts.php بر روی صفحه ورود مدیر و قبل از ورود کار کند، نویسندگان WordPress هیچ‌گونه احراز هویتی را برای آن قرار ندادند و درنهایت این اتفاق می‌افتد که این ویژگی در دسترس همه افراد قرار می‌گیرد.

load-scripts.php

بسته به افزونه‌ها و ماژول‌هایی که شما نصب کرده‌اید، فایل load-scripts.php به‌طور انتخابی فایل‌های جاوا اسکریپت درخواستی را با گذراندن نام‌های آن‌ها به پارامتر load که با یک کاما از یکدیگر جدا شده‌اند، فرامی‌خواند (مانند لینک آورده شده در زیر):

https://your-wordpress-site.com/wp-admin/load-scripts.php?c=1&load=editor,common,user-profile,media-widgets,media-gallery

در هنگام راه‌اندازی یک وب‌سایت، load-scripts.php (که در head صفحه آمده است) تلاش می‌کند تا هر نام فایل جاوا اسکریپتی که در URL داده شده را پیدا کند، محتویات خود را به یک فایل اضافه کند و مجدداً آن را به مرورگرِ وب کاربر ارسال می‌کند.

چگونه حمله DoS بر روی WordPress کار می‌کند؟

wp_scripts

به گفته این محقق، می‌توان به‌راحتی load-scripts.php را مجبور کرد تا تمام پرونده‌های جاوا اسکریپت احتمالی (یعنی ۱۸۱ اسکریپت) را با عبور از نام آن‌ها در URL بالا فراخوانی کرده و وب‌سایت مورد هدف را با استفاده از مصرف بالای CPU و حافظه سرور، کمی کُند کند.

Tawily دراین‌باره می‌گوید: “یک لیست تعریف‌شده ($ wp_scripts) وجود دارد که می‌تواند توسط کاربران به‌عنوان بخشی از پارامتر load درخواست داده شود. اگر مقدار درخواست شده وجود داشته باشد، سرور یک عمل خواندن I/O را برای یک مسیر درست همراه با مقدار عرضه‌شده از طرف کاربر انجام می‌دهد.”

اگرچه یک درخواست تنها برای از کار انداختن کل یک وب‌سایت برای بازدیدکنندگان آن کافی نیست، Tawily از یک اسکریپت پایتونِ اثبات ادعا به نام doser.py استفاده کرد که باعث می‌شود تعداد زیادی درخواست هم‌زمان برای یک URL ارسال شود و در تلاش برای اینکه از منابع سرور CPU تا حد ممکن استفاده کرده و وب‌سایت موردنظر را از کار بیندازد.

وب‌سایت Hacker News اعتبار این بهره‌بردار DoS را تأیید کرده است که با موفقیت یکی از وب‌سایت‌های آزمایشی بر پایه WordPress را در یکی از سرورهای متوسط VPS این خبرگزاری از کار اندخته است.

Tawily می‌گوید: “این نکته قابل‌توجه است که load-scripts.php نیازمند هیچ‌گونه تأییدی نیست و یک کاربر ناشناس هم می‌تواند آن را اجرا کند. پس از ۵۰۰ درخواست، سرور دیگر پاسخی ارسال نخواهد کرد و یا اینکه خطاهای ۵۰۲/۵۰۳/۵۰۴  را بازمی‌گرداند.”

بااین‌حال، حمله از طریق یک ماشین، با یک ارتباط ۴۰ مگابیتی، قادر نبود تا یک وب‌سایت آزمایشی دیگر را که بر روی یک سرور اختصاصی قرار داشت توسط قدرت بالای پردازش و حافظه از کار بیندازد.

اما این بدان معنا نیست که این نقص بر روی وب‌سایت‌های بر پایه WordPress در حال اجرا بر روی سرورهای سنگین مؤثر نباشد، زیرا حمله application-level به‌طورکلی نیاز به بسته‌ها و پهنای باید کمتری دارد تا به هدف از کار انداختن یک وب‌سایت دست یابد.

بنابراین مهاجمانِ دارای پهنای باند بیشتر یا botهای کمتر، می‌توانند از این نقص برای هدف قرار دادن وب‌سایت‌های بر پایه WordPress بزرگ و محبوب استفاده کنند.

هیچ وصله‌ای منتشر نشده است!

Tawily همراه با افشای کامل، یک اثبات ویدئویی برای حمله Denial of Service بر روی WordPress ارائه داده است. شما می‌توانید این ویدیو را تماشا کنید تا کارایی این حمله را در عمل ببینید[۲].

بااینکه آسیب‌پذیری‌های DoS خارج از حوزه برنامه bug bounty شرکت WordPress هستند، Tawily مسئولانه این آسیب‌پذیری DoS را به تیم WordPress و از طریق پلتفرم HackerOne گزارش کرده است.

بااین‌حال، این شرکت از پذیرش این مسئله خودداری کرد و گفت که از این نوع اشکال “باید در سطح سرور یا سطح شبکه به‌جای سطح برنامه، جلوگیری شود” که خارج از کنترل WordPress است.

این آسیب‌پذیری به نظر می‌رسد جدی باشد چراکه WordPress حدود ۲۹ درصد از وب را در اختیار دارد و میلیون‌ها وب‌سایت را نسبت به حمله مهاجمان آسیب‌پذیر خواهد کرد و آن‌ها را برای کاربران مشروع خود نیز از دسترس خارج می‌کند.

برای وب‌سایت‌هایی که نمی‌توانند خدماتی را ارائه دهند که در برابر حملات لایه کاربردی DDoS محافظت شوند، این محقق یک نسخه از WordPress اصلاح‌شده را فراهم کرده است که شامل این آسیب‌پذیری نیست [۳].

بااین‌حال، ما به کاربران توصیه نمی‌کنم که CMS اصلاح‌شده را نصب کنند، حتی اگر از یک منبع قابل‌اعتماد باشد.

علاوه بر این، این محقق همچنین یک اسکریپت bash ساده را که این مسئله را حل می‌کند ارائه کرده است[۴].

منابع

[۱] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6389

[۲] https://youtu.be/nNDsGTalXS0

[۳] https://github.com/quitten/wordpress

[۴] https://github.com/Quitten/WordPress/blob/master/wp-dos-patch.sh

[۵] https://thehackernews.com/2018/02/wordpress-dos-exploit.html