Kritik Ruby-Saml güvenlik açıkları, saldırganların kimlik doğrulamasını atlamasına izin verir


Servis sağlayıcı tarafındaki Güvenlik İddiası İşaretleme Dili (SAML) aracılığıyla tek oturum açma (SSO) için kullanılan popüler bir araç olan Ruby-SAML kütüphanesinde kritik bir güvenlik açığı tanımlanmıştır.

CVE-2025-25291 ve CVE-2025-25292 olarak adlandırılan güvenlik açıkları, saldırganların hedeflenen kuruluşun anahtarıyla oluşturulan geçerli bir imzaya sahip oldukları takdirde kimlik doğrulamasını atlamalarına ve hesap devralma saldırılarını gerçekleştirmelerine izin verir.

Ruby-SAML kütüphanesi, GitLab gibi önemli projeler de dahil olmak üzere çeşitli uygulamalarda ve ürünlerde yaygın olarak kullanılmaktadır.

GitHub şu anda bu kütüphaneyi kimlik doğrulama için kullanmasa da, platform yakın zamanda kendi SAML uygulamasında güvenlik açıklarının keşfedilmesinin ardından benimsenmesini değerlendirdi.

Ruby-SAML’yi yeniden değerlendirme kararı, Ekim 2024’te (CVE-2024-45409) önemli bir kimlik doğrulama baypası kusuru açıklandıktan sonra sorulmuştur.

Arka plan ve keşif

Güvenlik açıkları, GitHub’ın güvenlik laboratuvarı ve böcek ödül araştırmacıları tarafından kapsamlı bir güvenlik incelemesi sırasında keşfedildi.

İnceleme, Github’ın kendi uygulamalarında daha önce açıklanan güvenlik açıkları nedeniyle Ruby-SAML kullanarak yeniden gözden geçirmeye karar verdikten sonra başlatıldı.

Araştırma, Ruby-SAML’nin imza doğrulama sürecinde iki farklı XML ayrıştırıcısı, Rexml ve Nokogiri kullandığını tespit etti.

Bu çift paralı kurulum, REXML ve Nokogiri’nin farklı imza unsurlarını almak için kandırılabileceği ve olası bir kimlik doğrulama bypass’a yol açan ayrıştırıcı farkları için bir potansiyel getirdi.

Keşif süreci birkaç aşama içeriyordu:

  1. Birden çok ayrıştırıcı kullanımının belirlenmesi: Kod incelemesi, REXML ve Nokogiri’nin imza doğrulaması sırasında kullanıldığını ortaya koydu.
  2. Sömürülebilirliği Değerlendirme: Araştırmacılar ayrıştırıcı diferansiyelinin kullanılamayacağını değerlendirdiler.
  3. Ayrıştırıcı Diferansiyel Bulma: Parserlerin gerçekten farklı imzalar görmek için kandırılabileceği tespit edildi.
  4. Tam bir sömürü yaratmak: Son adım, bir kimlik doğrulama bypass istismarı oluşturmak için ayrıştırıcı farkından yararlanmayı içeriyordu.
Sadece Nokogiri tarafından görülebilen statüdeil öğesinin bir parçası olarak ek bir imza eklendiSadece Nokogiri tarafından görülebilen statüdeil öğesinin bir parçası olarak ek bir imza eklendi
Bir parçası olarak ek bir imza eklendi StatusDetail Sadece Nokogiri tarafından görülebilen unsur

Ayrıştırıcı diferansiyelini gösteren kod parçacıkları

İmza öğelerinin hem REXML hem de Nokogiri kullanılarak nasıl alındığına bir bakış:

# Retrieving the Signature Element with REXML

sig_element = REXML::XPath.first(

  @working_copy,

  "//ds:Signature",

  {"ds"=>DSIG}

)

# Retrieving the Signature Element with Nokogiri

noko_sig_element = document.at_xpath('//ds:Signature', 'ds' => DSIG)

Xml_security.rb’nin validate_signature yönteminde, imza değeri REXML ile elde edilen SIG_ELEMENT’ten çıkarılır:

base64_signature = REXML::XPath.first(

  sig_element,

  "./ds:SignatureValue",

  {"ds" => DSIG}

)

signature = Base64.decode64(OneLogin::RubySaml::Utils.element_text(base64_signature))

Bu arada, SignedInfo öğesi Nokogiri ile elde edilen Noko_Sig_Element’ten çıkarılır:

noko_signed_info_element = noko_sig_element.at_xpath('./ds:SignedInfo', 'ds' => DSIG)

canon_string = noko_signed_info_element.canonicalize(canon_algorithm)

SAML yanıtları nasıl doğrulanır

SAML yanıtları, kullanıcı bilgilerini kimlik sağlayıcıdan (IDP) XML formatında servis sağlayıcısına (SP) taşımak için kullanılır.

Yanıt, kurcalamayı önlemek için doğrulanması gereken bir imza içerir. Doğrulama, SignedInfo ve DigestValue elemanlarının kanonikleştirilmesini ve karşılaştırılmasını içerir.

Ayrıştırıcı Diferansiyelinden yararlanmak

GitHub’ın Bug Bounty programına katılan Ahacker1, ayrıştırıcı farklılığından yararlanarak başarıyla bir istismar yarattı.

Bunu farklı yöntemler kullanılarak geliştirilen başka bir istismar izledi. Her iki istismar da, bir saldırganın hedeflenen kuruluştan geçerli bir imzaya erişimi varsa kimlik doğrulamasını atlamasını sağladı.

Bu, daha önce imzalanmış iddialardan veya diğer kullanıcılardan ve hatta halka açık meta verilerden elde edilebilir.

XML imzası örneği

Bir SAML yanıtından gerçek bir imza öğesi buna benzeyebilir (netlik için kaldırılmış ad alanı bilgileri):



    

        

        

        

            

            

            Su4v[..]

        

    

    L8/i[..]

    

        

            MIID[..]

        

    

Etki ve Öneriler

Ruby-SAML kütüphanesinin kullanıcılarına, bu güvenlik açıklarını azaltmak için en kısa sürede 1.18.0 sürümüne güncellemeleri önerilir.

Omniauth-SAML gibi Ruby-SAML’yi kullanan projeler veya kütüphaneler de Ruby-SAML’nin sabit bir sürümüne atıfta bulunan bir sürüme güncellemelidir.

Bu güvenlik açıklarının keşfi, kötü amaçlı aktörler tarafından sömürülmeden önce kritik sorunları belirleme ve ele alma konusundaki kapsamlı güvenlik denetimlerinin ve hata ödül programlarının önemini vurgulamaktadır.

Siber güvenlik tehditleri geliştikçe, güncel kütüphaneleri ve çerçeveleri korumak, sömürünün önlenmesi ve hem kullanıcıların hem de kuruluşların güvenliğini sağlamak için çok önemlidir.

Özetle, Ruby-SAML’deki güvenlik açıkları, SSO sistemlerini güvence altına almada devam eden zorlukları vurgulamakla birlikte, araştırmacılar ve şirketler arasındaki işbirlikçi çabaların daha iyi güvenlik sonuçlarına nasıl yol açabileceğini de göstermektedir.

Güvenlik topluluğu bu sorunları izlemeye ve Ruby-SAML gibi kütüphanelerin ortaya çıkan tehditlere karşı güvenli kalmasını sağlayacaktır.

Are you from SOC/DFIR Teams? – Analyse Malware Incidents & get live Access with ANY.RUN -> Start Now for Free.



Source link