Saat membaca ini , saya menemukan exploit berikut:
% 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)
Cuplikan ini menunjukkan bahwa kita secara sepele dapat menghindar dari izin eksekusi sistem berkas sebagai pengguna biasa yang tidak memiliki hak. Saya menjalankan ini pada Ubuntu 12.04.
Sementara loader Linux adalah objek bersama menurut file (1), itu juga memiliki titik masuk yang memungkinkannya untuk dieksekusi secara langsung. Ketika dijalankan dengan cara ini, loader Linux bertindak sebagai juru bahasa untuk binari ELF.
Pada mesin OpenBSD saya, bagaimanapun, exploit ini tidak efektif, karena Anda tidak dapat menjalankan loader sebagai suatu program. Halaman manual OpenBSD mengatakan: "ld.so sendiri merupakan objek bersama yang awalnya dimuat oleh kernel.".
Coba ini di Solaris 9, dan Anda akan mendapatkan segfault. Saya tidak yakin apa yang terjadi di tempat lain.
Karena itu pertanyaan saya adalah:
- Mengapa pemuat Linux (ketika dieksekusi langsung) tidak memeriksa atribut filesystem sebelum menafsirkan biner ELF?
- Mengapa menerapkan mekanisme yang dirancang untuk melarang eksekusi file, jika terlalu sepele? Apakah saya melewatkan sesuatu?
libc
(saya pernah melakukannya, memutakhirkan kotak Arch), Anda akan berterima kasih atas kekhasan kecil ini.