Google OAuth'ta bazı işlevsel aksaklıklar yaşanıyor
(trufflesecurity.com)- Google OAuth’un email claim alanına güvenerek oturum açma yetkisini belirleyen servislerde, işten ayrılan kişiler şirketin Google kuruluşundan kaldırıldıktan sonra bile Slack·Zoom gibi uygulamalara erişimini sürdürebilir
- Gmail dışı e-posta adresleriyle de Google hesabı oluşturulabilir; şirket e-postasındaki takma adlar ve artı adres yönlendirmesi kullanılırsa, kuruluşa ait olmayan bir Google hesabı şirket alan adına ait e-posta claim’i gönderebilir
- Bu Gmail dışı hesap, şirketin Google kuruluşunun yönetici ekranında veya kullanıcı listesinde görünmez; ancak birçok servis yalnızca e-postanın sonundaki alan adına bakarak oturum açmaya izin verir
- Kuruluşlar Google ile oturum açmayı kapatıp SAML’ı sıkı biçimde uygulayarak riski azaltabilir; ancak bazı servisler veya dahili uygulamalar bu seçeneği sunmayabilir ya da SAML’ı desteklemeyebilir
- Google’a 4 Ağustos’ta bildirim yapıldı, 5 Ekim’de $1337 ödül ödendi; 16 Aralık’ta, 134 gün sonra kamuya açıklandı, ancak açıklama anına kadar Google’ın azaltım değişikliği dağıtılmamıştı
Güvenlik açığı açıklaması ve zaman çizelgesi
- Google OAuth güvenlik açığı nedeniyle, şirketten offboarding’i yapılan ve Google kuruluşundan kaldırılan bir çalışan Slack·Zoom gibi uygulamalara erişimini süresiz olarak koruyabilir
- Açıklama anına kadar Google, bu riski azaltan bir değişiklik dağıtmamıştı
- Zaman çizelgesi şöyle
- 4 Ağustos: Google’a bildirim yapıldı ve yüzlerce uygulamanın etkilenme olasılığı iletildi
- 7 Ağustos: Sorun triage edildi
- 5 Ekim: Google sorun için $1337 ödeme yaptı
- 25 Kasım: Zoom·Slack dahil etkilenen onlarca uygulamaya toplu olarak özel bildirim yapıldı
- 16 Aralık: Google’a bildirimden 134 gün sonra kamuya açıklandı
email claim’i tanımlayıcı olarak kullanmanın riski
- Truffle Security’nin Forager girişi daha önce Descope’un Microsoft OAuth güvenlik açığından etkilenmişti
- O dönemde Microsoft’un doğrudan oluşturmadığı veya doğrulamadığı Email claim’in gönderilebildiği ve email claim’in genel olarak güvenilir bir tanımlayıcı olmadığı doğrulandı
- Google’ın OIDC belgeleri de Email’i birincil tanımlayıcı olarak kullanmama konusunda uyarıyor
email_verifiedclaim’i de sıra dışı bir nokta olarak ele alındı, ancak doğrulanmamış e-postalardan email claim oluşturmanın bir yolu doğrulanamadı- Buna karşılık email claim’in kendisini kötüye kullanmaya yönelik yeterince örnek doğrulandı
Gmail dışı Google hesapları ve yinelenen email claim
- Google hesabı, Gmail adresi olmasa da mevcut bir e-posta adresiyle oluşturulabilir
- Örneğin Yahoo e-posta adresiyle Google hesabı oluşturulabilir
- Bu hesap, Gmail dışı e-postayı ayarlamış haldeyken ilgili e-postanın email claim’ini gönderebilir
- Google belgelerinin e-postayı birincil tanımlayıcı olarak kullanmamayı önermesinin nedenlerinden biri, iki farklı Google hesabının aynı email claim’i gönderebilmesidir
- Ayarlardan Gmail dışı e-posta değiştirildikten sonra
- Değişiklik öncesindeki e-postayla yeni bir hesap oluşturulursa aynı email claim mümkün hale gelir
Şirket Google kuruluşunun dışında kalan hesap
- Temel açık, şirket Google kuruluşu e-postası için e-posta takma adları ve artı adres yönlendirmesi kullanılarak kuruluş dışında Google hesabı oluşturulabilmesidir
- Şirket e-postasının artı adresi, asıl kullanıcının gelen kutusuna yönlendirilebilir
- Bu akışla şirket Google kuruluşu e-postasını kullanan artı adres tabanlı Gmail dışı bir Google hesabı oluşturulabilir ve bu hesap kuruluş tarafından silinemez veya offboarding’e tabi tutulamaz
- Birçok servis bu e-postayı ayrıştırdıktan sonra sondaki alan adına göre oturum açılıp açılamayacağını belirler
- Bu hesapla Zoom’a kaydolunabilir
- Bu hesapla Slack’e kaydolunabilir
- Bu tür Gmail dışı Google hesabı, gerçek bir Google kuruluş üyesi olmadığı için yönetici ayarlarında veya Google kullanıcı listesinde görünmez
Kuruluşların, servis sağlayıcıların ve Google’ın azaltım önlemleri
- Kuruluşlar Google ile oturum açmayı devre dışı bırakıp SAML’ı sıkı biçimde zorunlu kılarsa riski azaltabilir
- Çoğu servis sağlayıcıda bu yöntem çalışır
- Bazı servisler bu seçeneği sunmaz
- Dahili geliştirilmiş uygulamalar etkilenebilir ancak SAML’ı desteklemiyor olabilir
- Servis sağlayıcılar Google OAuth’un HD claim’ini kullanabilir
- HD claim, hesabın bağlı olduğu Google kuruluşunun alan adını gönderir
- Google kuruluş üyesi olmayan hesaplarda HD claim bulunmaz
- Test edilen servis sağlayıcıların çoğu HD yerine email claim kullanıyordu
- HD claim için önemli bir sınırlama devam ediyor
- HD benzersiz bir tanımlayıcı değil, yalnızca alan adıdır
- Google kuruluşu silinir ve alan adı boşta bırakılırsa başka biri bu alan adını alıp yeni bir Google kuruluşu oluşturabilir
- Örnek olarak A şirketinin B şirketi tarafından satın alınması, B’nin A’nın servislerini sonlandırması ve mevcut alan adını yenilememesi verilebilir
- İnternetteki biri A şirketinin alan adını satın alırsa A şirketinin mevcut servis hesaplarına giriş yapabilir
- Servis sağlayıcılar JIT hesap oluşturmayı genel bir özellik olarak sunmayıp davetle sınırlı ya da LDAP grubu tabanlı hesap provizyonlamaya geçebilir
- Google, mevcut Google kuruluşu alan adlarıyla oluşturulan Google hesaplarını yasaklayarak geniş kapsamlı bir azaltım uygulayabilir
- Google kendi içinde
google.comhesaplarını yasaklıyor - Aynı korumayı diğer kuruluşlara da genişletebilir
- Google kendi içinde
- Google tarafındaki diğer azaltımlar arasında artı adresle Google hesabı kaydını yasaklama, Google e-posta takma adıyla kaydı yasaklama ve kuruluşların ilgili ayarları yapılandırabileceği daha iyi yönetici ayarları sunma yer alır
Ek etki: destek e-postası ve magic link akışları
- İlk erişim yetkisi olmasa bile bir kuruluşun Zoom·Slack ortamlarına erişmek teknik olarak mümkün olabilir
- Bu akış, diğer araştırmacıların magic link sign-in flows içinde bulduğu güvenlik açığı araştırmasından yararlanır
- Zendesk gibi bazı destek ve ticket sistemleri e-postayla destek ticket’ı oluşturabilir
- Destek ticket’ı e-posta adresiyle Google hesabı oluşturulabilir
- Ticket içeriği kontrol edilerek hesap oluşturma işlemini tamamlama olasılığı vardır
- Ardından ilgili destek e-posta adresiyle OAuth girişi denenebilir
- Ana alan adında email to support özelliğini açık tutmak güvenli değildir; Zendesk destek e-postasını alternatif e-posta adresi olarak yapılandırmak bir seçenek olabilir
Açıklamanın amacı ve kalan sorunlar
- Slack·Zoom gibi platformlarda eski çalışanların erişimini koruması sorunu, Google OAuth sistemindeki bir açıktan kaynaklanıyor
- Google, bu sorunu azaltabilecek geniş kapsamlı düzeltme yeteneğine sahip
- Açıklamanın amacı, küçük bir belge değişikliğinin ötesinde gerçek değişiklikleri teşvik etmek
- Google sorunu hızlıca triage etmiş olsa da, kendi 90 günlük iyileştirme uygulamasının aksine sorun 134. günde kamuya açıklandı
1 yorum
Hacker News yorumları
Bu alanda çalışıyorum ve son 3-4 yılda çeşitli oturum açma sağlayıcıları ve SaaS şirketlerinde bu açığın varyasyonlarıyla 20'den fazla kez uğraştım. Blog yazısı doğru, ama bana göre temel sorun artık düzeltilemeyecek kadar ilerledi. İnternet genelindeki yetkilendirilmiş kimlik doğrulama tamamen karmakarışık durumda; Google ve Microsoft mühendisleriyle de bu konuda çok konuştum, bu yüzden bu sorun ailesinden zaten haberdar olduklarından eminim. Ancak mevcut davranışı değiştirmek, mevcut hizmetlerin ve onlarca yıllık kurumsal oturum açma uygulamalarının çok fazlasını bozacaktır
Bu noktada “düzeltme” basit. Bir site “Sign in with XYZ” kullanıyorsa, sağlayıcının gönderdiği e-posta adresine güvenmemeli. Yalnızca e-posta alan adına bakarak özel yetkiler vermemeli ve veritabanında doğrulanmış olarak işaretlemeden önce her zaman kendi doğrulama e-postasını göndermeli. Büyük OAuth sağlayıcıları da belgelerini bunu açıkça belirtecek şekilde güncelledi; yazının kendisi de buna dikkat çekiyor. Bu yüzden ödül verilmiş olması aslında şaşırtıcı
Bununla ilgili olarak, daha fazla hizmet sağlayıcının Google belgelerinde önerildiği gibi e-postayı birincil tanımlayıcı olarak kullanmayı bırakması gerekiyor. Google Apps'te kullanıcı adını değiştirdiğimizde Slack, Datadog, GoLinks vb. yerlerde sorunları çözmek için çok zaman harcadım
Burada doğru yön, kullanılacak uygulamanın ihtiyaçlarına uygun ve ek sorumluluğu en aza indiren bir API sağlamak. Bu durumda bence Google,
email_verifieddeğerinifalseolarak ayarlamalıydı; böylece uygulama veya alt IdP ek doğrulama gerektiğini anlayabilirdiuser@domainzaten Google posta sunucusunda işleniyor ve bu yüzden artı yönlendirme kuralları uygulanıyorsa, nedenuser+suffix@domaingibi bir e-postayla yeni bir Google hesabı oluşturulabildiğini anlamıyorum. Kötüye kullanım olmasa bile kafa karıştırıcı e-posta yapılandırmaları yaratmak için çok uygun görünüyora+b@domain.comadresini belirli bir şekilde işler, ama başka bir sunucu işlemeyebilir. Sonuçta ikisi birbirinden farklı benzersiz e-posta adresleridir ve internet genelinde de böyle ele alınmalıdıruser+suffix@domainden daha kötü. En azından+XYZe-posta RFC'sinde belirtilmiş. Google daha da ileri gidip ad içindeki noktaları da normal e-posta sayacağını belirledi. Örneğinhi.my.name@google.com,himyname@google.comile aynıdır ve tüm postalar ikincisine yönlendirilir“Microsoft’un, Microsoft’un oluşturmadığı veya doğrulamadığı e-posta claim’leri gönderdiğini ve genel olarak e-posta claim’lerinin güvenilir kabul edilmediğini öğrenince şaşırdım” kısmına gelince; asıl niyet bu olmuş olabilir ama OIDC’nin daha esnek olabilmesinin çok faydalı olduğunu düşünüyorum. Örneğin ücretsiz bir oturum açma sağlayıcısı[0] işletiyorum; bu, kimliği üst OIDC ya da doğrudan e-posta üzerinden dördüncü taraf bir kimlik sağlayıcı (IdP) ile doğrulayıp uygulama ile o IdP arasında gizlilik bariyeri oluşturan bir yöntem. Yani Google’ın kullanıcının giriş yaptığı tüm uygulamaları izlemesini engelliyor
Kendi e-postanızı Google’a getirebilmeniz, Google OIDC’nin güvenliği ve kullanıcı deneyimini e-posta+parolanın gizliliğiyle birlikte elde edebileceğiniz anlamına geliyor; ancak artık Google yerine LastLogin’e güvenmeniz gerektiği gibi büyük bir şart var. Bu bağımlılığı azaltacak bir protokol üzerinde de çalışılıyor. “Google dokümantasyonu aslında e-postayı tanımlayıcı olarak kullanmayın diye uyarmıştı” kısmına ise tamamen karşıyım. E-posta, insanların gerçekten kullandığı tek gerçek birleşik kimliktir. Daha iyi bir alternatif yaygın biçimde dağıtılana kadar e-posta adreslerinin kimlik olarak ele alınması gerektiğine inanıyorum
[0]: https://lastlogin.io
Batı dünyasının dışında cep telefonları bilgisayarlardan daha yaygın ve arayüzleri de genellikle daha kolay olduğu için telefon numarasının kimlik olma olasılığı daha yüksek. Ayrıca bunu yapmak kimliği e-posta sağlayıcısına tamamen teslim etmek anlamına gelir. Google gibi yüzsüz kuruluşlar, önceden haber vermeden ya da itiraz süreci sunmadan erişimi engelleyebilir ve gerçekten de engelliyor; bu yüzden her şeyi kaybedebilirsiniz. Arka plan olarak, Okta’nın OAuth ve OIDC ürününü piyasaya sürdüm, LinkedIn’in ilgili kursunu hazırladım ve şimdi Pangea Cyber’da bunu yeniden yapıyorum
Sonsuza kadar bekleyebiliriz ya da bir çözüm üretmeye başlayabiliriz
Portier ve eski Mozilla Persona ile de biraz uğraştım ama sonunda e-posta normalleştirme sorunuyla uğraşmak kaybedilmiş ya da fazla zor bir savaş gibi göründü. İyi bir çözüm öncülük edilmeden önce ölecek gibi olduğunu neredeyse kabullenip ilgimi başka yere çevirdim
Bu gerçekten bir Google OAuth sorunu mu, yoksa birçok servis sağlayıcının erişime izin vermeden önce OAuth token’ındaki iddiaları düzgün doğrulayamamasının bir başarısızlığı mı? İkincisi gibi görünüyor
[1] https://developers.google.com/identity/openid-connect/openid...
user@domainveuser+wildcard@domainhâlâ kullanıcının “sahip olduğu” e-posta adresleri olarak doğrulanıyor; dolayısıyla bu e-posta adresi için geçerli kimlik doğrulama ve kimlik sağlıyorSorun Google kuruluş web sitesi tarafında. Yönetici, göremediği hesapların ya da e-postaların kimlik bilgilerini iptal edemez. “Bu Gmail dışı Google hesapları aslında Google kuruluşunun üyesi olmadıkları için yönetici ayarlarında ya da Google kullanıcı listesinde görünmüyor” kısmı kilit nokta
Bu akışı izleyerek bir destek talebi e-posta adresiyle Google hesabı oluşturabilir, hesap oluşturmayı tamamlamak için talep içeriğini potansiyel olarak kontrol edebilir ve ardından o destek e-posta adresiyle çeşitli servislere OAuth ile giriş yapabilirsiniz. Bu, birçok küçük şirketi etkileyebilir
Buradan çıkardığım en büyük sonuç, web kimlik doğrulamasının hâlâ korkunç bir keşmekeş olduğu
OIDC spesifikasyonu e-postanın benzersiz tanımlayıcı olarak kullanılmaması gerektiğini söyler. Uygulamanın kullanıcı adı olarak
issvesubalanları kullanılmalıBunun nedeni, öncelikle kullanıcı e-posta adreslerinin yeniden kullanılabilmesinin açık olması. Bir yüklenici hem Business A hem de Business B için çalışıyorsa ve ikisi de kimlik doğrulama servisinde o kişi için kullanıcı hesabı oluşturduysa, SaaS platformu açısından tek bir e-posta adresini tek bir B2B müşteriye eşlemek mümkün değildir. İkincisi, e-posta adresleri değişir. Şirketler satın alınır, isim değiştirir, birleşir; insanların adları da evlilik, boşanma veya kişisel tercihle değişir. Bir startup’ta SSO uygulamak başlangıçta gerçekten zordu. Doğru yapmak zor ve kullanmadan önce genel kavramları, OIDC’yi ve OAuth2’yi iyi anlamak gerekiyor. Auth0’nun iyi bir kitabı var. Bunu anlamazsanız sağda solda password grant kimlik doğrulaması uygulayıp uygulamanızı güvensiz hâle getirmeniz çok olası
Küçük bir minyatür gibi. OAuth2 diye bir şey aslında yok. OAuth2, dev şirketlerin kendi keyfî ve tescilli kimlik doğrulama sistemlerini uygulamasının yalnızca bir yolu. Bir kimlik doğrulama sistemi değil, kimlik doğrulama sistemi oluşturmak için bir araç kutusu. Bu yüzden OAuth2’nin bir standart olması bekleniyordu ama gerçekte, her dev şirketin birbiriyle uyumsuz uygulamalara sahip olduğu bir dünyaya dönüştü. Elbette insanlar dev şirketlerin kullanım senaryolarına göre geliştirme yapacak, ama o zaman “standart” nihayetinde Google’ın yaptığı yönteme benzer bir şeye dönüşüyor
Ve herkesin böyle küçük hataları var. OAuth1’e dönmeliyiz. O gerçek bir standarttı; standart oluşturmak için bir araç kutusu değildi
Birkaç PCB bileşeniyle bir devre tasarlayıp gerilim/akım gereksinimlerine göre direnç ve transistör koymanız gerekiyorsa, veri sayfasını okumanız beklenmez mi? Basit bir örnekten kabaca tahmin edip ilerlerseniz çoğu durumda devre çalışabilir; biraz tezgâh testi ve prob ile çalışır hâle de gelebilir. Ama verimi düşebilir ya da bileşenler kısa devre yaparak ortalama arıza süresini azaltabilir ve müşterileri mutsuz edebilir. En kötü durumda pil alev alıp gerçek zarara yol açabilir. O zaman cihazın erken arızalanması PCB modülü üreticisinin hatası mı, yoksa veri sayfasını okuması gereken cihaz üreticisinin sorumluluğu mu? Tüm yazılımlardan bu kadar katı bir beklentim yok, ama kimlik doğrulama ve yetkilendirmeyle uğraşıyorsa servis sahibinin titiz olması gerektiğini düşünüyorum. Orijinal metin de dokümantasyon izlenirse sorunun var olmadığını söylüyor. Alphabet bir bug bounty ödemesi yaparak zayıflığı kabul etti; dolayısıyla şirket yöneticilerine plus alias’ları ya da var olmayan rolleri izin/engelleme listeleriyle yönetme kontrolü sunabilir veya Apps ile ilişkili e-postaların kuruluş dışı claim’lere taşınmasını kısıtlayabilir. Muhtemelen etkinin kapsamını ölçüyorlar ya da ölçüm önceliğini belirliyorlar, ancak bu, e-posta claim’inin gerçekte olduğundan daha yetkili ve kalıcı olduğunu varsayan bir istemci sorunu olduğu için önceliğin düşük olacağını düşünüyorum. “Bug” tanımı büyük ölçüde “beklenen davranış”ın nasıl tanımlandığına ve kimin beklediğine bağlı, ama en azından bunun amaçlanan davranıştan sapma olmadığını ve dokümantasyonu doğru anlayanlar için beklenmedik olmadığını düşünüyorum
Bir şeyi mi kaçırıyorum? Yazıda bahsedilen destek sistemi/Zendesk ve terk edilmiş eski alan adı yöntemi dışında,
whatever@mydomain.comile yeni bir Google hesabı oluştururken doğrulama isteniyor. O hâlde gerçek istismar edilebilirlik ne kadar?Örneğin meşru olarak
egamirorrim@mydomain.comGoogle hesabın olduğunu varsayalım.egamirorrim+woopsie@mydomain.comgibi bir alias ile doğrulanmış e-posta adresine sahip yeni bir Google hesabı oluşturabilirsin; bunun sonucunda “Google ile oturum aç” sırasında Googleegamirorrim+woopsie@mydomain.come-posta claim’ini gönderir. Daha sonramydomain.comdan işten çıkarılırsan, gerçekegamirorrim@mydomain.come bağlı hesap yönetici tarafından devre dışı bırakıldığı için artık giriş yapamazsın. Ama yeni Google hesabı olanegamirorrim+woopsie@mydomain.comkuruluşla bağlantılı olmadığı için giriş yapmaya devam edebilir. Ancak bana göre bu, yalnızca sağlayıcı yetkilendirmeyi sadece e-posta claim’iyle yaptığında sorun olur. Geçmişte OIDC kullanmıştım; kaynak erişim hakkı vermek için e-posta adresi claim’inin metnini parse etmemek gerekir. Yazarın bunu neden sezgilere aykırı bulduğunu anlıyorum, ancak yazıda da dokümantasyonun bunu yapmamak konusunda uyardığı belirtiliyor. Orijinal metinde “Test ettiğim servis sağlayıcıların çoğu HD kullanmadı, e-posta claim’ini kullandı” deniyor; tamam, ama bunu ne için “kullanıyorlar”? Bu numara gerçek dünyadaki servislerde gerçekten çalışıyor mu? Öyleyse isimleri açıklanmalı ki eleştirilsinler. Bu değerin benzersiz ve değişmez olduğu yanlış varsayılsa bile, sırf bu tek başına mutlaka bir erişim hakkı doğurmaz