Уязвимост с отвличане на Facebook токен

Според ръководството на Facebook за разработчици (https://developers.facebook.com/docs/facebook-login/security) не е нужно да използвате access_token от някакъв вид клиенти на Facebook SDK, без да сте сигурни, че е генериран специално за вашето приложение във Facebook.

Чудя се какъв вид уязвимости има тук. Защо трябва да ме интересува кое приложение е получило токен, ако мога да го използвам, за да правя API извиквания и да получавам потребителски данни чрез него?

Отвличане на токени

За да разберете как се случва това, представете си естествено приложение за iOS, което иска да прави API извиквания, но вместо да го прави директно, комуникира със сървър, притежаван от същото приложение, и предава на този сървър токен, генериран с помощта на iOS SDK. След това сървърът ще използва токена за извършване на API повиквания.

Крайната точка, която сървърът използва за получаване на токена, може да бъде компрометирана и други биха могли да му предадат токени за достъп за напълно различни приложения. Това очевидно би било несигурно, но има начин да се предпазите от това - токените за достъп никога не трябва да се приемат, че са от приложението, което ги използва, вместо това те трябва да се проверяват с помощта на крайни точки за отстраняване на грешки.


person Ed Gomoliako    schedule 21.01.2014    source източник
comment
Е, някой може да прехвърли токен за друго приложение и тогава вие ще се опитате да извършите действие с друго приложение, което ще доведе до грешки или несигурно поведение.   -  person Jimmy Kane    schedule 21.01.2014


Отговори (1)


Тези типове уязвимости са специфични за приложението - един сценарий, за който се сещам, е следният:

Представете си, че използвате Facebook удостоверяване като механизъм за SSO и сте създали приложение с уеб услуга, която връща частна информация на удостоверените потребители. Тази уеб услуга се нарича /secretdocuments/download, която приема токен за достъп като параметър.

Ако уеб услугата проверява само дали токенът за достъп, който получава, е за потребител, който има в базата данни (чрез извикване на /me и след това търсене в DB), тогава злонамерен човек може:

  1. Създайте друго приложение за „примамка“.
  2. Изпратете връзка към това приложение на някой от вашите потребители и ги насърчете да го инсталират.
  3. Този потребител се удостоверява с приложението за стръв и се генерира токен за достъп. Приложението за стръв изпраща този маркер за достъп до злонамерения потребител.
  4. Злонамереният потребител взема този маркер за достъп и извиква вашата /secretdocuments/download уеб услуга с него.
  5. Вашата уеб услуга проверява само дали маркерът за достъп е за потребител, който е в базата данни и връща личната информация на злонамерения потребител.

В този сценарий вашата уеб услуга трябва да провери дали предоставеният маркер за достъп е генериран от вашето приложение.

person madebydavid    schedule 21.01.2014