Pass secret information through new filedescriptor

24/09/2016 - 17:23 von Martin Vaeth | Report spam
Einige kennen vielleicht das Programm "sux", das
X cookies durch die TERM-variable an einen neu erzeugten
Prozess eines anderen Benutzers übergeben kann.

Diese Methode hat leider den großen Nachteil, dass die
Cookies dann nicht mehr geheim sind, weil sie durch
/proc/*/environment gelesen werden können.

Zur Vermeidung dieses Problems hatte ich ein Skript geschrieben
(für sudox statt su, siehe https://github.com/vaeth/sudox/)
das einen FIFO zur Informationsübergabe benutzt.
Das ist leider auch nicht optimal, weil der FIFO auch von
einem Unbefugten gelesen werden kann: Man kann zwar erkennen,
wenn dies passiert (weil die Information dann weg ist), aber
man erkennt es eben erst, wenn es schon zu spàt ist...

Da sudo Filedeskriptoren offen halten kann, schein mir der
beste Weg zu sein, einen neuen Filedeskriptor - sagen wir &3 -
zur Informationsübergabe zu benutzen.

Meiner Erinnerung nach gab es einmal eine andere Implementation
von "sux" in einer àlteren SuSE-Version, die es so gemacht hat,
aber ich kann diese Version nirgends mehr auftreiben; vielleicht
tàuscht mich auch mein Gedàchtnis.
Hat vielleicht jemand noch diese alte Version?

Die Schwierigkeit ist, dass der Filedeskriptor &3 nicht auf
eine tatsàchliche Datei verweisen soll, sondern auf eine
neu erzeugte Pipe. Ich habe so etwas versucht:

# Testprozess, an den die Daten übergeben werden sollen.
su_proc() {
read a <&3
echo "from &3: $a"
read b
echo "from &1: $b"
}

# piper soll die Daten "c" an den neuen Testprozess schicken:
piper() {
{
echo c 3>&1 >&3 | su_proc 3<&1
} 3<&1
}

Beim Aufruf von "piper" aus der Konsole (und dann Eingabe
einer Zeile auf der Konsole) scheint das dem Gewünschten
sehr nahe zu kommen (bis auf die Tatsache, dass &3 und &1
"verkehrt" herum sind), aber merkwürdigerweise liest ein

echo 1 | piper

ebenfalls von der Konsole, was ich nicht wirklich verstehe.
 

Lesen sie die antworten

#1 Christoph Mehdorn Weber
24/09/2016 - 19:11 | Warnen spam
Hallo!

* Martin Vaeth :

Einige kennen vielleicht das Programm "sux", das
X cookies durch die TERM-variable an einen neu erzeugten
Prozess eines anderen Benutzers übergeben kann.



Bilde mir ein, bei Debian ist es kürzlich rausgeflogen,
vielleicht sogar deswegen.

Als ich neulich den Bedarf hatte, habe ich daher ein wenig
gesucht und habe http://secolive.ch/xsudo/ gefunden. Das hat aber
im Prinzip dasselbe Problem, da zwar nicht der Key in der Umgebung
steht, aber dafür der Pfad dorthin.

Diese Methode hat leider den großen Nachteil, dass die
Cookies dann nicht mehr geheim sind, weil sie durch
/proc/*/environment gelesen werden können.



Andererseits ist es (zumindest auf meinem System so), daß
/proc/*/environment ohnehin nur durch den Ziel-Nutzer beim
sudo gelesen werden kann. Ist also nur problematisch bei
gemeinsam genutzten Role-Accounts.

Zur Vermeidung dieses Problems hatte ich ein Skript geschrieben
(für sudox statt su, siehe https://github.com/vaeth/sudox/)
das einen FIFO zur Informationsübergabe benutzt.
Das ist leider auch nicht optimal, weil der FIFO auch von
einem Unbefugten gelesen werden kann: Man kann zwar erkennen,
wenn dies passiert (weil die Information dann weg ist), aber
man erkennt es eben erst, wenn es schon zu spàt ist...



Wenn man, in Anlehnung an xsudo, nur den Pfad übertràgt, an dem
man den Key abzulegen gedenkt, wàre das ein netter Ansatz. Erkennt
man, daß jemand unbefugt den Pfad abgreift, schreibt man den Key
eben nicht in die Datei.

Christoph

"Wie alt bist du?"
"Weiss ich nicht, ist jedes Jahr verschieden."

Ähnliche fragen