OAuth 2.0 ve OIDC Akış Saldırıları: Kimlik Doğrulama Güvenliği
OAuth yetkilendirme, OIDC kimlik doğrulama içindir ve token akışlarına dayanır. En sık saldırılar tablosu, redirect_uri ile state'in neden kritik olduğu, token imza ve hedef doğrulama savunması ve KAOS ile kanıt temelli test.
Hızlı cevap: OAuth 2.0 ve OpenID Connect (OIDC) güvenliği, bir uygulamanın kullanıcı adına yetki almak ve kimlik doğrulamak için kullandığı token akışlarını manipülasyona karşı korumaktır. OAuth yetkilendirme (bir uygulamanın kullanıcı verisine erişme izni), OIDC ise kimlik doğrulama (kullanıcının kim olduğu) için kullanılır ve ikisi de token alışverişine dayanır. En sık saldırılar şunlardır: yönlendirme adresinin denetimsiz bırakılması sonucu token çalma, durum parametresinin (state) doğrulanmaması sonucu istek sahteciliği, yetkilendirme kodunun araya girilerek ele geçirilmesi ve token doğrulama zayıflıkları. Kök çözüm, izin verilen yönlendirme adreslerini tam eşleşmeyle sabitlemek, state ve PKCE ile akışı bağlamak, token imzasını ve hedefini her zaman doğrulamak ve mümkün olan en güvenli akış türünü kullanmaktır.
Bugün pek çok uygulama girişi Google, Apple ya da kurumsal kimlik sağlayıcı üzerinden yapıyor. Bu kolaylık OAuth ve OIDC ile sağlanır, ama akış yanlış kurulduğunda saldırgan başka bir kullanıcının hesabına girebilir. Bu yazı, OAuth ve OIDC akışlarındaki en sık açıkları ve doğru savunmayı anlatır.
OAuth ve OIDC farkı
Bu ikisi sık karıştırılır. OAuth 2.0 yetkilendirme çerçevesidir: bir uygulamanın, kullanıcının başka bir serviste tuttuğu veriye sınırlı erişim almasını sağlar. OIDC ise OAuth üzerine kurulu bir kimlik katmanıdır: kullanıcının kim olduğunu doğrular ve bir kimlik token'ı üretir. Kısaca OAuth "bu uygulama şu veriye erişebilir mi", OIDC "bu kullanıcı gerçekten o mu" sorusunu yanıtlar.
En sık OAuth ve OIDC saldırıları
| Saldırı | Ne yapıyor | Sonuç |
|---|---|---|
| Açık yönlendirme | redirect_uri denetimsiz | Token ya da kodu saldırgana yönlendirme |
| state eksikliği | Akış isteğe bağlanmaz | İstek sahteciliği, hesap bağlama |
| Kod araya girme | Yetkilendirme kodu çalınır | Kullanıcı adına token alma |
| Token doğrulama zayıflığı | İmza ya da hedef denetlenmez | Sahte ya da başka uygulamanın token'ı kabulü |
| İzin ekranı atlatma | Sessiz yeniden yetkilendirme kötüye kullanımı | Kullanıcı onayı olmadan erişim |
Açık yönlendirme, OAuth'un en klasik açığıdır ve mantık olarak açık yönlendirme (open redirect) ile aynıdır: redirect_uri tam doğrulanmazsa, token saldırgana gider.
Yönlendirme ve state, iki kritik nokta
OAuth akışında en sık iki hata redirect_uri ve state ile ilgilidir. redirect_uri, akış sonunda token'ın gönderileceği adrestir; bu adres sunucuda tam eşleşmeyle beyaz listede olmalıdır. Gevşek bir eşleşme, saldırganın kendi adresine token yönlendirmesine olanak tanır. state parametresi ise akışı başlatan isteğe bağlar; doğrulanmazsa saldırgan kendi hesabını kurbanınkine bağlayabilir. Bu, CSRF korumasının OAuth'taki karşılığıdır.
Token doğrulama
OIDC'de üretilen kimlik token'ı, uygulamaya kullanıcının kim olduğunu söyler. Bu token'ın imzası, süresi ve hedefi (hangi uygulama için üretildiği) her zaman doğrulanmalıdır. İmzası doğrulanmayan bir token taklit edilebilir; hedefi denetlenmeyen bir token başka bir uygulamadan çalınıp kullanılabilir. Bu, JWT güvenliği ile doğrudan ilişkilidir, çünkü OIDC token'ları genelde JWT biçimindedir.
Doğru savunma
1. redirect_uri tam eşleşme
İzin verilen yönlendirme adresleri sunucuda tam eşleşen bir beyaz listede tutulmalıdır. Alt dize ya da joker eşleşme kullanılmamalıdır.
2. state ve PKCE
Her akış, state parametresi ve mümkünse PKCE ile başlatan isteğe bağlanmalıdır. Bu, kod araya girme ve istek sahteciliğini engeller.
3. Token imzasını ve hedefini doğrula
Kimlik token'ının imzası, süresi ve hedefi her zaman sunucuda doğrulanmalıdır. Doğrulanmamış token asla güvenilir sayılmamalıdır.
4. En güvenli akışı seç
Mümkün olan en güvenli akış türü seçilmeli, token'ı adres çubuğunda taşıyan eski ve riskli akışlardan kaçınılmalıdır.
KAOS ile OAuth ve OIDC testi
DSET'in yerel yapay zekâ güvenlik motoru KAOS, OAuth ve OIDC akışlarını kanıt temelli test eder. redirect_uri doğrulamasını farklı vektörlerle dener, state ve PKCE eksikliğini ölçer, token doğrulamasının imza ve hedef denetimini yapıp yapmadığını kontrollü biçimde sınar. Bir açığın gerçekten başka kullanıcının hesabına erişim sağlayıp sağlamadığını doğrular ve yalnızca istismar edilebilir bulguyu, yanlış pozitif gürültüsü olmadan raporlar. Bu, hesap ele geçirme yüzeyinizi kimlik katmanında görünür kılar.
Sık sorulan sorular
OAuth ve OIDC aynı şey mi? Hayır. OAuth yetkilendirme, OIDC kimlik doğrulama içindir. OAuth bir uygulamanın veriye erişimini yönetir; OIDC kullanıcının kim olduğunu doğrular ve OAuth üzerine kurulur. İkisi birlikte modern giriş akışlarını oluşturur.
redirect_uri joker kullanmak neden tehlikeli? Çünkü gevşek eşleşme, saldırganın kendi kontrolündeki bir adresi geçerli sayılmasını sağlayabilir ve token oraya yönlendirilir. redirect_uri her zaman tam eşleşen bir beyaz listede olmalıdır.
state parametresi olmadan olur mu? Olmamalı. state, akışı başlatan isteğe bağlar ve istek sahteciliğini engeller. state olmadan saldırgan kendi hesabını kurbanınkine bağlayabilir. PKCE ile birlikte kullanılması önerilir.
Kaynaklar
- OAuth 2.0 Security Best Current Practice, IETF: https://datatracker.ietf.org
- DSET Siber Güvenlik ve Pentest: https://dset.com.tr/hizmetler
Uygulamanızın OAuth ve OIDC giriş akışını yönlendirme, state ve token doğrulama açısından çalışan bir kanıtla test ettirmek için DSET ile iletişime geçin. Ankara Hacettepe Teknokent laboratuvarımızdan sızma testi ve güvenli kod denetimi sağlıyoruz.
Kimliğinizi doğrulayın
Yetkilendirilmiş erişim alanı. Tüm giriş denemeleri kayıt altına alınır.