Apakah Symlinks di templat merupakan masalah keamanan, dan jika ya, mengapa?

35

Magento merekomendasikan untuk tidak menggunakan templat melalui symlink:

Advanced > Developer > Template Settings > Allow Symlinks

Peringatan! Mengaktifkan fitur ini tidak disarankan pada lingkungan produksi karena ini mewakili potensi risiko keamanan.

Sampai hari ini saya tidak dapat melihat risiko di sini.

  • Apa risikonya?
Fabian Blechschmidt
sumber
8
Saya hanya bisa membayangkan ini menjadi risiko pada host bersama, yang seharusnya tidak digunakan untuk eCommerce.
patokan
3
@benmark. Mengapa Anda tidak menempatkan ini sebagai jawaban?
Marius
2
@Fabi pertanyaan yang sangat bagus!
user487772
3
Saya tahu bahwa orang lain akan menawarkan jawaban yang lebih lengkap. Saya TEPAT :-D
patokan
3
@benmarks Situs web membutuhkan jawaban yang lebih tinggi per tingkat pertanyaan dengan cara apa pun ;-)
user487772

Jawaban:

40

Symlink tidak selalu buruk.

Pertama-tama: Jika mencoba untuk membuka target symlink, izin file dari target berlaku. Jika Anda tidak diizinkan membaca / menulis / mengeksekusi target symlink, tidak ada yang terjadi.

Tetapi: Anda mungkin dapat menjalankan file di luar root dokumen Anda (kadang-kadang itulah yang ingin Anda lakukan dengan mereka, bukan?). Masalahnya dapat terjadi jika Anda minati tidak dalam lingkungan Suexec dan memiliki apacheatau www-datapengguna pada shared hosting yang, bertanggung jawab melayani file dari account yang berbeda. Pengguna sistem Anda tidak diizinkan untuk mengakses file pelanggan lain, tetapi apache/www-datasebagian besar pengguna akan memiliki hak baca di semua akun bersama. Ini mungkin merupakan skenario di mana satu pengguna dapat mengakses file pengguna lain pada host bersama. Bukan dengan pengguna Anda sendiri, tetapi dengan mengakses file melalui browser dengan apache/www-datapengguna. Singkatnya: Dalam skenario ini Anda akan dapat mengakses file pengguna lain => buruk.

Hal buruk berikutnya adalah penyerang dapat membuat symlink, juga ke file seperti / etc / passwd, ..., unduh data ini dan lanjutkan dengan informasi ini. Ini tidak hanya sampai symlink, tetapi juga hingga konfigurasi server yang buruk (di mana akses ke file-file ini sangat terbatas). Jadi tidak menggunakan symlink mencegah dari beberapa kemungkinan serangan.

Ini bukan hanya tentang symlink itu sendiri yang menjadi risiko keamanan, tetapi masalah konfigurasi server.

Anna Völkl
sumber
5
Penjelasan yang bagus - ini adalah jawaban yang benar, pada dasarnya, "gunakan dengan resiko Anda sendiri"
philwinkle
2
Mungkin perlu disebutkan (meskipun selalu ada keseimbangan dengan bug terkait keamanan di lingkungan 'enggan untuk meningkatkan') - Magento sangat tidak mendukung symlink terkait dengan eksploitasi di mana templat dan file tata letak di luar app/designfolder, bila dikombinasikan dengan eksploitasi kecil lainnya, dapat digunakan oleh pengguna admin untuk eskalasi hak istimewa dan eksploitasi server lainnya.
Alan Storm
1
Di Apache httpd jika Anda ingin mendukung symlink, pertimbangkan SymLinksIfOwnerMatchopsi yang digunakan sebagai ganti FollowSymlinks.
hakre
15

ya mereka, itu sebabnya webservers biasanya juga memiliki konfigurasi "jangan ikuti symlink" atau setidaknya "hanya mengikuti symlink target dengan pengguna yang sama" Itu karena webserver / php biasanya berjalan dengan lebih banyak hak maka Anda harus memiliki akses.

