- Kerentanan keamanan serius ditemukan pada GNU Screen 5.0.0 dan instalasi setuid-root
- Isu utama mencakup eskalasi hak akses root lokal, pembajakan TTY, dan pembuatan PTY yang bisa ditulis semua orang
- Banyak distribusi Linux dan UNIX terdampak sebagian atau seluruhnya
- Patch sementara telah disediakan dan banyak distribusi perlu mengambil tindakan prioritas
- Desain setuid-root Screen sendiri memiliki risiko keamanan mendasar
1. Pendahuluan
- Pada Juli 2024, peninjauan keamanan dimulai ketika maintainer upstream Screen meminta code review
- Sebelumnya tidak ditemukan masalah berarti, tetapi kali ini ditemukan kerentanan eskalasi hak akses root yang serius saat Screen 5.0.0 dijalankan dengan konfigurasi setuid-root
- Selain itu, juga dikonfirmasi adanya sejumlah kerentanan keamanan yang lebih ringan yang memengaruhi versi sebelumnya (4.9.1 dan lainnya)
- Laporan ini melampirkan set patch kerentanan per versi (4.9.1, 5.0.0)
- Termasuk konfigurasi dan versi Screen per distribusi, kerentanan utama, risiko pengembangan terkait setuid-root, rekomendasi hardening keamanan, masalah dalam proses koordinasi pengungkapan, dan matriks dampak
2. Gambaran konfigurasi dan versi Screen
- Pada Agustus 2024, Screen 5.0.0 dirilis dan disertakan di Arch Linux, Fedora 42, NetBSD 10.1
- Versi 5.0.0 mencakup banyak refactoring, sebagian di antaranya berasal dari kode yang telah ada lebih dari 10 tahun
- Sebagian kerentanan baru diperkenalkan di 5.0.0, dan sebagian lainnya juga ada di versi sebelumnya (4.9.1 dan lainnya)
- Sebagian besar distribusi masih menggunakan 4.9.1
- Mode multiuser Screen hanya dapat digunakan bila diinstal sebagai setuid-root, dan karena kompleksitas kodenya, permukaan serangannya meningkat besar
- Di antara distribusi utama, Arch Linux, FreeBSD, dan NetBSD memasang Screen sebagai setuid-root; Gentoo hanya dapat memasangnya sebagai setuid-root melalui flag USE “multiuser”
3. Rincian isu keamanan
3.a) Perolehan root lokal melalui logfile_reopen() (CVE-2025-23395)
- Saat Screen 5.0.0 dijalankan sebagai setuid-root, fungsi logfile_reopen() membuat file dari path masukan pengguna tanpa melepaskan hak istimewa terlebih dahulu
- Penyerang dapat membuat file arbitrer yang dimiliki root untuk merekam dan menyalahgunakan data terminal
- File yang sudah ada juga dapat disalahgunakan; misalnya, serangan seperti penyisipan kode ke shell script berprivilege dapat dilakukan
- Arch Linux, NetBSD 5.0.0 sepenuhnya rentan, dan lingkungan tertentu di Fedora serta Gentoo rentan sebagian
- Patch diterapkan dengan memulihkan secure file handling, dan ada dampak spesifik per distribusi
3.b) Pembajakan TTY saat menghubungkan sesi multiuser (CVE-2025-46802)
- Di fungsi Attach(), ketika flag multiattach aktif, izin TTY sementara diubah menjadi 0666
- Dalam proses ini, karena race condition, pengguna pihak ketiga dapat memperoleh akses baca/tulis ke TTY tersebut
- Ada risiko penyadapan data masukan, manipulasi data, pencurian kata sandi, dan lain-lain
- Ada juga jalur kode di mana izin TTY tidak dipulihkan ke keadaan semula
- Patch diterapkan dengan menghapus manipulasi chmod 666; meski beberapa use case reconnect dapat rusak, perilaku itu sebelumnya juga tidak berfungsi
3.c) Kerentanan izin bawaan PTY (CVE-2025-46803)
- Di 5.0.0, izin bawaan PTY berubah dari 0620 → 0622 (dapat ditulis semua orang)
- Risiko potensial keamanan meningkat, khususnya karena semua pengguna bisa menulis ke PTY milik pengguna lain
- Perubahan ini tampaknya masuk secara tidak sengaja, dan patch memperbaikinya dengan memulihkan safe default (0620) saat kompilasi
- Arch Linux, NetBSD menjadi target dampak utama
3.d) Kebocoran informasi keberadaan file melalui pesan galat socket (CVE-2025-46804)
- Dengan memanfaatkan variabel lingkungan SCREENDIR dan pesan Error, keberadaan file/direktori nyata dapat diperiksa dengan hak root
- Ini adalah kebocoran informasi minor, tetapi berisiko pada semua lingkungan instalasi setuid-root
3.e) Race condition TOCTOU dalam pengiriman sinyal (CVE-2025-46805)
- Karena jeda waktu antara fungsi CheckPid() dan Kill(), ada risiko sinyal dikirim dengan hak root ke PID yang berbeda dari yang dimaksud
- Umumnya hanya sinyal seperti SIGCONT, SIGHUP, dan sejenisnya yang diizinkan, sehingga dampaknya terbatas, tetapi tetap dapat menyebabkan denial-of-service (DoS) atau kerusakan integritas ringan
3.f) Overflow saat pengiriman perintah akibat penggunaan strncpy() yang salah
- Di 5.0.0, penggunaan
strncpy() yang salah menyebabkan buffer overflow dan crash program
- Jika tidak ditambal dengan benar, memori setelah MAXPATHLEN dapat tertimpa saat pengiriman perintah, yang berujung pada kondisi layanan tidak tersedia
- Ini bukan masalah keamanan, tetapi tetap perlu segera diperbaiki demi stabilitas
4. Risiko tambahan terkait implementasi setuid-root
- Dikonfirmasi adanya kelemahan logika penanganan UID banyak pengguna dalam mode multiuser
- Logika drop privilege dalam status setuid-root tidak lengkap
- Pada sesi yang dibuat oleh root, penurunan hak akses efektif tidak dilakukan dengan semestinya sehingga secara keseluruhan risikonya tinggi
5. Rekomendasi umum untuk memperkuat keamanan
- Dalam proses refactoring kode skala besar, terkonfirmasi bahwa logika keamanan yang sudah ada runtuh
- Mengingat karakteristik biner setuid-root, perlu diperkenalkan test suite keamanan serta semua penanganan filesystem/variabel lingkungan dirancang secara konservatif
- Khususnya, eksekusi penuh setuid-root tidak direkomendasikan, dan fitur multi-user sebaiknya dibatasi hanya lewat mekanisme opt-in untuk grup tepercaya
- Variabel lingkungan (PAH dan lainnya) harus diwajibkan hanya menunjuk ke path tepercaya
6. Masalah dalam proses koordinasi pengumuman kerentanan
- Proses koordinasi dengan upstream berjalan tidak efisien, sehingga pengembangan patch dan pengungkapan mengalami keterlambatan
- Karena kurangnya pemahaman kode dan kapasitas di pihak upstream, respons yang erat sulit dilakukan
- Pada akhirnya, pihak distribusi memimpin pengembangan patch, dan laporan dipublikasikan sesuai jadwal yang telah dikoordinasikan
- Juga terkonfirmasi adanya kekurangan kapasitas pemeliharaan dan pengelolaan pada proyek Screen itu sendiri
7. Matriks dampak
- Arch Linux (5.0.0, setuid-root): terdampak semua kerentanan 3.a, 3.b, 3.c, 3.d, 3.e, 3.f
- Debian/Ubuntu dan banyak distribusi lain: 3.b (dampak sebagian)
- Fedora 42 (5.0.0, setgid-screen): terdampak 3.b (dampak sebagian), 3.f
- Gentoo (4.9.1, setgid-utmp): 3.b (dampak sebagian), dan pada ebuild unstable + flag USE multiuser terdampak sama seperti 5.0.0
- FreeBSD 14.2 (4.9.1, setuid-root): terdampak 3.b, 3.d, 3.e
- NetBSD 10.1 (5.0.0, setuid-root): terdampak 3.a, 3.b, 3.c, 3.d, 3.e, 3.f
- OpenBSD 7.7 (4.9.1): 3.b (dampak sebagian)
- openSUSE TW: 3.b (dampak sebagian)
8. Jadwal
- 2024-07-01: menerima permintaan code review dari upstream
- 2025-01-08: mulai review
- 2025-02-07: melaporkan kerentanan ke upstream secara privat, meminta pengungkapan terkoordinasi
- 2025-02~04: diskusi patch berlangsung, jadwal disesuaikan ulang karena isu periode embargo
- 2025-05-12: laporan ini dan pengumuman resmi dipublikasikan
9. Tautan referensi
- GNU Savannah [halaman proyek Screen]
- openSUSE Bugzilla, patch terkait, CVE referensi, laporan bug, dan tautan dokumentasi
1 komentar
Opini Hacker News
'screen -x <jendela pengguna tertentu>'agar siswa hanya bisa memakai jendela yang diizinkan oleh ACL screen tersebut; saya lalu menampilkan layar tiap siswa satu per satu lewat proyektor; tapi tidak mengejutkan kalau ternyata ini penuh lubang keamananscreen -xchmod u+ske screen saat mencoba menyelesaikan masalah aneh, dan rasanya janggal harus melakukan itu; tapi kemudian saya tahu screen memang punya fitur yang bergantung pada setuid dan di beberapa sistem memang didistribusikan seperti itu; lalu setelah diberiu+s, screen membaca~/.screenrcmilik root alih-alih~/.screenrcsaya (saya anggap sebagai solusi sementara); saya menduga tiap build screen bisa berbeda dalam dukungan setuid