Warum darf man keine Umgebungsvariablen mitbringen?
Hallo zusammen!
Auf der Website mit der Installationsanleitung von gitolite steht:
IMPORTANT: although a default openssh config will not do this (AFAIK), do not allow the user to set environment variables if you care about security at all.
Das ist so drastisch formuliert, dass ich mir etwas unbelehrt vorkomme, wenn ich jetzt hier die Frage stelle: Warum wäre es ein Sicherheitsrisiko, wenn Leute, die sich per SSH anmelden, ihre eigenen Umgebungsvariablen mitbringen dürfen?
2 Antworten
Ganz einfach::
Umgebungsvariablen werden von vielen Dingen genutzt. Wenn wir jetzt mal annehmen, daß die beteiligten Programme keinen Fehler bei der eigentlichen Auswertung machen, so steuern Umgebundsvariablen das Verhalten vieler Prozesse. D.h. es besteht grundsätzlich die Möglichkeit Verhalten zu steuern, oder eben auch zu manipulieren.
Im Kern ja.
Machen wir es mal (halbwegs) einfach und treffen folgende Annahmen:
gitolite kann konfiguriert werden im Zuge bestimmter Aktionen Shellskripte auszuführen.
Du schreibst ein Shellskript, das neben gitolite-Informationen auch auf andere Umgebungsvariablen zurückgreift und nimmst an, daß die Angaben vertrauenswürdig sind.
gitolite wiederum vergißt beim Ausführen des Shellskriptes die Umgebung zu prüfen und korrekt zu bereinigen.
-----
Nun setzt der User, obwohl er diese Skript nicht direkt ausführen kann/darf entsprechend die Umgebungsvariablen durch ssh(d) und kann so die Ausführung des Skriptes beeinflussen, ohne daß es im Skript berücksichtigt wurde.
Und jetzt stellen wir uns mal vor, das Skript hat weitreichendere Rechte, die der Nutzer eigentlich nie haben sollte.
Übrigens, auch das Verhalten des dynamischen Linkers kann durch die Umgebugn gesteuert werden.
Dankeschön, jetzt verstehe ich es auch, denke ich. :-)
Japp. Beachte vor allem das Zusammenspiel, BAckdoor in liblzma entfaltet Wirkung in sshd und ich meien mich zu entsinnen, daß einige Analysen davon sprachen, daß die Backdoor auch Umgebungsvariablen auswertet.
Okay, ich kannte die XZ-Geschichte (bzw, seien wir ehrlich, ich konnte mich vage dran erinnern), aber dass da mit Umgebungsvariablen hantiert wurde, war mir nicht bekannt. Dankeschön! :-)
Weil man Umgebungsvariablen auslesen kann. Man kann sich auch alle Variablen ausgeben.
Ich weiß. Aber wieso ist das ein Sicherheitsproblem?
Wenn ein Angreifer auf deinem System ist kann er alle Passwörter abreifen die als Umgebungsvariablen definiert sind. Oder andere Konfigs abgreifen
Tut mir Leid, ich verstehe es nicht.
- Ich habe ein System, auf dem sich Leute per SSH einloggen können.
- Ich erlaube, dass SSH-User Umgebungsvariablen setzen können.
Wieso ergibt sich daraus, dass einer von diesen Usern "alle Passwörter abgreifen [kann], die als Umgebungsvariable definiert sind"? Umgebungsvariablen kann man doch anschauen, ganz egal ob man sie auch setzen darf oder nicht.
Und das Problem mit "andere Konfigs abgreifen" verstehe ich ehrlich gesagt auch nicht.
Also du meinst, einer meiner User setzt eine Umgebungsvariable, die von Dingen, die nicht ihn betreffen, genutzt wird, und greift dadurch in Prozesse ein, in die er nicht eingreifen darf?