من در حال حاضر به چارچوب مجوز OAuth 2 نگاه می کنم. دیروز شروع به تعجب کردم که چگونه برای جلوگیری از حمله نیروهای بیرحمانه در جریان اعتبار مجوز کد (https://tools.ietf.org/html/rfc6749#section-4.1). برای روشن شدن، جریان به صورت زیر عمل می کند:
- مرورگر درخواست هایی را برای یک منبع محافظت شده در یک مشتری oAuth 2 (
client.example.com
) می فرستد.
-
مرورگر به نقطه پایانی مجوز هدایت می شود سرور مجوز:
GET / authorize؟ response_type = کد & client_id = s6BhdRkqt3 & state = xyz
& redirect_uri = https٪ 3A٪ 2F٪ 2Fclient٪ 2Eexample٪ 2Ecom٪ 2Fcb
با حالت خاصی از رشته تصادفی تولید شده توسط مشتری oAuth 2
- ورود به سیستم مرورگر در سرور مجوز
-
هنگامی که به درستی وارد سیستم شوید، مرورگر با پارامترهای پرس و جو redirect-uri
با برخی از پارامترهای پرس و جو
https://client.example.com/cb؟code=SplxlOBeZQQYbYS6WxSbIA&state=xyz
مسیر رونویسی باید همانند فرستنده توسط مشتری و توتون یک رشته تولید شده توسط سرور مجاز است.
-
مشتری تایید می کند که آیا پارامتر حالت متعلق به جلسه عامل کاربر (برای جلوگیری از XSRF) و درخواست توالی دسترسی از سرور مجوز با استفاده از کد
پارامتر پرس و پایه احراز هویت با اعتبار مشتری:
POST / token HTTP / 1.1
میزبان: server.example.com
مجوز: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type : application / x-www-form-urlencoded [19659012] grant_type = authorization_code & code = SplxlOBeZQQYbYS6WxSbIA و redirect_uri = https٪ 3A٪ 2F٪ 2Fclient٪ 2Eexample٪ 2Ecom٪ 2Fcb
ممکن است یک مهاجم یک بار دیگر تکرار مراحل 2 و 4 را انجام دهد، بدون اینکه وارد سرور مجاز شوید :
- برو به یک منبع محدود در
client.example.com
.
- تجزیه پارامتر درخواست
در مسیر هدایت (و ذخیره کوکی / شناسه جلسه) [19659018] با رفتن به https://client.example.com/cb؟code=value1&state=xyz (با کوکی / شناسه جلسه دریافت شده در 1) سعی کنید یک نشانه برای value1
دریافت کنید.
دوباره این کار را انجام دهید و دوباره برای کد = ارزش 2
، کد = ارزش 3
، …
هیچ چیز در بین دو تلاش مهاجم مشابه نیست، که باعث می شود سرور مجاز برای ذخیره سازی تعدادی تلاش و بلوک پس از یک شماره خاص.
با این حال، احتمالا یک پنجره کوچک برای مهاجم برای انجام atta ck، از آنجا که کد فقط در سرور بین مراحل 4 و 5 در جریان معتبر است (به جز اگر مشتری در جایی بین 4 و 5 سقوط می کند.)
دیگر
- دارای یک کد بزرگ تولید شده توسط سرور مجوز [19659018] کدهای موجود فقط برای یک مدت زمان محدود
کدام چیز دیگری است که ما می توانیم برای جلوگیری از حمله توصیف شده انجام دهیم؟