Mengapa "AcceptEnv *" dianggap tidak aman?

12

Di /etc/ssh/sshd_config, ada opsi yang disebut AcceptEnvyang memungkinkan klien ssh untuk mengirim variabel lingkungan. Saya harus dapat mengirim sejumlah besar variabel lingkungan. Perubahan ini pada setiap koneksi dari klien, jadi menempatkan mereka dalam skrip login di server akan lebih sulit.

Saya pernah membaca itu "AcceptEnv *"tidak aman. Saya ingin memahami mengapa sebelum saya mencoba untuk mendapatkan daftar semua variabel lingkungan yang berusaha diatur untuk diletakkan di sana.

Mengapa itu dianggap tidak aman? Bisakah saya mendapatkan contoh?

TheDauthi
sumber

Jawaban:

11

Mengaktifkan pemrosesan lingkungan dapat memungkinkan pengguna untuk melewati pembatasan akses di beberapa konfigurasi menggunakan mekanisme seperti LD_PRELOAD.

Tidak semua versi halaman manual untuk sshd_config menyebutkan ini. Jika variabel lingkungan Anda diubah sebelumnya dan proses istimewa tertentu dieksekusi dengan perpustakaan baru yang ditentukan oleh ini, masalah dapat terjadi.

Lihatlah http://www.dankalia.com/tutor/01005/0100501004.htm dan cari "LD_PRELOAD Exploit". Maaf, halaman ini tidak memiliki tautan jangkar.

Lihat juga pertanyaan StackOverflow ini, " Apa trik LD_PRELOAD? "

Mengatur variabel lingkungan setelah koneksi baik-baik saja, tetapi ketika variabel tersebut ditafsirkan oleh daemon ssh sebagaimana diatur oleh AcceptEnv, Hal Buruk dapat terjadi.

Jeff Ferland
sumber
1
Apa bedanya dengan ketika mereka mengatur variabel secara manual setelah masuk?
Joseph Garvin
1
@ JosephephGarvin, beberapa sistem memiliki shell terbatas atau hanya mengizinkan satu perintah tertentu, sehingga "mereka" tidak bisa . Kekhawatiran itu, dengan demikian, menyediakan sarana yang dengannya langkah-langkah keamanan semacam itu dapat dilewati.
Charles Duffy
0

Jangan terima variabel lingkungan:

Lihat exploit Shellshock yang keluar baru-baru ini .. jika Anda menerima variabel lingkungan maka Anda membuka exploit yang benar-benar jahat.

John Hunt
sumber
1
Anda menyebarkan ketakutan IMO. Jika Anda khawatir mengapa mereka memiliki akses SSH? Dan btw Anda tidak bisa menghentikan mereka dari pengaturan variabel lingkungan setelah mereka berada di shell atau bahkan fungsi. Eksploitasi itu adalah tentang akses shell yang tidak sah melalui hal-hal seperti nginx, bukan akses shell yang diotorisasi.
Jordon Bedwell
Pokoknya Anda menerima setidaknya satu env. variabel bernama TERM. Mungkin ada kebutuhan yang valid untuk menerima variabel lain seperti PRINTER, EDITOR, PAGER, ...
ibre5041
@JordonBedwell, tidak setiap koneksi SSH yang berwenang untuk akses shell. Saya memiliki beberapa sistem di mana ada akun yang hanya otentikasi dengan kunci SSH yang hanya dapat menjalankan satu perintah, spesifik (dengan identitas pemilik kunci itu, dan detail lainnya, dipanggang).
Charles Duffy
... yang mengatakan, saya setuju bahwa pada 2017, ShellShock sangat berlebihan di sini. Dengan implementasi saat ini, menghasilkan fungsi diekspor membutuhkan kontrol tidak hanya melalui variabel lingkungan ini nilai , tetapi juga yang nama (dan proses mengevaluasi fungsi yang diekspor selama shell startup tidak lagi sendiri rentan terhadap serangan injeksi).
Charles Duffy