Gemäß man 7 capabilities
CAP_DAC_READ_SEARCH
* Bypass file read permission checks and directory read and execute permission checks;
* Invoke open_by_handle_at(2).
Das hat bei mir funktioniert. (Zeilen, die mit '#' beginnen, sind root, Zeilen mit '$' sind nicht root) In diesem Fall befindet sich der Benutzer ohne root in der wheel
Gruppe.
# cp /usr/bin/find /usr/bin/sudofind
# chmod 710 /usr/bin/sudofind
# chown root:wheel /usr/bin/sudofind
# setcap cap_dac_read_search+ep /usr/bin/sudofind
# exit
$ find /root
find: ‘/root’: Permission denied
$ sudofind /root
/root /root
/root/Testbed
...
...
$ sudofind /root -exec cat {} \;
cat: /root: Permission denied
cat: /root/Testbed: Permission denied
$ sudofind /root -printf "%u %g %m %c %p\n"
root root 644 Mon Apr 20 09:20:48.0457518493 2015 /root
root root 755 Fri Dec 4 02:34:03.0016294644 2015 /root/Testbed
...
...
$ # Capability inheritance test..
$ sudofind /root -exec /bin/sleep 10 \; &
[1] 17017
$ getpcaps $(pgrep find)
Capabilities for `17017': = cap_dac_read_search+ep
$ getpcaps $(pgrep sleep)
Capabilities for `17019': =
In Anbetracht dessen, was die Fähigkeit gewährt, passt sie genau zu dem, was Sie wollen. Ich habe nicht ausführlich geprüft, ob find
es eine Funktion gibt, mit der Sie Bytes in Dateien lesen können, aber offensichtliche Dinge wie LD_PRELOAD
und Shim-Angriffe auf Bibliotheken sollten aufgrund der Art der Setuid-Überprüfungen unter Linux nicht funktionieren und die Fähigkeitsbits werden nicht angezeigt entweder von untergeordneten Prozessen geerbt (im Gegensatz zu Raw Setuid), das ist also ein weiterer Bonus.
Denken Sie daran, dass das, was Sie tun möchten, möglicherweise Bedenken hinsichtlich des Datenschutzes in Bezug auf die temporäre Erstellung oder den Zugriff auf Dateien aufwirft. Das Programm kann als Grundlage für die Bereitstellung eines Eskalationsversuchs für Race-Bedingungen / Berechtigungen verwendet werden (gegen Programme, die bekannte Dateinamen erstellen aber keine korrekten Sicherheitsüberprüfungen durchführen).
Einige schlecht geschriebene Anwendungen können sich auch auf Dateimetadaten oder Baumstrukturen stützen, um Bedeutung zu vermitteln oder Daten zu verbergen. Dies kann dazu führen, dass eingeschränkte Informationen veröffentlicht werden oder privilegierte Dokumente enthüllt werden, über die sonst nichts bekannt ist (Sicherheit durch Unbekanntheit, die ich kenne, aber dies ist eine Sache, die insbesondere Closed-Source-Anbieter leider gerne tun).
Seien Sie daher vorsichtig und seien Sie vorsichtig, wenn Sie dies tun, und verstehen Sie, dass damit immer noch ein Risiko verbunden ist, auch wenn die offensichtlichen Dinge nicht funktionieren.
Oh, und es würde mich interessieren, ob jemand einen Proof-of-Concept-Angriff hat, der diesen Mechanismus als Grundlage für die Eskalation von Berechtigungen in den Kommentaren verwendet!