Insiden Keamanan curl Apple 12604
(daniel.haxx.se)- curl yang dibundel Apple di macOS menangani opsi
--cacertsecara berbeda dari build open source, sehingga mematahkan ekspektasi verifikasi TLS bahwa hanya CA yang ditentukan pengguna yang dipercaya --cacertadalah opsi yang membuat sertifikat server diverifikasi hanya dengan kumpulan sertifikat CA yang ditentukan; jika verifikasi gagal, curl seharusnya mengembalikan error- curl yang disediakan Apple tampaknya tetap memeriksa penyimpanan CA sistem sebagai tambahan meskipun verifikasi CA yang ditentukan gagal; perilaku ini tidak diminta dan tidak didokumentasikan
- Apple Product Security menjawab bahwa LibreSSL, OpenSSL versi Apple, memang secara sengaja menggunakan penyimpanan kepercayaan sistem bawaan sebagai sumber kepercayaan default, sehingga bukan target perbaikan
- Karena ini bukan kerentanan pada distribusi proyek curl, CVE tidak diterbitkan, tetapi hasil verifikasi CA pada curl bundel macOS dapat berbeda dari dokumentasinya
Awal isu 12604
- Pada 28 Desember 2023, bugreport 12604 didaftarkan di issue tracker curl
- Judul isunya adalah “flag --cacert behavior isn’t consistent between macOS and Linux”, dan dilaporkan oleh Yuedong Wu
- Bahkan ketika menjalankan versi curl yang sama di mesin macOS yang sama, perilaku curl bundel Apple berbeda dari binary curl yang dibangun dari open source
Jaminan yang diharapkan dari --cacert
- Opsi command line curl
--cacertadalah cara untuk membuat curl, pada transfer berikutnya, hanya mempercayai persis kumpulan sertifikat CA yang ditentukan - Jika server TLS tidak dapat menyediakan sertifikat yang bisa diverifikasi dengan kumpulan sertifikat tersebut, curl harus gagal dan mengembalikan error
- Opsi ini ditambahkan ke curl pada Desember 2000, sebagai fitur untuk memastikan pengguna berkomunikasi dengan server yang mereka kenal dan percayai
- Pada akhirnya, ini bersinggungan langsung dengan peran dasar yang seharusnya disediakan TLS
Perilaku pengecualian curl bundel macOS
- curl untuk macOS yang disediakan Apple, saat
--cacertdigunakan, tampaknya memeriksa penyimpanan CA sistem sebagai tambahan jika verifikasi dengan kumpulan sertifikat CA yang ditentukan gagal - Pemeriksaan tambahan ini bukan perilaku yang diminta pengguna, dan juga tidak ada dalam dokumentasi, sehingga sulit diprediksi
- Meski pengguna mencoba melakukan verifikasi dengan file sertifikat CA khusus yang dipersempit, verifikasi tidak akan gagal jika di penyimpanan CA sistem terdapat sertifikat yang dapat memverifikasi server
- Akibatnya, verifikasi sertifikat yang seharusnya tidak lolos bisa saja lolos, sehingga dianggap sebagai masalah keamanan
Jawaban Apple Product Security
- Pada 29 Desember 2023 pukul 08:30 UTC, email laporan masalah keamanan diteruskan ke Apple Product Security
- Apple Product Security menjawab pada 8 Maret 2024
- Jawaban Apple dapat dirangkum dalam dua poin
- LibreSSL, OpenSSL versi Apple, secara sengaja menggunakan penyimpanan kepercayaan sistem bawaan sebagai sumber kepercayaan default
- Karena sertifikat server dapat berhasil diverifikasi dengan penyimpanan kepercayaan sistem bawaan, Apple tidak menganggapnya sebagai masalah yang perlu ditangani di platform Apple
- Apple menutup kasus ini
Penilaian proyek curl dan dampaknya bagi pengguna
- Fitur yang tidak didokumentasikan di macOS ini membuat verifikasi sertifikat CA curl tidak konsisten dengan dokumentasi
- Pengguna mengharapkan hanya kumpulan sertifikat CA yang ditentukan lewat
--cacertyang digunakan, tetapi curl yang disediakan Apple berperilaku berbeda dari ekspektasi tersebut - Masalah ini bukan kerentanan keamanan pada versi curl yang didistribusikan oleh proyek curl
- Proyek curl tidak menerbitkan CVE untuk masalah ini
- Masalahnya bukan pada kode curl itu sendiri, melainkan berasal dari versi LibreSSL yang disediakan Apple di platformnya dan digunakan untuk build curl
- Saat menggunakan curl yang disediakan Apple di macOS, hasil verifikasi berbasis
--cacertdapat berbeda dari curl build open source
1 komentar
Komentar Hacker News
Perilaku itu benar-benar bodoh. Jika saya secara eksplisit menunjuk CA, alasannya biasanya salah satu dari dua ini: CA saya tidak ada di bundel sistem operasi, atau saya ingin memverifikasi hanya terhadap CA tertentu
Jadi “fitur” Apple ini entah menambah komputasi yang tidak perlu, atau merusak model verifikasi yang diharapkan. Keduanya bukan hasil yang pantas diharapkan
Tetap saja, saya setuju ini perilaku buruk karena hasilnya tidak sesuai harapan. Mengingat Apple biasanya cenderung membuat perubahan yang merusak kompatibilitas ke belakang, dan fitur ini ditambahkan ke curl, rasanya ada keadaan lain yang tidak diungkap Apple. Mungkin ini dipakai untuk alat diagnostik pengembang atau verifikasi AppStore
Sayangnya, perilaku seperti ini—di mana apa pun yang ingin dilakukan “pemilik” perangkat Apple selalu kalah oleh kebijakan Apple—tidak mengejutkan, dan memang selalu harus diantisipasi dari Apple
Setidaknya tidak cocok untuk bagian kehidupan digital itu, dan mengingat harganya, sulit juga membeli satu hanya sebagai perangkat pendamping. Saya terus mempertimbangkan untuk mencoba produk Apple, terakhir headset AR juga begitu, tetapi sejauh ini mereka terlihat terlalu memusuhi pengembang atau tukang oprek
Menganggap perusahaan sebesar Apple membuat keputusan seperti ini demi visi yang lebih besar bahwa mereka “memiliki” perangkat pengguna berarti memberikan Apple kemampuan organisasi dan koordinasi yang luar biasa besar. Bahkan di organisasi yang ukurannya sepersepuluh Apple pun saya belum pernah melihat tingkat seperti itu. Tapi karena ini Apple, tentu saja begitu, kan!?
Mungkin Apple yang mengatur ini?[0] penekanan dari saya
CURLSSLOPT_NATIVE_CAMemberi tahu libcurl untuk memakai penyimpanan CA bawaan sistem operasi untuk verifikasi sertifikat. Jika opsi ini disetel dan file sertifikat CA atau direktori juga disetel, sertifikat tersebut juga akan dicari bersama penyimpanan CA bawaan saat verifikasi
Jika
--cacertdigabungkan dengan opsi ini, tampaknya libcurl berusaha menghormati keduanya. Bukankah keduanya seharusnya saling eksklusif?curltahu bagaimana memanggil librarylibcurlIni adalah backdoor
Saya tidak bilang ini disengaja atau jahat. Tapi secara efektif ini memang backdoor. Kalau Anda mulai menambahkan kunci ke sistem kepercayaan pengguna, berarti Anda telah menambahkan backdoor
Perilaku default-nya memang mencurigakan, tetapi saya tidak sepenuhnya setuju dengan penilaian ini. Sebenarnya ini masalah dokumentasi curl
curl adalah library multi-protokol, jadi tidak mengimplementasikan semua protokol sendiri, dan dalam banyak kasus bergantung pada “backend” sebagai dependensi transitif yang menyerahkan parsing bit tingkat rendah ke pihak luar. Beberapa protokol memang punya dukungan untuk beberapa library alternatif karena alasan yang masuk akal
Kelemahan pendekatan ini adalah sulit atau mustahil menjamin perilaku yang konsisten di antara backend-backend yang independen. Mereka mungkin tidak semua menyediakan fitur yang sama, API-nya mungkin tidak lengkap, atau seperti kali ini, mungkin tidak menyediakan cara untuk menambal sebagian perilaku default. LibreSSL bukan implementasi ulang OpenSSL secara bit demi bit, dan juga tidak wajib meniru seluruh API-nya
Dalam kasus seperti ini, jika upstream enggan memperbaikinya, curl hanya punya dua pilihan: menghentikan dukungan untuk library tersebut, atau mendokumentasikan perilaku khusus itu. Yang pertama bisa merusak kode pengguna, jadi setidaknya yang kedua harus dilakukan
Meski begitu, saya setuju dengan garis besar bahwa ini adalah cacat dari sudut pandang keamanan LibreSSL, dan mungkin memang ada alasan untuk membuka CVE. Hanya saja targetnya seharusnya LibreSSL
Ini mengingatkan saya pada insiden F_BARRIERFSYNC di SQLite
Mereka memang tidak peduli
https://bonsaidb.io/blog/acid-on-apple/
Sikap pemeliharaan mereka kira-kira dua tingkat lebih buruk daripada orang Debian yang pernah merusak OpenSSL
Kalau Daniel bilang curl kalian rusak, ya perbaiki saja, Apple. Sesederhana itu
Dari yang saya cek selama dua menit di sini, sepertinya kali ini dia mungkin benar, tetapi “karena Daniel maka benar” adalah logika terburuk
Ini mengingatkan saya pada percakapan lama tentang sejarah C, khususnya seputar “kontribusi” Eric S. Raymond: https://scienceblogs.com/deltoid/2011/10/14/dennis-ritchie-h...
Terima kasih atas peringatannya. Sebagai catatan, saya memakai MacPorts untuk mengganti cukup banyak alat bawaan macOS, dan curl adalah salah satunya
Alat bawaan itu umumnya sudah tua atau rusak dengan cara lain. Saya sudah lama kehilangan kepercayaan pada software bundelan Apple
Saya penasaran apakah Apple bergantung pada perilaku ini untuk sesuatu yang penting
Sangat masuk akal jika seseorang membuat skrip yang hanya memakai CA privat internal. Saat menjalankan perintah ini, Anda tahu bahwa ia hanya berkomunikasi dengan sumber daya internal perusahaan karena itu adalah CA internal perusahaan
Namun Apple menambahkan backdoor sebesar verifikasi domain ke dalamnya
Lebih jauh lagi, juga cukup masuk akal memakai nama dummy dan memastikan Anda sedang terhubung ke server perusahaan hanya berdasarkan fakta bahwa sertifikatnya ditandatangani oleh CA perusahaan. Tapi Apple merusak asumsi yang sangat masuk akal ini dan menciptakan kerentanan keamanan. Ini buruk
Jadi segini rupanya kadar kepedulian Apple terhadap keamanan pengguna