Dan karena webservers biasanya mencoba untuk menghindari hal-hal seperti terlihat / etc / shadow, itu untuk templat magento bahkan lebih berbahaya, karena templat diurai melalui include () sehingga Anda memiliki kebocoran keamanan yang sangat kuat jika Anda tidak memiliki kontrol penuh atas file Anda.

Anda mungkin berpendapat, bahwa ada masalah lain saat itu, tetapi siapa yang benar-benar tahu setiap skenario serangan potensial, dan seringkali merupakan kombinasi dari lubang keamanan yang kurang bermasalah, yang mengarah pada terobosan besar.

Juga, ada beberapa waktu lalu perbaikan keamanan mengenai direktori media dan symlink, jadi Anda harus mencari di sana untuk kemungkinan skenario serangan.

Flyingmana
sumber
1
Jika orang lain dapat membuat symlink di server Anda, Anda sudah dalam masalah yang lebih besar dari itu. Maksud saya - lihat komentar Ben di bawah ini. Siapa yang akan meng-host Magento di hosting bersama? Siapa yang akan meng-host sesuatu di hosting bersama saat ini dan mengapa? :)
Sven
3
hanya karena ada orang yang melakukannya. Anda tidak dapat mengharapkan orang lain bertindak wajar. Akan selalu ada orang yang melakukan ini, dan akan selalu ada orang yang melakukan kesalahan mengenai konfigurasi server umum.
Flyingmana
14

Saya hanya bisa membayangkan ini menjadi risiko pada host bersama, yang seharusnya tidak digunakan untuk eCommerce.

tanda batas
sumber
1
Sayangnya itu digunakan cukup banyak.
Piotr Kaminski
2
Menurut standar PCI Security Council secara teknis cloud publik adalah multi-tenant sehingga bahkan dianggap sebagai "risiko".
philwinkle
4

Magento patch SUPEE-9767 termasuk APPSEC-1281: Eksekusi kode jauh melalui symlink , jadi ya, Symlinks pada templat adalah masalah keamanan.

Tipe:
Eksekusi Kode Jarak Jauh (RCE)

CVSSv3 Severity:
8.8 (Tinggi)

Serangan yang Diketahui:
Ya. Penyerang menonaktifkan perlindungan konfigurasi setelah mendapatkan akses admin dan mengunggah kode berbahaya.

Deskripsi:
Penggunaan opsi AllowSymlinks dalam pengaturan konfigurasi dapat mengaktifkan unggahan gambar yang berisi kode berbahaya. Meskipun opsi ini dinonaktifkan secara default, penyerang dengan akses ke pengaturan konfigurasi penyimpanan dapat mengaktifkannya dan mengeksekusi kode dari jarak jauh.

Produk yang terpengaruh:
Magento CE sebelum 1.9.3.3, dan Magento EE sebelum 1.14.3.3

Fixed In:
CE 1.9.3.3, EE 1.14.3.3, SUPEE-9767

Reporter:
Wilko Nienhaus

Ehannes
sumber
0

Tidak merekomendasikan untuk mengizinkan. Saya menghadapi kesalahan pemuatan js saat symlink diaktifkan.
Banyak;

TypeError: $ .widget bukan fungsi

Saya harus mencoba 4-5 penyegaran untuk halaman yang berhasil dimuat.
Setelah menutupnya, mungkin sumber daya tidak digunakan secara perlahan untuk pertama kali tetapi kesalahan hilang.

PS: Setelah menonaktifkan symlink, Anda harus menghapus salinan file yang digunakan setelah setiap perubahan untuk static.php salin kembali untuk Anda.

rbostan
sumber
1
Maaf, saya tidak mengerti - Anda harus membuat 4-5 penyegaran, sebelum berhasil? Apa hubungannya ini dengan symlink?
Fabian Blechschmidt
Sebelum menonaktifkan symlink :) Maaf untuk bahasa Inggris saya.
rbostan
Apakah kita berbicara tentang magento2? Lalu saya mengerti, bahwa saya tidak mengerti - belum ada petunjuk tentang 2.
Fabian Blechschmidt