Als ich dies las , fand ich den folgenden Exploit:
% 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)
Dieses Snippet zeigt, dass wir als normaler, nicht privilegierter Benutzer die Ausführungsberechtigungen des Dateisystems trivial umgehen können. Ich habe dies auf einem Ubuntu 12.04 ausgeführt.
Während der Linux-Loader ein Shared Object gemäß Datei (1) ist, hat er auch einen Einstiegspunkt, über den er direkt ausgeführt werden kann. Bei dieser Ausführung fungiert der Linux-Loader als Interpreter für ELF-Binärdateien.
Auf meinem OpenBSD-Rechner ist dieser Exploit jedoch nicht effektiv, da Sie den Loader möglicherweise nicht als Programm ausführen. Die OpenBSD-Handbuchseite sagt: "ld.so ist selbst ein gemeinsames Objekt, das anfänglich vom Kernel geladen wird."
Versuchen Sie dies unter Solaris 9, und Sie erhalten einen Segfault. Ich bin nicht sicher, was woanders passiert.
Meine Fragen sind daher:
- Warum wird der Linux Loader (wenn sie direkt ausgeführt wird ) nicht die Dateisystem - Attribute überprüfen , bevor ein ELF - Binaries zu interpretieren?
- Warum einen Mechanismus implementieren, der die Ausführung von Dateien verbietet, wenn er so einfach umgangen wird? Habe ich etwas verpasst
libc
(ich habe es einmal getan, um eine Arch-Box zu aktualisieren), werden Sie für diese kleine Eigenart dankbar sein.