"Find -exec" i kullanmanın güvenlik sorunları ve yarış koşulları nelerdir?


14

Gönderen findadam sayfası :

-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.

Ne anlama geliyor? Neden başlangıç ​​dizininden çalıştırmak için yarış koşulları var? Ve bu güvenlik riskleri nasıl?


Yanıtlar:


13

Detayları burada buldum :

-execEylem başka bir program çalıştırmak neden olur. O anda dikkate alınan dosyanın adını programa iletir. Çağrılan program genellikle bu dosya üzerinde bazı eylemler gerçekleştirir. Bir kez daha burada sömürülebilecek bir yarış koşulu var. Komutu özel bir örnek olarak ele alacağız

 find /tmp -path /tmp/umsp/passwd -exec /bin/rm

Bu basit örnekte, silinecek yalnızca bir dosya tanımlıyoruz ve silinmeye /bin/rmdavet ediyoruz. Bir sorun vardır, çünkü find'ın -execeylemi işlemesi gerektiğine karar verdiği nokta ile /bin/rmkomutun dosyayı dosya sisteminden silmek için aslında unlink () sistem çağrısını verdiği nokta arasında bir zaman boşluğu vardır . Bu süre zarfında, bir saldırgan /tmp/umsp dizini sembolik bir bağlantıyla değiştirerek yeniden adlandırabilir /etc. /bin/rmAkılda bulan aynı dosya üzerinde çalıştığını belirlemek için bir yolu yoktur . Sembolik bağlantı kurulduktan sonra, saldırgan /etc/passwdgerçekte çağrılan komutun amaçladığı etki olmayan dosyanın silinmesine neden olmaya ikna etti .

Herkesin bundan ne kadar yararlanabileceğinden emin değilim; ama sanırım cevap var!


Yukarıdaki durumda, execdirilk Chdir olur /tmp/umspkomutunu çalıştırarak ve bu yüzden teorik olarak, bir saldırganın relinking dizin .. hiçbir etkisi olurdu önce eğer "karar verir" Yeniden bağlantı find sonra oldu değerlendirmek -execama daha önce rmkomuta onun işi yapabilir. Ama bunun neden bir fark yaratacağını merak ediyorum: kullanıcı findkomutu yazmaya karar verdikten sonra saldırgan yeniden bağlantı kurabilir .
Otheus

1
@RuiFRibeiro Bağlantı, komuta iletilen argüman değil, bir ara dizin. onu gördüğünde /tmp/umspbir dizindir find, ancak rmçalıştırıldığında saldırıya uğrayan kişi onu sembolik bir bağlantı olarak değiştirdi /etc. /tmp/umsp/passwdbaşından beri düzenli bir dosyadır ancak aynı dosya değildir.
Gilles 'SO- kötü olmayı kes'

2

-execTehlikeli olmanın nedeninin , kullanıcının çalıştırılacak programın tam adını ve yolunu belirtmemesi durumunda, potansiyel olarak yanlış programı yürütmesinden kaynaklandığına inanıyorum.

Misal:

find /some/path -exec coolprogram

İçinde /some/path, biri başka bir tane yaptı coolprogramve tüm verilerinizi kötü bir aktöre yükler.

Ama bekle, diyorsun ki, onu yürütmek zorunda değil misin ./coolprogram? Evet, ancak bazı kişiler PATH=.:/bin:whateverprogramın geçerli dizinde yürütülmesini sağlar.

Bu muhtemelen basitleştirilmiş, ancak bazı durumlarda tehlikeli olabileceğini düşünüyorum. Bir kez sıfır bayt cpioyanlış dizinde sona erdi bir sorunu gidermek zorunda kaldı . Bir programın cpiodizinde sıfır bayt dosyasını çalıştırdığı için çalışmadığı için çökmesine neden oldu.


3
Bu riskler izole değildir find -exec. Yolunuza koyduysanız ., bunu yapmak için coolprogramkullansanız da kullanmasanız da, mevcut direktifinizde yürütmek zaten tehlikelidir find!
Danny Tuppeny

1
Kabul etti, ama öyle görünüyor ki -execdir de bahsettiğim durumu izliyor: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.
Doug

Sanırım hikayenin ahlaki olması. yolunda da kötü bir fikir var, bu yüzden orada olmadığından eminim.
Doug

.Yola ve {}komuta izin vermeme hakkında bilmek ilginç . Belki gelecekte Linux sadece .tamamen yolunu yasaklayacak ve araçların kendi güvenlik kontrollerini uygulaması gerekmeyecek! :)
Danny Tuppeny

1
Yazdığım kodun% 90'ının sadece yanlış giden şeylerin% 5'ini yakalamak olduğunu düşünüyorum. :)
Doug
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.