Mailinglist Archive: opensuse-de (7975 mails)

< Previous Next >
Re: setuid root von cgi-scripten unter Apache wirkungslos
  • From: David Haller <david@xxxxxxxxxx>
  • Date: Tue, 9 Apr 2002 00:31:32 +0200
  • Message-id: <20020408223132.GA10662@xxxxxxxxxxxxxxxxxx>
Hallo,

On Mon, 08 Apr 2002, Ratti wrote:
Ratti:
Es ist technisch gesehen einfach unnötig, $PATH zu setzen, wenn ich
`/usr/bin/whoami` aufrufe. Der Pfad wird dafür überhaupt nicht benötigt.

David Haller:
Du weisst, dass das Environment in CGIs vom User, der das cgi aufruft
geaendert werden kann?

Der User "draußen" am Browser?

Jep.

Du weisst, dass dein CGI dann unsicher und fuer (root-(!)) exploits
anfaellig ist?

Magst du das mal grob beschreiben, wie sowas ablaufen soll?
Wie könnte der Surfer das tun?

In dem er das GET/POST manipuliert. Ist der gleiche Mechanismus wie
bei Nimda, nur wird da eben nicht ein Buffer-Overflow ausgenuetzt,
sondern es wird eben das Environment, das das cgi zu sehen bekommt
manipuliert. Ich zitiere:

==== man 1 perlsec ====
You may not use data derived from outside your program to
affect something else outside your program--at least, not
by accident. All command line arguments, environment
variables, [..], and all file input are marked as
"tainted". Tainted data may not be used directly or indi­
rectly in any command that invokes a sub-shell, nor in any
command that modifies files, directories, or processes.
====

Der Grund ist eben, dass das Environment (und die anderen angesprochenen
Quellen fuer Daten) eben (boshaft) manipuliert werden koennen.

Aber wenn man bei dir irgendwie Dateien raufladen kann, dann reicht
ein script/binary in .../incoming und eine "kleine, unauffaellige
Aenderung des PATH auf PATH=".../incoming:$PATH" und du hast Aerger
am Hals, und wenn das cgi dann noch root-Rechte hat *brr*.

Nein, ich kann dir kein besseres Beispiel geben, da ich mit sowas
nicht beschaeftige, glaub's den Programmieren von Perl einfach, dass
der Taint Modus (und -w und strict!) sinnvoll und bei cgis eigentlich
unverzichtbar sind.

Ach ja:

==== man 1 perl ====
BUGS
The -w switch is not mandatory.
====

Wegen mir kannst du strict und -T weglassen... Du kannst machen was
du willst... Aber sei gewarnt.

Ich jammer dann. ;-)

Und ich lache dann haemisch. ;-)

Nein, im Ernst: Ich wüsste gerne, wo da wirklich ein Loch ist. Ich sehe
da einfach keins.

Tja. Es ist aber vorhanden (s.o.). Wie war das noch gleich?
"Better safe, than sorry"... ;)

-dnh

--
Human beings were created by water to transport it uphill.
-- BSD fortune file

< Previous Next >