فا

‫ آسيب پذيري خطرناك Drupal OpenID

 

1.   اطلاعات عمومي آسيب پذيري

اين آسيب پذيري در ماژول OpenID در هسته سيستم مديريت محتواي Drupal مي باشد كه به شخص حمله كننده اجازه ورود به سيستم را با نام كاربري ساير كاربران، از جمله مدير سايت مي دهد. اين آسيب پذيري در وهله ي اول كاربران سايت را تهديد ميكند و به صورت مستقيم تهديدي عليه سرور محسوب نميشود. براي يك سناريوي موفق، فردي كه مورد نفوذ قرار ميگيرد بايد با استفاده از سيستم OpenID وارد سايت شده باشد. همين امر باعث ميشود كه با وجود خطرناك بودن اين آسيب پذيري و طيف وسيعي از نسخه هاي آسيب پذير ، تعداد كمي از سايت هاي استفاده كننده از سيستم Drupal در خطر باشند. اين آسيب پذيري داراي شناسه CVE-2015-3234 و شامل نسخه هاي 6.X تا 6.35 و 7.X تا 7.37 ميباشد.

 1-1.  openID چيست ؟

  OpenID كه به اختصار OID نيز ناميده مي شود يك استاندارد باز و پروتكل غير متمركز از بنياد غير انتفاعي OpenID Foundation مي باشد كه به كاربران امكان احراز هويت را با استفاده از سايت هايي كه با اين سيستم همكاري دارند ميدهد. در اين روش OpenID Provider كه به اختصار OP ناميده مي شود يك URL در اختيار كاربر قرار مي دهد. با استفاده از تبادل URL بين كاربر نهايي و سايت پشتيباني كننده (Relying Party ، به اختصار RP) تصديق هويت بين RP و OP انجام ميپذيرد. به زبان ساده تر OpenID يك تكنولوژي است كه به كاربران اجازه ميدهد با يك بار ساخت اكانت در سايت هاي ارائه دهنده ي اين سرويس، به تمامي سايت هايي كه از اين سيستم پشتيباني ميكنند وارد شود. در حال حاضر كمپاني هاي بسياري از جمله AOL,Yahoo,Google,Microsoft,Paypal و ... به عنوان يك OpenID Provider سرويس OpenID را به كاربران ارائه ميدهند.

 

2.  توضيحات فني اين آسيب پذيري 

 در اين آسيب پذيري شخص نفوذگر از يكي از OP ها امكان جعل هويت را خواهد داشت. در واقع بعد از يك حمله ي موفق، نتيجه نهايي شكلي همانند Session Hijacking خواهد داشت. در يك سناريوي موفق ، شخص نفوذ گر در ابتدا با OpenID خود Authenticate ميشود ولي در هنگام بازگشت پاسخ به سمت سيستم Drupal ، با ايجاد تغيير در پاسخ، مقدار مربوط به OpenID هر كاربر ديگر سايت (از جمله مدير سايت) را در پاسخ قرار ميدهد. سيستم Drupal اين تغيير را متوجه ميشود و درصدد رفع اين مغايرت برمي آيد. ايراد اصلي كدنويسي در همين بخش سيستم است. سيستم فقط حالت خاصي را به منظور كشف تغيير بررسي ميكند و با توجه به كامل نبودن اين بررسي به اشتباه با يك درخواست از OP ، تمامي مشخصات مربوط به كاربري كه مورد نفوذ قرار ميگيرد را دريافت ميكند و در Session مربوط به شخص نفوذگر قرار ميدهد. در واقع به جاي اينكه مشخصات مربوط به نفوذگر را دريافت كند، به اشتباه مشخصات شخصي را كه مورد حمله قرار گرفته است دريافت ميكند. كد آسيب پذير در فايل openid.module در مسير modules/openid/openid.module قرار دارد. در كد هاي زير دو قطعه كد آسيب پذير و ايمن (پس از اعمال وصله ي رسمي Drupal) قرار گرفته اند. كد هايي كه تغيير داشته اند با رنگ قرمز ، كدهايي كه اضافه شده اند با رنگ سبز و كد هايي كه مكان آنها جا به جا شده است با رنگ خاكستري مشخص شده اند :

 

 

 شكل ۱ كد آسيب پذير

قطعه كد وصله شده :

 

 

شكل ۲ كد وصله شده

آسيب پذيري در قسمتي است كه چك كننده ي برابري شناسه ادعايي بازگشتي و شناسه ارسال شده به OP است. با تغيير شناسه ادعايي به شناسه مورد نظر كه شناسه هدف مي باشد در نهايت شناسه ادعايي مورد تاييد قرار مي گيرد و هويت شخص نفوذگر به هويت شخص هدف تغيير پيدا مي كند. در اين وصله قطعه كدي اضافه شده است تا علاوه بر تغيير شروط تاييد شناسه ادعايي در نهايت در صورت يكسان نبودن شناسه ادعايي ، شناسه بايد در اسناد XRDS موجود باشد. اسناد XRDS نوعي از اسناد بر پايه XML مي باشند كه در OpenID از آن ها به منظور تبادل اطلاعات استفاده ميشود.

3. روش وصله كردن 

بهترين روش براي رفع اين آسيب پذيري آپديت نسخه هاي آسيب پذير به آخرين نسخه ( 6.36 يا 7.38 ) مي باشد. راه ديگر جايگزيني فايل­هاي openid.module در پوشه­ي /modules/openid/ و openid_test.module در پوشه­ /modules/openid/tests/ با فايل هاي موجود در نسخه 7.38 يا 6.36 است. هرچند فايل هاي تست در اين آسيب پذيري نقش مستقيم نداشته و تغيير فايل openid.module در فولدر /modules/openid/ به تنهايي نيز براي رفع آسيب پذيري كفايت مي كند.

 

 

 

 

 

 


نظرات

بدون نظر
شما برای نظر دادن باید وارد شوید

نوشته

 
تاریخ ایجاد: 15 تیر 1394

دسته‌ها

امتیاز

امتیاز شما
تعداد امتیازها: 0