1 puan yazan GN⁺ 2025-03-21 | 1 yorum | WhatsApp'ta paylaş
  • Apple, 28 Ekim 2024'te yayımladığı macOS Sequoia 15.1, Sonoma 14.7.1, Ventura 13.7.1 sürümlerinde CVE-2024-54471'i yamaladı; güncelleme öncesi ortamlarda NetAuthAgent üzerinden saklanan kimlik bilgileri açığa çıkabiliyordu
  • Sorunun özü, NetAuthAgent'ın MIG sunucusunun mesaj göndereni doğrulamadan dosya sunucusu kimlik bilgilerini sorgulama, oluşturma ve kısmen üzerine yazma rutinlerini açık bırakmasıydı
  • Saldırganlar com.apple.netauth.user.gui Mach servisine mesaj göndererek Keychain'deki internet password girdilerini kendi adlarına sorgulatabiliyor ve kullanıcı adı ile parolayı alabiliyordu
  • Etki yalnızca Finder'ın “Connect to Server” ile kaydedilen FTP, Samba, WebDAV ve yazıcı sunucusu kimlik bilgileriyle sınırlı değildi; ayrı bir zincirle iCloud hesap bilgileri ve API token'larının açığa çıkmasına kadar uzanabiliyordu
  • Yama sonrasında NetAuthAgent, Mach mesajlarının audit token alanıyla gönderen sürecin entitlement'larını denetliyor ve com.apple.private.netauth.useragent.allow=true yoksa yanıt vermiyor

CVE-2024-54471 yama kapsamı

  • CVE-2024-54471, Apple güvenlik güncellemelerine dahil edilerek düzeltilen bir macOS açığıdır
  • Yamanın bulunduğu sürümlerin tamamı 28 Ekim 2024 tarihinde yayımlandı
    • macOS Sequoia 15.1
    • macOS Sonoma 14.7.1
    • macOS Ventura 13.7.1
  • Bu sürümlere güncellenmemiş macOS cihazlarının derhal güncellenmesi gerekir

macOS IPC ve Mach tabanlı yapı

  • macOS ve çoğu Apple OS çekirdeği XNU'dur; BSD kökenli bileşenler ile büyük ölçüde değiştirilmiş Mach çekirdeği türevini içeren hibrit bir çekirdektir
  • Mach, modern macOS'ta da dört soyutlama üzerine kuruludur
    • task: thread'lerin çalıştığı yürütme ortamı ve kaynak tahsisinin temel birimi
    • thread: CPU kullanımının temel birimi
    • port: çekirdeğin koruduğu mesaj kuyruğuna karşılık gelen iletişim kanalı
    • message: thread'ler arası iletişimde kullanılan tipli veri nesneleri kümesi
  • Mach port'ları, kullanıcı alanına doğrudan açılan kuyruklar olarak değil, her task'in port ad alanındaki port right biçiminde ele alınır
  • Başlıca iki yetki vardır
    • send right: birden fazla task aynı port için buna sahip olabilir
    • receive right: yalnızca tek bir task buna sahip olabilir
  • Bu yapı, tek bir sunucu task'inin birden fazla istemci task'inden mesaj aldığı istemci-sunucu modelini oluşturur
  • macOS'taki bootstrap server, tüm task'lerin send right sahibi olduğu bir port alır ve istemcilerin dize adlarıyla kayıtlı Mach service'lerin send right'larını istemesine olanak tanır

