Die nächste Version des Linux-Kernels, 7.2, wird das Flag OPENAT2_REGULAR für den Systemaufruf openat2 enthalten. Diese Funktion ermöglicht es Programmen, sicherzustellen, dass sie nur reguläre Dateien öffnen, und verhindert, dass sie auf spezielle Geräte wie /dev/null oder FIFOs umgeleitet werden, die unerwartetes Blockierungsverhalten und Sicherheitslücken verursachen können.
Wie OPENAT2_REGULAR im Kernel funktioniert 🛡️
Das Flag OPENAT2_REGULAR fungiert als Filter im openat2-Aufruf. Wenn es aktiviert ist, überprüft der Kernel, ob die Zieldatei vom Typ regulär (S_IFREG) ist, bevor er das Öffnen erlaubt. Wenn die Datei ein Blockgerät, ein FIFO oder ein Socket ist, schlägt der Vorgang mit dem Fehler EISDIR oder EPERM fehl. Diese Überprüfung erfolgt nach der Auflösung symbolischer Links und unterbindet Angriffe, die Links verwenden, um auf spezielle Geräte zu verweisen. Die Implementierung wurde von der UAPI-Gruppe angefordert, um Anwendungen zu schützen, die Benutzerdateien verarbeiten.
Schluss mit den Schrecken von /dev/null und den frechen FIFOs 😅
Bisher konnte ein vertrauensvolles Programm eine Datei öffnen und feststellen, dass es sich um ein FIFO handelte, das es für immer auf Daten warten ließ, oder schlimmer noch, um ein /dev/null, das seine gesamte Ausgabe kommentarlos verschluckte. Mit OPENAT2_REGULAR sind diese Schrecken vorbei: Wenn die Datei nicht regulär ist, sagt der Kernel Nein, und der Entwickler spart sich stundenlanges Debuggen. Es ist, als ob man einen Filter am Eingang der Festplatte anbringt, damit nur echte Dateien durchkommen, keine Karnevalsverkleidungen.