Dari find
halaman manual :
-exec command ; There are unavoidable security problems surrounding use of the -exec action; you should use the -execdir option instead. -execdir command {} + Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you started find. This a much more secure method for invoking commands, as it avoids race conditions during resolution of the paths to the matched files.
Apa artinya ini? Mengapa ada kondisi balapan dengan menjalankannya dari direktori awal? Dan bagaimana risiko keamanan ini?
Jawaban:
Temukan detailnya di sini :
Tidak yakin seberapa besar kemungkinan seseorang dapat mengeksploitasi ini; tapi saya kira ada jawabannya!
sumber
execdir
pertama chdir/tmp/umsp
sebelum menjalankan perintah, dan secara teoritis, penyerang yang menautkan kembali direktori tidak akan berpengaruh .. jika penautan ulang terjadi setelah menemukan "memutuskan" untuk mengevaluasi-exec
tetapi sebelumrm
perintah dapat melakukan tugasnya. Tapi saya bertanya-tanya mengapa ini akan membuat perbedaan: penyerang hanya dapat melakukan relink setelah pengguna memutuskan untuk menulisfind
perintah./tmp/umsp
adalah direktori ketikafind
melihatnya, tetapi ketikarm
dijalankan, yang diserang telah mengubahnya menjadi tautan simbolis ke/etc
./tmp/umsp/passwd
adalah file biasa selama ini, tapi tidak sama.Saya percaya bahwa alasan mengapa
-exec
berbahaya adalah karena jika pengguna tidak menentukan nama lengkap dan jalur ke program yang akan dieksekusi, itu berpotensi mengeksekusi program yang salah.Contoh:
Di
/some/path
, seseorang membuat yang laincoolprogram
, dan mengunggah semua data Anda ke aktor yang buruk.Tapi tunggu, katamu, bukankah kamu harus melakukannya
./coolprogram
? Ya, tetapi beberapa orang memilikinyaPATH=.:/bin:whatever
, yang akan menjalankan program di direktori saat ini.Ini mungkin disederhanakan, tetapi saya pikir itu bisa berbahaya dalam beberapa kasus. Saya harus memecahkan masalah sekali ketika nol-byte
cpio
berakhir di direktori yang salah. Itu menyebabkan program crash karenacpio
tidak berfungsi karena menjalankan file nol-byte di direktori.sumber
find -exec
. Jika Anda sudah menempatkan.
path Anda, maka mengeksekusicoolprogram
di dir Anda saat ini sudah berbahaya, apakah Anda menggunakannyafind
atau tidak!The ‘-execdir’ action refuses to do anything if the current directory is included in the $PATH environment variable. This is necessary because ‘-execdir’ runs programs in the same directory in which it finds files – in general, such a directory might be writable by untrusted users. For similar reasons, ‘-execdir’ does not allow ‘{}’ to appear in the name of the command to be run.
.
di jalur dan{}
di perintah. Mungkin di masa depan Linux hanya akan melarang.
sepenuhnya path dan alat tidak perlu menerapkan pemeriksaan keamanan mereka sendiri! :)