MIG sunucusunda oluşan kimlik doğrulama boşluğu

  • MIG, Mach mesajı alışverişini işlevsel bir arayüzle saran bir araçtır
  • MIG, pseudo-C IDL ve derleyiciden oluşur; IDL dosyasından şu dosyaları üretir
    • istemci için C kaynak kodu
    • sunucu için C kaynak kodu
    • iki tarafta da kullanılan C başlığı
  • Her işlev routine, rutinler kümesi ise subsystem olarak adlandırılır; subsystem numarası ile routine indeksi mesaj kimliğine yansır
  • macOS kullanıcı alanı iletişiminde MIG büyük ölçüde XPC API'a yerini bırakmış olsa da XPC de Mach mesajları üzerine kuruludur
  • MIG sunucularının kendisinde zorunlu bir kimlik doğrulama mekanizması yoktur; bu yüzden sunucu göndereni doğrulamazsa send right sahibi herhangi bir task uzaktaki rutini çağırabilir
  • MIG sunucularını araştırmak için blacktop'un ipsw CLI aracı kullanışlıdır; yöntem, NDR_record sembolünü import eden ikilileri bulmaya dayanır
    • Bu yöntem yalnızca MIG sunucularını değil, MIG istemcilerini de birlikte bulabilir
    • Sunucu ve istemci kodu disassembler veya decompiler içinde görece kolay ayırt edilebilir

NetAuthAgent'ın işlediği kimlik bilgileri

  • NetAuthAgent, macOS'ta FTP, Samba ve WebDAV gibi dosya sunucusu kimlik bilgilerini işleyen bir kullanıcı aracısıdır
  • Finder'da “Go → Connect To Server” ile dosya sunucusuna bağlanırken görülen kimlik doğrulama iletişim kutusu NetAuthAgent veya ilişkili süreç tarafından sağlanır
  • Kullanıcı parola kaydet onay kutusunu seçerse kimlik bilgileri macOS Keychain'e kaydedilir
  • NetAuthAgent parolayı doğrudan saklamaz; Keychain'i merkezi bir gizli veri deposu gibi kullanır
  • Keychain girdilerinin kendi erişim kontrol listeleri vardır; bu da normalde uygulamaların erişmemesi gereken gizli verilere ulaşmasını engeller
  • Ancak belirli bir sürecin başka süreçler adına Keychain sorgusu yapmasını sağlayan bir mekanizma açığa çıkarsa tüm güvenlik modeli zayıflayabilir

Açığa sahip NetAuthAgent MIG servisi

  • NetAuthAgent, bootstrap server üzerinden bulunabilen bir MIG sunucusu açığa çıkarıyordu
  • Servis adı com.apple.netauth.user.gui idi
  • Bu sunucu, dosya sunucusu kimlik bilgilerini okuma, oluşturma ve bazı durumlarda üzerine yazma rutinleri sağlıyordu
  • Yama öncesinde bu rutinler mesaj göndereni doğrulamıyordu
  • 19 numaralı routine, mesaj kimliği 40219, Keychain'deki internet password sınıfı girdilerin sorgulanmasını proxy edebiliyordu
  • Bu routine, serileştirilmiş bir seçenek sözlüğünü out-of-line veri descriptor'ü olarak alıyor ve kullanıcı adı ile parolayı iki ayrı out-of-line veri descriptor'ü olarak döndürüyordu

Saldırı akışı ve PoC yapısı

  • PoC, Mach mesajları ve MIG istemcileriyle çalışmak için Swift ile yazılmış güvenlik araştırma aracı Kass kullanılarak hazırlandı
  • NetAuthAgent istemcisi şu değerlerle tanımlandı
    • servis adı: com.apple.netauth.user.gui
    • subsystem tabanlı routine ID: 40200
  • Sorgu seçenekleri Property List biçiminde serileştiriliyor ve Scheme, Host, AlternatePort, Path gibi alanlar içerebiliyordu
  • macOS Keychain API'si SecItemCopyMatching, gizli değer istenmediği durumlarda yetkisiz süreçlerin bile Keychain girdilerinin meta verilerini almasına imkân verebilir
  • Erişim kontrol listeleri de meta veri olarak erişilebilir olduğundan, girdinin trusted application listesinde /System/Library/CoreServices/NetAuthAgent.app bulunup bulunmadığı doğrulanabiliyordu
  • Saldırı kodu, NetAuthAgent'ın erişebildiği internet password girdilerini dolaşarak şu bilgileri çıkarabiliyordu
    • görünen ad
    • protokol
    • host
    • port
    • yol
    • kullanıcı adı
    • parola

