Wykorzystywanie downgrade PKCE w OAuth 2.0 w klientach natywnych

Subtelna ścieżka wstrzyknięcia kodu autoryzacyjnego, gdy klienci publiczni w cichu wracają z S256 do plain PKCE.

· aktualizacja · 3 min czytania
#oauth#web#auth#cve

Tło

OAuth 2.0 PKCE (RFC 7636) zaprojektowano, aby neutralizować przechwycenie kodu autoryzacyjnego w klientach publicznych. W praktyce wiele SDK nadal akceptuje starszą transformację plain, gdy negocjacja S256 się nie powiedzie — a znacząca część dostawców tożsamości po cichu ją honoruje.

Ten wpis dokumentuje łańcuch, który zamienia ten fallback w przejęcie konta na produkcyjnym kliencie natywnym.

Downgrade

Gdy klient wysyła dwa równoległe żądania autoryzacji — jedno z code_challenge_method=S256, a drugie bez tego parametru — wiązanie sesji u dostawcy zwija się do najnowszego żądania. Odzyskany kod można wymienić na token z weryfikatorem kontrolowanym przez atakującego.

GET /authorize?response_type=code
  &client_id=app
  &code_challenge=abc
  &code_challenge_method=plain

Wpływ

Przejęcie konta jednym dotknięciem z złośliwej aplikacji posiadającej uprawnienie universal link.

Mitygacja

Odrzucaj każdą wymianę tokena, w której oryginalny code_challenge_method jest nieobecny lub ustawiony na plain dla klienta, który wcześniej ogłaszał S256. Wiąż metodę z sesją, a nie z pojedynczym żądaniem.


sharelinkedinx / twitter