Okuma iken bu , ben şu istismar bulundu:
% cp /usr/bin/id ~
% chmod -x ~/id
% ls -al ~/id
-rw-r--r-- 1 edd edd 22020 2012-08-01 15:06 /home/edd/id
% ~/id
zsh: permission denied: /home/edd/id
% /lib/ld-linux.so.2 ~/id
uid=1001(edd) gid=1001(edd) groups=1001(edd),1002(wheel)
Bu kod parçası, dosya sisteminin yürütme izinlerini normal bir ayrıcalıklı kullanıcı olarak önemsiz bir şekilde kaldırabileceğimizi gösterir. Bunu bir Ubuntu 12.04'te koştum.
Linux yükleyici, dosyaya (1) göre paylaşılan bir nesne iken, aynı zamanda doğrudan çalıştırılmasını sağlayan bir giriş noktasına sahiptir. Bu şekilde çalıştırıldığında, Linux yükleyici ELF ikili dosyaları için tercüman olarak hareket eder.
Ancak OpenBSD makinemde bu istismar etkili değil çünkü yükleyiciyi bir program olarak çalıştıramayabilirsiniz. OpenBSD kılavuz sayfası şöyle der: "ld.so, başlangıçta çekirdek tarafından yüklenen paylaşılan bir nesnedir."
Bunu Solaris 9'da deneyin; bir segfault alacaksınız. Başka bir yerde ne olduğundan emin değilim.
Bu yüzden benim sorularım:
- Neden Linux yükleyici (doğrudan yürütüldüğünde) bir ELF ikili kodunu yorumlamadan önce dosya sistemi özelliklerini kontrol etmiyor ?
- Neden bu kadar önemsiz şekilde kaldırılmıyorsa, dosyaların yürütülmesine izin vermeyen bir mekanizma uygulayın? Bir şey mi kaçırdım?
libc
(bir kez yaptım, bir Arch kutusunu yükselttim), bu küçük tuhaflığa minnettar olacaksınız.