Dosya sunucusu kimlik bilgisi sızıntısının etkisi

  • Yama öncesinde NetAuthAgent için send right elde eden kötü amaçlı bir süreç, dosya sunucusu kimlik bilgilerinin tamamını sızdırabiliyordu
  • Kurumsal ortamlarda bu kimlik bilgileri SSO kimlik bilgileri olabilir; bu da saldırganın şirket sistemlerindeki çeşitli kaynaklara erişme ihtimali doğurur
  • Finder'ın Connect to Server özelliğinin ne kadar yaygın kullanıldığı bilinmese de birçok üniversite ve eğitim kurumu yardım dokümanı öğrencilerle personele bu özelliği öneriyor, bazıları ise Keychain'e kaydetme kutusunun işaretlenmesini tavsiye ediyordu
  • Yazıcı sunucusu sağlayıcılarının yazıcı bağlantı kılavuzları da bulundu ve NetAuthAgent yazıcı sunucusu kimlik bilgilerini de işler
  • En az bir doküman, kayıtlı parolayı güncellerken Keychain Access uygulamasının sıradan kullanıcılar için zor olması nedeniyle kaydetme kutusunun seçilmemesini öneriyordu
  • Yönetilen cihazlarda aynı kimlik bilgileri superuser kimlik bilgileri olarak da kullanılıyorsa bunun yetki yükseltmeye yol açma ihtimali vardı, ancak yönetilen cihaz testi yapılmadığı için doğrulanmadı
  • Bireysel kullanıcı Finder ile bir NAS'a bağlanıp kimlik bilgilerini kaydettiyse bu NAS kimlik bilgileri de saldırgana sızabilirdi
  • Aynı kimlik bilgileri başka internet hesaplarında yeniden kullanıldıysa o hesaplar da ele geçirilebilirdi
  • FTP, Samba ve WebDAV'ın arayüzleri iyi tanımlandığından, kimlik bilgileri sızdıktan sonra sunucudaki dosyaların taranması ve dışarı aktarılmasının otomatikleştirilmesi kolaydır

Keychain kullanılarak ek kötüye kullanım

  • NetAuthAgent, Keychain girdisi oluşturma rutini de açığa çıkardığı için kötü amaçlı süreçler password alanına rastgele veri yerleştirip saklayabiliyordu
  • Bu yöntem diske doğrudan yazma eyleminden kaçınabildiği için güvenlik yazılımlarını atlatmaya yarayan bir veri gizleme tekniği olabilir
  • Keychain'deki şüpheli girdileri açıkça denetleyen güvenlik yazılımları hakkında bilinen bir bilgi yoktur
  • Kötü amaçlı süreçlerin meşru kimlik bilgilerini de Keychain'e kaydetmesi mümkündü
  • Bu davranış tek başına sınırlı etkili olabilir, ancak saldırganın denetimindeki bir dosya sunucusunun kimlik bilgilerini kaydettikten sonra kullanıcıyı sosyal mühendislikle yönlendirdiği birleşik saldırılarda kullanılma ihtimali vardır

iCloud API token'larına uzanan exploit zinciri

  • Connect to Server kullanmayan kullanıcılar da bu açığın etkisinden muaf değildi
  • Çoğu macOS cihazında, NetAuthAgent'ın erişebileceği kadar geniş ACL'lere sahip Keychain girdileri bulunur
  • Bu Keychain girdilerinden biri, diskteki belirli bir dosyayı çözmek için gereken şifre çözme anahtarını içerir
  • Söz konusu dosyada kullanıcının iCloud hesap bilgileri ve API token'ları yer alır
  • Saldırganlar, Keychain girdisi ile bilinen konumdaki dosyayı kullanarak şu bilgilere ulaşabiliyordu
    • ad ve soyad
    • e-posta adresi
    • e-posta takma adları
    • etkin özellikler ve endpoint'ler
    • birden fazla uzun ömürlü API token'ı

