- Apple menambal CVE-2024-54471 pada macOS Sequoia 15.1, Sonoma 14.7.1, Ventura 13.7.1 yang dirilis pada 28 Oktober 2024, dan pada lingkungan sebelum pembaruan kredensial tersimpan dapat terekspos melalui NetAuthAgent
- Inti masalahnya adalah server MIG milik NetAuthAgent membuka rutin pengambilan, pembuatan, dan sebagian penimpaan kredensial file server tanpa memverifikasi pengirim pesan
- Penyerang dapat mengirim pesan ke layanan Mach
com.apple.netauth.user.guiuntuk memaksa pengambilan iteminternet passworddi Keychain atas namanya, lalu memperoleh nama pengguna dan kata sandi - Dampaknya tidak berhenti pada kredensial FTP, Samba, WebDAV, dan server printer yang disimpan lewat “Connect to Server” di Finder, tetapi melalui rantai terpisah juga dapat berujung pada kebocoran informasi akun iCloud dan token API
- Setelah patch, NetAuthAgent memeriksa entitlement proses pengirim menggunakan audit token dari pesan Mach, dan tidak akan merespons jika
com.apple.private.netauth.useragent.allow=truetidak ada
Cakupan patch CVE-2024-54471
- CVE-2024-54471 adalah kerentanan macOS yang diperbaiki dalam pembaruan keamanan Apple
- Versi yang memuat patch semuanya dirilis pada 28 Oktober 2024
- macOS Sequoia 15.1
- macOS Sonoma 14.7.1
- macOS Ventura 13.7.1
- Perangkat macOS yang belum diperbarui ke versi tersebut perlu segera di-update
Struktur IPC dan Mach di macOS
- Kernel XNU digunakan oleh macOS dan sebagian besar OS Apple, dan merupakan kernel hibrida yang mencakup elemen turunan BSD serta varian kernel Mach yang telah dimodifikasi besar-besaran
- Mach di macOS modern tetap didasarkan pada empat abstraksi
- task: lingkungan eksekusi tempat thread berjalan dan unit dasar alokasi sumber daya
- thread: unit dasar penggunaan CPU
- port: kanal komunikasi yang setara dengan antrean pesan yang dilindungi kernel
- message: kumpulan objek data bertipe yang digunakan untuk komunikasi antar-thread
- Port di Mach bukan antrean yang terekspos langsung ke user space, melainkan diperlakukan sebagai port right dalam ruang nama port milik tiap task
- Ada dua hak utama
- send right: dapat dimiliki beberapa task untuk port yang sama
- receive right: hanya dapat dimiliki satu task
- Struktur ini membentuk model klien-server tempat satu task server menerima pesan dari banyak task klien
- Bootstrap server di macOS menyediakan port yang semua task punya send right atasnya, sehingga klien dapat meminta send right untuk layanan Mach yang terdaftar berdasarkan nama string
Celah autentikasi pada server MIG
- MIG adalah alat yang membungkus pengiriman dan penerimaan pesan Mach dalam antarmuka fungsional
- MIG terdiri dari pseudo-C IDL dan kompiler, dan dari file IDL akan menghasilkan file berikut
- kode sumber C untuk klien
- kode sumber C untuk server
- header C yang dipakai kedua sisi
- Tiap fungsi disebut routine, dan kumpulan rutin disebut subsystem; nomor subsystem dan indeks routine tercermin pada ID pesan
- Dalam komunikasi user space macOS, MIG memang sebagian besar tergeser oleh API XPC, tetapi XPC juga dibangun di atas pesan Mach
- Server MIG sendiri tidak memiliki mekanisme autentikasi yang dipaksakan, sehingga bila server tidak memverifikasi pengirim, task arbitrer yang memiliki send right dapat memanggil routine jarak jauh
- Untuk menelusuri server MIG, ipsw CLI dari blacktop berguna, dengan metode mencari biner yang mengimpor simbol
NDR_record- Metode ini dapat menemukan bukan hanya server MIG tetapi juga klien MIG
- Kode server dan klien relatif mudah dibedakan di disassembler atau decompiler
Kredensial yang ditangani NetAuthAgent
- NetAuthAgent adalah agen pengguna di macOS yang menangani kredensial file server seperti FTP, Samba, dan WebDAV
- Dialog autentikasi yang muncul saat terhubung ke file server melalui “Go → Connect To Server” di Finder disediakan oleh NetAuthAgent atau proses terkait
- Jika pengguna mencentang opsi simpan kata sandi, kredensial akan disimpan di Keychain macOS
- NetAuthAgent tidak menyimpan kata sandi secara langsung, melainkan menggunakan Keychain sebagai penyimpanan rahasia terpusat
- Item Keychain memiliki access control list tersendiri sehingga aplikasi pada umumnya tidak dapat mengakses rahasia yang tidak semestinya diakses
- Namun, jika proses tertentu mengekspos mekanisme untuk melakukan kueri Keychain atas nama proses lain, seluruh model keamanan bisa melemah
Layanan MIG NetAuthAgent yang rentan
- NetAuthAgent mengekspos server MIG yang dapat dicari melalui bootstrap server
- Nama layanannya adalah
com.apple.netauth.user.gui - Server ini menyediakan rutin untuk membaca, membuat, dan dalam beberapa kasus menimpa kredensial file server
- Sebelum patch, rutin-rutin ini tidak memverifikasi pengirim pesan
- Routine 19, dengan ID pesan 40219, dapat mem-proxy pengambilan item kelas
internet passworddi Keychain - Routine ini menerima kamus opsi yang telah diserialisasi sebagai descriptor data out-of-line, dan mengembalikan nama pengguna serta kata sandi sebagai dua descriptor data out-of-line
Alur serangan dan komposisi PoC
- PoC menangani pesan Mach dan klien MIG menggunakan alat riset keamanan Kass yang ditulis dalam Swift
- Klien NetAuthAgent didefinisikan dengan nilai berikut
- nama layanan:
com.apple.netauth.user.gui - ID routine berbasis subsystem: 40200
- nama layanan:
- Opsi kueri diserialisasi dalam bentuk Property List dan dapat memuat field seperti
Scheme,Host,AlternatePort,Path - API Keychain macOS
SecItemCopyMatchingdapat dipakai proses tanpa izin untuk memperoleh metadata item Keychain jika nilai rahasianya tidak diminta - Access control list juga dapat diakses sebagai metadata, sehingga bisa diperiksa apakah daftar trusted application suatu item mencakup
/System/Library/CoreServices/NetAuthAgent.app - Kode serangan dapat menelusuri item
internet passwordyang bisa diakses NetAuthAgent dan mengekstrak informasi berikut- nama tampilan
- protokol
- host
- port
- path
- nama pengguna
- kata sandi
Dampak kebocoran kredensial file server
- Sebelum patch, proses berbahaya yang memperoleh send right ke NetAuthAgent dapat membocorkan seluruh kredensial file server
- Di lingkungan perusahaan, kredensial tersebut bisa berupa kredensial SSO, sehingga penyerang berpotensi mengakses berbagai sumber daya sistem perusahaan
- Skala penggunaan fitur Connect to Server di Finder tidak diketahui, tetapi banyak dokumen bantuan dari universitas dan institusi pendidikan yang menyarankan mahasiswa serta staf menggunakan fitur ini, dan sebagian bahkan merekomendasikan mencentang opsi penyimpanan Keychain
- Ditemukan juga panduan koneksi printer dari vendor print server, dan NetAuthAgent juga menangani kredensial server printer
- Setidaknya satu dokumen menyarankan agar tidak mencentang opsi simpan karena saat memperbarui kata sandi tersimpan, aplikasi Keychain Access sulit ditangani pengguna umum
- Jika pada perangkat terkelola kredensial yang sama juga dipakai sebagai kredensial superuser, ini berpotensi berujung pada eskalasi hak akses, meski belum dikonfirmasi karena tidak ada pengujian pada perangkat terkelola
- Jika pengguna pribadi mengakses NAS melalui Finder dan menyimpan kredensialnya, kredensial NAS itu juga bisa terekspos ke penyerang
- Jika kredensial yang sama dipakai ulang untuk akun internet lain, akun tersebut juga dapat ikut dikompromikan
- FTP, Samba, dan WebDAV memiliki antarmuka yang terdefinisi dengan baik, sehingga setelah kredensial bocor, penelusuran dan eksfiltrasi file server mudah diotomatisasi
Penyalahgunaan tambahan melalui Keychain
- Karena NetAuthAgent juga mengekspos rutin untuk membuat item Keychain, proses berbahaya dapat menyembunyikan data arbitrer dengan menaruhnya pada field
password - Cara ini dapat menghindari penulisan langsung ke disk dan menjadi sarana penyembunyian data untuk mengelabui perangkat lunak keamanan
- Belum diketahui ada perangkat lunak keamanan yang secara eksplisit memeriksa item Keychain mencurigakan
- Proses berbahaya juga dapat menyimpan kredensial yang tampak sah ke dalam Keychain
- Tindakan ini sendiri mungkin berdampak terbatas, tetapi bisa dipakai dalam serangan gabungan ketika penyerang menyimpan kredensial file server yang mereka kendalikan lalu memancing pengguna lewat rekayasa sosial
Rantai eksploit hingga token API iCloud
- Bahkan pengguna yang tidak memakai Connect to Server pun tidak sepenuhnya bebas dari dampak kerentanan ini
- Sebagian besar perangkat macOS memiliki item Keychain dengan ACL cukup luas sehingga bisa diakses NetAuthAgent
- Item Keychain ini berisi kunci dekripsi untuk mendekripsi file tertentu di disk
- File tersebut memuat informasi akun iCloud dan token API pengguna
- Dengan memanfaatkan item Keychain itu dan file pada lokasi yang sudah diketahui, penyerang dapat memperoleh informasi berikut
- nama depan dan nama belakang
- alamat email
- alias email
- fitur dan endpoint yang diaktifkan
- beberapa token API jangka panjang
Apa yang bisa dilakukan dengan token iCloud
- Riset sebelumnya oleh Wojciech Reguła menunjukkan bahwa token API yang sama, bila ditemukan dengan cara lain, dapat membocorkan data berikut
- Contacts
- Calendars
- Reminders
- lokasi pengguna melalui Find My
- Dari hasil tersebut, semuanya kecuali Reminders berhasil direproduksi
- Untuk akun baru dan akun hasil migrasi, Reminders telah dipindahkan Apple ke CloudKit yang lebih aman sehingga hanya dapat diakses dalam bentuk terenkripsi
- Tindakan tambahan yang dimungkinkan adalah sebagai berikut
- kebocoran foto kontak
- kueri CloudKit, tetapi tanpa dekripsi
- kebocoran data iCloud key-value store
- kebocoran metadata backup iCloud, termasuk nomor seri perangkat
- kebocoran lokasi perangkat lain milik pengguna melalui Find My
- kebocoran lokasi teman pengguna melalui Find My
- menjalankan aksi penguncian, penghapusan, dan pemutaran suara melalui Find My
- Dekripsi data CloudKit telah diteliti tetapi belum berhasil diselesaikan
- Tidak dapat dikesampingkan bahwa vendor forensik komersial bisa menggunakan token API ini, dan bila perlu PIN perangkat iOS, untuk mendekripsi data CloudKit atau data CloudKit di backup iCloud
Cara Apple memperbaikinya
- Setelah patch, NetAuthAgent terlebih dahulu memeriksa entitlement pengirim saat menerima pesan
- Entitlement adalah pasangan key-value yang disematkan ke biner saat penandatanganan kode
- Pada macOS dengan pengaturan keamanan standar, Apple Mobile File Integrity memeriksa restricted entitlement saat proses dijalankan dan akan menghentikan proses bila tidak ada provisioning profile yang sesuai
- Karena provisioning profile harus ditandatangani Apple, pemeriksaan ini dirancang agar sulit dilewati
- Entitlement yang diminta NetAuthAgent adalah sebagai berikut
- key:
com.apple.private.netauth.useragent.allow - nilai: boolean
true
- key:
- Jika pengirim tidak memiliki entitlement ini, NetAuthAgent tidak akan merespons
- Trailer yang dilampirkan kernel saat menerima pesan Mach memuat audit token
- Task penerima dapat mengidentifikasi task pengirim lewat audit token, meminta kamus entitlement task tersebut ke kernel, lalu memeriksa nilainya
Mata rantai lemah dalam arsitektur keamanan
- Walau kredensial file server disimpan agar hanya aplikasi tertentu yang bisa mengaksesnya, jika aplikasi itu menerima perintah kueri dari aplikasi lain maka aplikasi tersebut menjadi mata rantai lemah
- Walau token API iCloud disimpan dalam file terenkripsi di disk, jika kunci dekripsinya ada dalam item Keychain dengan ACL luas maka ACL itulah yang menjadi mata rantai lemah
- macOS memiliki perlindungan yang membuat injeksi proses sulit dilakukan, dan infrastruktur keamanannya secara umum dinilai kuat
- Namun seperti pada kerentanan ini, satu kelalaian sederhana dalam verifikasi pengirim dapat berujung pada kebocoran kredensial file server dan token API iCloud
Rekomendasi untuk pengguna
- Jika masih memungkinkan, disarankan mengaktifkan Advanced Data Protection
- Jika tidak menggunakan iCloud lewat browser web, menonaktifkan akses web untuk data iCloud juga bisa menjadi pilihan
- Situs web iCloud dalam beberapa kasus menggunakan endpoint API yang berbeda dari aplikasi iCloud milik Apple
- Kerentanan ini tidak lagi dapat dipakai untuk mengakses token tersebut, tetapi token pernah terekspos lewat kerentanan sebelumnya dan masih mungkin terekspos lagi lewat kerentanan lain di masa mendatang
- Tidak ada bukti bahwa eksploit ini pernah digunakan atau ditemukan oleh pelaku berbahaya
- Meski begitu, jika penyalahgunaan kredensial sangat dikhawatirkan, kata sandi sebaiknya diganti
- Perangkat yang belum memperbarui macOS sejak Oktober 2024 harus segera di-update
1 komentar
Opini Hacker News
Tulisannya bagus, dan mengingatkan pada zero-day ketika login root bisa dibypass dengan mencoba kata sandi kosong dua kali, yang saat itu tampaknya sempat agak berusaha ditutupi oleh Apple. Sekitar 2017, mungkin 2018
Di kotak login root mana pun, jika memasukkan nama pengguna administrator dan login dengan kata sandi kosong, percobaan pertama akan mengatakan kata sandinya salah, tetapi setelah menutup peringatan dan menekan untuk kedua kalinya, pengguna itu akan berhasil login
Saat itu 100% bisa direproduksi, dan setelah menyebar di media sosial segera ditambal, tetapi tetap terlihat seperti oversight yang sangat besar. Sepertinya masih ada sisa-sisa lama di sekitar mekanisme autentikasi Mac, dan menarik juga bahwa sistem port kernel Mach disebutkan
Ketika buffer nama pengguna mencapai 256 karakter acak, XDM crash dan memunculkan shell root. Namun ini cerita awal 90-an, ketika semua orang jauh lebih naif soal keamanan
grep, dan berhasil 100%“ACLs don't”: https://waterken.sourceforge.net/aclsdont/current.pdf
Ada koreksi kecil pada tulisan: pemeriksaan entitlement tidak berada di lapisan Mach kernel
https://github.com/nmggithub/wts/commit/2bdce1c0c76c7adc360e17a6a42ee547462b99d3
Ini perubahan satu kata yang memperbaiki kesalahan fakta pada bagian yang menjelaskan perilaku XNU
Bagian “jika sebuah proses mengekspos mekanisme yang membuat proses lain secara efektif mem-proxy kueri keychain, itu bisa melemahkan keamanan seluruh sistem” terlihat seperti masalah confused deputy: https://en.wikipedia.org/wiki/Confused_deputy_problem
Desain berbasis capability seharusnya bisa mencegah masalah semacam ini secara sistematis
Saya penasaran di mana penulis menyediakan kode PoC sebenarnya. Saya ingin mencoba menguji mitigasinya, tetapi contoh kode yang terlihat tampak tidak lengkap
Seberapa besar risiko realistisnya?
Dari sisi risiko, aplikasi yang bisa mendapatkan send right ke NetAuthAgent—pada praktiknya hampir semua aplikasi non-sandbox—dapat diam-diam meminta kredensial tersimpan untuk drive file seperti FTP, WebDAV, dan Samba kepada NetAuthAgent. Ini juga bisa berujung pada kebocoran seluruh kontak dan kalender iCloud, serta data terkait iCloud lainnya
Sandboxing membuat ini lebih sulit, tetapi tidak mustahil. Jika sistem sudah terbaru, risikonya 0, dan patch sudah masuk Oktober tahun lalu, jadi sejujurnya seharusnya sudah diperbarui. Jika belum memperbarui dan tidak berniat melakukannya, risikonya jauh lebih besar kecuali Anda memeriksa setiap proses yang berjalan di perangkat tanpa terkecuali
Ini tulisan yang sangat rinci, dan saya suka karena juga membahas sejarah berbagai kernel. Namun, untuk tulisan tentang isu keamanan serius, akan bagus jika di awal ada penjelasan sangat singkat tentang cakupan dampak, syarat serangan, dan apakah ini kesalahan logika atau memory corruption
Cukup singkat saja, sekadar cukup untuk memutuskan apakah perlu membaca sisanya
Tulisan yang benar-benar menarik. Saya tidak tahu ada begitu banyak cerita di balik proses lahirnya kernel Mach dan Darwin
Pada titik ini, Mach terasa seperti sumber bug macOS yang stabil. Saya tahu Apple bekerja keras menguncinya, tetapi apakah ada jalur untuk benar-benar keluar dari Mach?
Jika daemon tidak memeriksa entitlement, itu tidak aman. Yang perlu disalahkan bukan mekanisme messaging-nya, melainkan cara penggunaannya
Sebenarnya sistem messaging terkunci apa pun membutuhkan sesuatu di luar sekadar pengiriman pesan sederhana, misalnya verifikasi pengirim. Itu bukan sesuatu yang bisa begitu saja didapat dari protokol komunikasi level rendah seperti Mach. Kecuali Apple merombak compiler MIG untuk menambahkan pemeriksaan entitlement
Mach sangat bagus bila digunakan bersama pemeriksaan entitlement
Secara teknis, semakin banyak komponen berbeda yang hidup berdampingan bisa meningkatkan permukaan serangan potensial. Namun permukaan yang lebih terspesialisasi bisa menyederhanakan kontrol, dan pada akhirnya membuat permukaan itu lebih terlindungi