Anda bisa menjalankan program yang salah. Seseorang dapat membuat Anda menjalankan program mereka.
The -execdir
tindakan menjalankan perintah Anda dari direktori yang berisi file (s) ditemukan. Ketika $PATH
berisi jalur relatif, seperti .
atau apa pun yang tidak dimulai/
, -execdir
tidak aman karena direktori tempat file ditemukan (atau direktori lain yang diselesaikan relatif terhadapnya) juga bisa berisi executable dengan nama yang sama dengan yang Anda coba untuk berlari. Eksekusi yang berpotensi tidak dipercaya itu kemudian akan dijalankan.
Ini dapat dengan sengaja dieksploitasi oleh pengguna lain untuk menyebabkan Anda menjalankan program mereka, yang dapat menyebabkan kerusakan atau melanggar keamanan data, alih-alih program yang Anda coba jalankan. Atau, yang lebih jarang, itu hanya dapat mengakibatkan program yang salah dijalankan secara tidak sengaja, bahkan tanpa ada yang berusaha membuat masalah terjadi.
Jika segala sesuatu di Anda PATH
variabel lingkungan adalah path absolut, kesalahan ini seharusnya tidak terjadi, bahkan jika direktori yang Anda cari dan -execdir
ing dari yang terkandung dalam PATH
. (Saya telah memeriksa apakah ini berfungsi.) Jika Anda yakin Anda tidak memiliki direktori relatif $PATH
tetapi masih mendapatkan kesalahan ini, harap perbarui pertanyaan Anda dengan perincian termasuk output dari echo "$PATH"
.
Contoh nyata.
Sebagai contoh apa yang bisa salah, anggap:
- Alice memiliki
.
di dalam dirinya $PATH
karena dia ingin dapat menjalankan program di direktori apa pun dia cd
akan, tanpa repot-repot untuk mengawali nama mereka dengan ./
.
- Hawa frenemy Alice telah berbagi
/home/eve/shared
dengan Alice.
- Alice ingin statistik (baris, kata, byte) pada
.c
file yang telah dibagikan Eve dengannya.
Jadi Alice menjalankan:
find ~eve/shared -name \*.c -execdir wc {} \;
Sayangnya untuk Alice, Eve telah membuat skripnya sendiri, menamainya wc
, mengaturnya executable ( chmod +x
), dan menempatkannya secara sembunyi-sembunyi di salah satu direktori di bawah /home/eve/shared
. Script Eve terlihat seperti ini:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Jadi ketika Alice menggunakan find
dengan -execdir
untuk menjalankan wc
pada file yang Hawa telah bagikan, dan itu akan ke file dalam direktori yang sama dengan wc
skrip kustom Hawa, Hawa wc
berjalan - dengan semua hak istimewa Alice!
(Menjadi licik, Hawa telah membuat wc
skripnya bertindak sebagai pembungkus untuk sistem wc
, sehingga Alice bahkan tidak akan tahu ada yang tidak beres, yaitu yang do_evil
dijalankan. Namun, variasi yang lebih sederhana - dan juga lebih canggih - dimungkinkan. )
Bagaimana find
mencegahnya?
find
mencegah masalah keamanan ini terjadi dengan menolak untuk mengambil -execdir
tindakan ketika $PATH
berisi direktori relatif.
find
menawarkan dua pesan diagnostik tergantung pada situasi spesifik.
Jika .
ada di $PATH
, maka (seperti yang Anda lihat) dikatakan:
find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)
Mungkin memiliki pesan khusus untuk .
kasus ini karena sangat umum.
Jika path relatif selain .
--say, foo
--appears di $PATH
dan Anda menjalankan find
dengan -execdir
, ia mengatakan:
find: The relative path `foo' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove that entry from $PATH
Lebih baik tidak memiliki jalur relatif $PATH
sama sekali.
Risiko memiliki .
atau jalur relatif lain $PATH
secara khusus meningkat ketika menggunakan utilitas yang secara otomatis mengubah direktori, yang mengapa find
tidak akan membiarkan Anda menggunakan -execdir
dalam situasi ini.
Tetapi memiliki jalur relatif, khususnya .
, dalam diri Anda $PATH
secara inheren berisiko dan sebaiknya dihindari. Perhatikan situasi fiksi dalam contoh di atas. Misalkan bukannya berjalan find
, Alice hanya cd
s untuk ~eve/shared/blah
dan berjalan wc *.c
. Jika blah
mengandung wc
skrip Eve , do_evil
jalankan sebagai Alice.