iCloud token'larıyla yapılabilecekler

  • Wojciech Reguła'nın önceki araştırması, aynı API token'larının farklı bir yöntemle bulunarak şu verilerin sızdırılabildiğini göstermişti
    • Contacts
    • Calendars
    • Reminders
    • Find My üzerinden kullanıcının konumu
  • Bu sonuçlar içinde Reminders dışındaki kalemler yeniden üretildi
  • Yeni hesaplar ve taşınmış hesaplardaki Reminders, Apple tarafından daha güvenli CloudKit'e taşındığı için yalnızca şifreli biçimde erişilebilir hale geldi
  • Ek olarak mümkün olan işlemler şunlardı
    • kişi fotoğraflarını sızdırma
    • CloudKit sorguları, ancak şifre çözme olmadan
    • iCloud key-value store verilerini sızdırma
    • cihaz seri numaraları dahil iCloud yedekleme meta verilerini sızdırma
    • Find My ile kullanıcının diğer cihazlarının konumlarını sızdırma
    • Find My ile kullanıcının arkadaşlarının konumlarını sızdırma
    • Find My üzerinden kilitleme, silme ve ses çalma işlemleri yapma
  • CloudKit verilerinin şifresini çözme konusu araştırıldı ancak tamamlanamadı
  • Ticari adli bilişim firmalarının bu API token'larını ve gerekirse iOS cihaz PIN'ini birlikte kullanarak CloudKit verilerini veya iCloud yedeklerindeki CloudKit verilerini çözebilme ihtimali dışlanmadı

Apple'ın düzeltme yöntemi

  • Yama sonrası NetAuthAgent, mesajı alır almaz önce gönderenin entitlement'larını denetler
  • Entitlement, kod imzalama sırasında ikiliye eklenen anahtar-değer çiftleridir
  • Standart güvenlik yapılandırmalı macOS'ta Apple Mobile File Integrity, süreç çalışırken restricted entitlement'ları denetler ve uygun provisioning profile yoksa süreci sonlandırır
  • Provisioning profile Apple tarafından imzalanmak zorunda olduğundan bu denetimi atlatmak zor olacak şekilde tasarlanmıştır
  • NetAuthAgent'ın istediği entitlement şudur
    • anahtar: com.apple.private.netauth.useragent.allow
    • değer: boolean true
  • Bu entitlement'a sahip olmayan gönderene NetAuthAgent yanıt vermez
  • Mach mesajı alınırken çekirdeğin eklediği trailer içinde audit token bulunur
  • Alıcı task, audit token ile gönderen task'i tanımlayabilir; ardından çekirdekten o task'in entitlement sözlüğünü isteyip değeri denetleyebilir

Güvenlik yapısındaki zayıf halka

  • Dosya sunucusu kimlik bilgileri yalnızca belirli uygulamaların erişebileceği şekilde saklansa bile, o uygulama başka uygulamalardan gelen sorgu komutlarını kabul ediyorsa zayıf halka haline gelir
  • iCloud API token'ları diskte şifrelenmiş bir dosyada tutulsa bile, şifre çözme anahtarı geniş ACL'li bir Keychain girdisinde ise asıl zayıf halka bu ACL olur
  • macOS, süreç enjeksiyonunu zorlaştıran güvenlik önlemlerine sahiptir ve genel güvenlik altyapısı güçlü kabul edilir
  • Ancak bu açıkta olduğu gibi, gönderen doğrulamasındaki tek bir basit eksiklik dosya sunucusu kimlik bilgileriyle iCloud API token'larının açığa çıkmasına yol açabilir

