
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.
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=plainWpł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.