Aplikasi apa pun yang diluncurkan dari bawah pengguna saat ini memiliki akses ke keyboard, mouse, tampilan (misalnya, mengambil tangkapan layar), dan ini tidak baik.
Semua klien X11 di desktop dapat mengakses satu sama lain secara mendalam, termasuk mendapatkan konten jendela apa pun, mengubahnya, menutup jendela apa pun, memalsukan peristiwa tombol dan mouse ke klien lain, mengambil perangkat input apa pun, dll.
Desain protokol X11 didasarkan pada gagasan bahwa semua klien TERPERCAYA dan akan berkolaborasi, bukan saling menginjak kaki (yang terakhir benar-benar rusak oleh aplikasi modern seperti Firefox, Chrome, atau Java).
TETAPI, jika kita menginstal program dari repositori resmi (misalnya, untuk Debian), yang kemungkinan besar tidak berisi keyloggers, dll., maka masalah bahayanya jelas dibesar-besarkan. Apakah saya salah?
Program memiliki bug, yang dapat dieksploitasi. Server dan pustaka X11 mungkin tidak mutakhir. Misalnya, setiap klien X11 dapat crash server X dalam versi Debian saat ini (Buster 10) melalui permintaan Xkb yang tidak berbahaya. (Itu telah diperbaiki di sumber hulu, tetapi belum berhasil di Debian). Jika dapat merusaknya, maka ada kemungkinan bahwa itu juga dapat mengeksekusi kode dengan hak istimewa server X11 (akses ke perangkat keras, dll).
Untuk masalah dengan lemahnya autentikasi di Xwayland (dan Xorg Xserver biasa di Debian), lihat catatan di bagian akhir jawaban ini.
Ya, Anda dapat membuka aplikasi di server terpisah (misalnya, Xephyr), tetapi ini merepotkan, karena tidak ada clipboard bersama. Membuat clipboard berdasarkan file tmp juga merepotkan.
Perhatikan bahwa kecuali Anda mengambil langkah tambahan, Xephyr
memungkinkan setiap pengguna lokal untuk menyambungkannya secara default. Lihat ini untuk diskusi tentangnya.
Membuat clipboard bersama antara beberapa server X11 adalah masalah yang menarik, yang pantas untuk Q&A-nya sendiri, daripada dicampur dengan ini.
Aplikasi yang berjalan di mesin yang sama dengan akun pengguna yang sama dapat menggunakan ptrace
panggilan sistem untuk memodifikasi memori proses satu sama lain, jadi X11 bukanlah permukaan serangan yang paling nyaman di sini.
Untuk aplikasi yang tidak sepenuhnya Anda percayai, pertama-tama Anda harus menjalankannya dengan ID pengguna yang berbeda (seperti yang dilakukan Android dengan aplikasi dari vendor yang berbeda), dan Anda dapat menggunakan ekstensi XSECURITY untuk membuat token akses "tidak tepercaya" untuk server X , yang membatasi akses aplikasi ke X11:
- tidak ada akses ke acara masukan yang tidak diarahkan ke jendela sendiri
- tidak ada akses ke ekstensi XTEST
- tidak ada jendela transparan
Peristiwa input di X11 memiliki Synthetic
bidang yang memberi tahu apakah peristiwa input dihasilkan dari perangkat input atau dikirim dari program lain, dan program penerima memutuskan apa yang harus dilakukan dengan peristiwa sintetik, misalnya xterm
abaikan saja mereka. Ekstensi XTEST memungkinkan pembuatan non-Synthetic
acara dari perangkat lunak untuk tujuan pengujian, itulah sebabnya klien yang tidak dipercaya tidak diizinkan untuk menggunakan ekstensi itu.