nicht privilegierter normaler Benutzer übergibt Umgebungsvariablen an /bin/login

nicht privilegierter normaler Benutzer übergibt Umgebungsvariablen an /bin/login

Angenommen, in FreeBSD (oder vielleicht Linux) gibt es einen normalen Benutzer ohne Privilegien (kein Superuser). Und es gibt ein eigenständiges Telnet (ich weiß, dass Telnet normalerweise unter inetd ausgeführt wird), das unter diesem Benutzer ausgeführt wird (und ihm gehört). (Angenommen, es gab kein ursprüngliches, root-eigenes Telnet.) Dieser Telnet-Server ist so programmiert, dass er die ld_*-Umgebungsvariablen nicht überprüft, bevor er sie an /bin/login weitergibt, das root gehört und über ein eingerichtetes setuid verfügt.

Die Frage wäre: 1. Funktioniert dieses Telnet? 2. Wenn ja, können überhaupt Umgebungsvariablen an /bin/login übergeben werden?

Antwort1

Angenommen, es gibt in FreeBSD (oder vielleicht Linux) einen Superuser ohne Privilegien.

„Nicht privilegierter Superuser“ ist ein Widerspruch in sich; das Wort „Superuser“ selbst bezeichnet einen Benutzer mit allen Privilegien.

Dieser Telnet-Server ist so programmiert, dass er die ld_*-Umgebungsvariablen nicht überprüft.

Ich bin nicht sicher, ob das relevant ist. Der Telnet-Server hat keine besonderen Berechtigungen, daher LD_*ist das Entfernen von Variablen nicht sehr nützlich ...

  1. Wird dieses Telnet funktionieren? 2. Wenn es funktioniert, können dann überhaupt Umgebungsvariablen an /bin/login übergeben werden?

Es wird teilweise funktionieren, aber aufgrund fehlender Berechtigung CAP_NET_BIND_SERVICE ist wahrscheinlich keine Bindung an den Standard-Telnet-Port möglich.

Ja, es kann Umgebungsvariablen an übergeben login, genau wie jeder andere Prozess. Allerdings verwirft der Loader (ld-linux.so) zumindest unter Linux alle LD_*Variablen, bevor ein Setuid-Programm ausgeführt wird, sodass ein Setuid- logindavon nicht betroffen wäre.

verwandte Informationen