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

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.