دروپال سامانهی مدیریت محتوای متنبازی است که میلیونها وبگاه مهم با استفاده از آن ایجاد شدهاند. این سامانه توسط یک جامعهی بسیار فعالی از علاقهمندان توسعه داده و پشتیبانی میشود.
آخرین نسخهی این سامانه که با نام دروپال ۷ شناخته میشود، در اغلب سایتهای دروپالی مورد استفاده قرار گرفته است و به همین دلیل آسیبپذیری این سامانه، زنگ خطری برای بسیاری از وبگاههای دروپالی میباشد.
در حین بررسی کد این CMS، یک آسیبپذیری تزریق SQL در هستهی دروپال کشف شده است که مهاجم میتواند با سوءاستفاده از آن کنترل کامل وبگاه را با مجوزهای مدیر وبگاه به دست بگیرد. حتی مهاجم میتواند بدون به جا گذاشتن هیچ اثری که قابلیت رهگیری داشته باشد به اجرای کد PHP بپردازد.
این خطای امنیتی از اوایل سال ۲۰۱۱ کشف شده بود اما به صورت مخفی در چارچوب هستهی این سامانهی مدیریت محتوای محبوب تا به امروز باقی مانده است. دروپال برای رفع این آسیبپذیری وصلهای را ارائه کرده است و به همهی کاربران توصیه کرده است وبگاههای خود را به نسخهی 7.32 ارتقاء دهند.
توضیحات فنی
تمام درخواستهای پایگاهداده در دروپال از طریق گزارههای آماده انجام میشود، در این گزارهها برخی فضاهای خالی برای وارد کردن اطلاعات کاربر در نظر گرفتهاند:
SELECT * FROM {users} WHERE name IN (:name_0, :name_1)
در مثال بالا دو عبارت name_0 و name_1 فضاهای خالی این دستور هستند، با استفاده از این روش مهاجم نمیتواند درخواست SQL را از نو ایجاد و ارسال کند و درواقع باید الگوی درخواست از پایگاهداده را رعایت کند. دروپال برای اینکه دست کاربران را برای ایجاد درخواستهای SQL کمی باز بگذارد، از سازوکار آرایه برای گسترش name به name_0 و name_1 استفاده کرده است. این سازوکار باید ورودیهای آرایه را مدیریت کند که البته آسیبپذیری از همینجا شکل میگیرد. تابع به جای مقداری که باید برگرداند، مقادیر name_$key0 وname_$key1 را برمیگرداند که اگر مهاجم بتواند مقادیر key0 و key1 را کنترل کند، میتواند گزارهی SQL را به صورت زیر تغییر دهد:
SELECT * FROM {users} WHERE name IN (:name_test) OR name = 'Admin' -- , :name_test)
که منجر به تزریق درخواست SQL میشود و مهاجم میتواند کنترل کامل وبگاه را در دست بگیرد. آسیبپذیریهای دروپال با شناسهی CVE-2014-3704 به صورت عمومی در حال استفاده است و عدم بهروزرسانی وبگاه عواقب خطرناکی را به همراه دارد.