Kullanıcılar için önerilen adımlar

  • Hâlâ mümkünse Advanced Data Protection özelliğinin etkinleştirilmesi önerilir
  • iCloud'u web tarayıcısı üzerinden kullanmıyorsanız iCloud verileri için web erişimini devre dışı bırakmak da bir seçenektir
  • iCloud web sitesi bazı durumlarda Apple'ın iCloud uygulamalarından farklı API endpoint'leri kullanır
  • Bu açıkla artık token'lara erişilemiyor olsa da, geçmişte başka bir açıkla açığa çıkmış olabilir ve gelecekte başka açıklarla yine açığa çıkma ihtimali vardır
  • Bu exploit'in kötü niyetli aktörler tarafından kullanıldığına veya tespit edildiğine dair bir kanıt yoktur
  • Yine de özellikle kimlik bilgilerinin kötüye kullanılmasından endişe ediyorsanız parolalarınızı değiştirmeniz gerekir
  • Ekim 2024'ten beri macOS güncellemesi almamış cihazlar derhal güncellenmelidir

1 yorum

 
GN⁺ 2025-03-21
Hacker News yorumları
  • Yazı iyi kaleme alınmış; Apple’ın bir ölçüde üstünü örtmeye çalıştığı, boş parolayı iki kez deneyince root oturum açmanın atlatılabildiği zero-day olayını hatırlattı. 2017 civarıydı, belki de 2018
    Root giriş kutusunun herhangi bir yerinde yönetici kullanıcı adını girip parolayı boş bırakarak oturum açınca, ilkinde parolanın yanlış olduğu söyleniyordu; uyarıyı kapatıp ikinci kez basınca o kullanıcı olarak giriş yapılıyordu
    O gün %100 yeniden üretilebiliyordu ve sosyal medyada yayıldıktan kısa süre sonra yamalandı, ama yine de devasa bir oversight gibi görünmüştü. Mac kimlik doğrulama mekanizmalarının etrafında hâlâ eski kalıntılar var gibi; Mach çekirdeğinin port sisteminden söz edilmesi de ilginç

    • Boş parola iki kez ifadesi, kedinin klavyeye oturup bir Sun 3/60’ı hacklediği zamanı hatırlattı
      Kullanıcı adı tamponu rastgele 256 karaktere ulaşınca XDM çöküp bir root shell açmıştı. Tabii bu, herkesin güvenlik konusunda çok daha saf olduğu 90’ların başlarına ait bir hikâye
    • 2017 gibi görünüyor; o zamanki gönderinin başlığı “macOS High Sierra: Anyone can login as “root” with empty password” idi - 3001 puan | 1073 yorum - https://news.ycombinator.com/item?id=15800676
    • O kadarı hiçbir şey değil. Eskiden yıllar boyunca page file’dan herhangi bir kullanıcının FileVault parolasını tek satırlık grep ile çekebiliyordunuz ve %100 çalışıyordu
    • Mach hakkında bilgin varsa o temel sistemi bilmemen asıl şaşırtıcı olur. Bana göre port sistemi, Mach’ı açıklayan en karakteristik olgudur
    • Parolasız girişle ilgili CVE-2011-3226’yı da bildirmiştim; burada referans veriliyor: https://support.apple.com/en-us/103345
  • “ACLs don't”: https://waterken.sourceforge.net/aclsdont/current.pdf

  • Yazıda küçük bir düzeltme yapılmış: entitlement denetimi çekirdeğin Mach katmanında değil
    https://github.com/nmggithub/wts/commit/2bdce1c0c76c7adc360e17a6a42ee547462b99d3
    XNU’nun davranışını açıklayan bölümdeki olgusal hatayı düzelten tek kelimelik bir değişiklik

  • “Bir süreç, başka bir sürecin keychain sorgusunu fiilen proxy etmesini sağlayan bir mekanizma açığa çıkarırsa tüm sistem güvenliğini zayıflatabilir” kısmı confused deputy problem gibi görünüyor: https://en.wikipedia.org/wiki/Confused_deputy_problem
    Capability tabanlı bir tasarımın bu tür sorunları sistematik olarak engelleyebilmesi gerekir

    • Entitlements da bir tür capability sayılabilir gibi. Öyleyse doğru; gerçek çözüm de daemon’ın kendisiyle konuşmak için entitlement gerektirmekti
  • Yazarın gerçek PoC kodunu nerede sağladığını merak ediyorum. Azaltma önlemlerini biraz test etmek istiyorum ama örnek kod görünüyor, yine de eksik gibi
    Gerçekçi risk ne düzeyde?

    • PoC kodu çalışmalı. Bağımlılık olarak yalnızca Kass’ı kurmanız gerekiyor. Bunu yaptığınız hâlde başka bir sorun varsa ne olduğunu merak ederim
      Risk açısından, NetAuthAgent için send right elde edebilen bir uygulama — pratikte neredeyse tüm sandbox dışı uygulamalar — FTP, WebDAV, Samba gibi dosya sürücülerinin kayıtlı kimlik bilgilerini NetAuthAgent’tan sessizce isteyebilir. Bu, ayrıca iCloud kişilerinin ve takvimlerinin tamamen sızdırılmasına ve diğer iCloud ilişkili verilerin sızmasına da yol açabilir
      Sandboxing bunu zorlaştırır ama imkânsız kılmaz. Güncelseniz risk 0; yama geçen yıl ekimde geldi, yani açıkçası zaten güncellemiş olmanız gerekir. Güncellemediyseniz ve bundan sonra da güncellemeyi düşünmüyorsanız, cihazda çalışan tüm süreçleri eksiksiz kontrol etmediğiniz sürece risk çok daha büyük
  • Çok ayrıntılı bir yazıydı; çeşitli çekirdeklerin tarihine kadar değinmesi hoşuma gitti. Yine de ciddi bir güvenlik sorunu hakkında bir yazıysa, başta etki kapsamı, saldırı koşulları, bunun bir mantık hatası mı yoksa bellek bozulması mı olduğu gibi çok kısa bir açıklama olsa iyi olurdu
    Yazının geri kalanını okuyup okumayacağıma karar verebileceğim kadar kısa olması yeterli

    • Geri bildirim için teşekkürler. Okuyucunun devamını okuması için ana noktayı bilerek biraz geç verdim, ama bu bakış açısını da gayet iyi anlıyorum
  • Gerçekten ilginç bir yazı. Mach ve Darwin çekirdeğinin ortaya çıkış sürecinde bu kadar çok arka plan hikâyesi olduğunu bilmiyordum

  • Bu noktada Mach, macOS hatalarının düzenli bir kaynağı gibi hissettirmeye başladı. Apple’ın sıkı biçimde kilitlediğini biliyorum, ama Mach’tan tamamen çıkmanın bir yolu var mı?

    • Burada hatanın nedeninin Mach’tan çok entitlement denetiminin olmaması olduğunu düşünüyorum. Entitlements açıkçası çok iyi bir güvenlik sistemi, ama opt-in
      Bir daemon entitlement’ı kontrol etmiyorsa güvenli değildir. Mesajlaşma mekanizmasını suçlamak yerine onun nasıl kullanıldığını suçlamak gerekir
      Aslında kilitli herhangi bir mesajlaşma sistemi, basit mesaj iletiminden fazlasını; örneğin gönderen doğrulaması gibi şeyleri gerektirir. Bu, Mach gibi düşük seviyeli bir iletişim protokolünden kendiliğinden elde edebileceğiniz bir şey değil. Apple MIG derleyicisini elden geçirip entitlement denetimleri eklemediği sürece durum böyle
      Mach, entitlement denetimiyle birlikte kullanıldığında harika
    • Yakın zamanda Mach dışına giderek daha fazla parçanın taşındığına dair bir yazı vardı. Bazıları L4’e, bazıları kullanıcı alanına taşınıyor
      Teknik olarak daha fazla farklı bileşenin bir arada bulunmasına ve potansiyel saldırı yüzeyinin artmasına yol açabilir. Ama daha özelleşmiş yüzeyler denetimi basitleştirebilir ve sonuçta o yüzeyin daha iyi korunmasını sağlayabilir