Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Insecure dependency bei mit chown & mkdir

  1. #1
    Registrierter Benutzer
    Registriert seit
    21.02.2002
    Ort
    Moosburg
    Beiträge
    13

    Insecure dependency bei mit chown & mkdir

    Hi Leute!

    Ich hab mir eine perl-script geschrieben, das aus übergeben parametern, nämlich uid und homedir, ein verzeichnis anlegen (welches dann wwwrun gehört) soll und mit dem chown befehl den benuzter auf uid setzt.

    das Problem ist, bei der Ausführung erhalte ich einen Software-Error und sowas wie insecure dependency. Ich hab da mal was gelesen, dass solche dateinamen, die ich bei mkdir bzw. chown angebe nicht mit führendem "/" angegeben sein dürfen. Ich mache das aber so. Im Moment hab ich nämlich auch die homedir variable einfach nur mit einem "test" beschrieben, aber es geht trotzdem nicht. Weiß jemand, woran das noch liegen kann?

    edit: Das Script läuft übrigens mit suid-bit - auch das suidperl ist mit suid ausgestattet.
    nochmal edit: Der Fehler bei mkdir tritt nicht auf, wenn ich im Skript stehen hab:

    $homedir = "/mein/verz/neu";
    mkdir($homedir,0755);

    aber wenn ich schreibe:

    $homedir = cgi->param('homedir');
    mkdir($homedir,0755);

    und das skript mit "skript.pl?homedir=/mein/verz/neu" aufrufe, kommt der fehler

    Danke schon jetz!

    P.S. Ich bin auch für Links zum Thema dankbar, da ich mich in Perl/CGI wohl noch etwas mehr einrarbeiten muss
    Geändert von Kernel Fallback (20-04-2002 um 21:30 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    11.08.2001
    Beiträge
    64
    hi!

    ich kenne cgi-modul nicht, aber wandelt das die sonderzeichen automatisch um?
    wenn ich den wert "manuell" aus dem QUERY_STRING raushole wuerde da bei dir naemlich stehen:
    homedir=%2Fmein%2Fverz%2Fneu

    das hiesse, du muesstest erst die codes in ascii-zeichen umwandeln...

    Links zu perl/cgi:
    http://www.pronix.de
    http://www.teamone.de/selfhtml

    MfG ponzellus
    Geändert von ponzellus (21-04-2002 um 11:10 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.02.2002
    Ort
    Moosburg
    Beiträge
    13
    Hallo,

    ich glaub nicht, dass er daran liegt, denn wenn ich einfach nur

    print $cgi->param('homedir');

    dann schreibt er "/mein/verz/neu".

    Trotzdem Danke - auch für die links

  4. #4
    Registrierter Benutzer Avatar von lolli
    Registriert seit
    20.09.2000
    Beiträge
    166
    Das hat sicherheitsrelavante Gründe. Wenn jemand in dein Formular z.B. /etc eingibt, könnte ja möglicherweise das Verzeichnis gelöscht werden. Die Rechte hat das Perl-Skript ja dann auch (SETUID). Ich hatte dazu mal irgendwo Informationen, wie man es dennoch hinbekommt, weiss aber im Moment nicht mehr wo.
    Ich melde mich, wenn ich weitere Infos rausbekommen.

    oliver

    Hast du schon mal eine Lösung mit sudo versucht? Es ist extrem unkompliziert!!

  5. #5
    Registrierter Benutzer
    Registriert seit
    21.02.2002
    Ort
    Moosburg
    Beiträge
    13
    Hi,

    ich dachte mir schon, das es daran liegt, aber es ist so, dass das skript verzeichnisse erzeugen soll, die schon in einer sql-datenbank festgelegt sind. Genauer: mein proftpd macht seine benutzer-authen... über diese sql-datenbank, und in der steht dann auch das homedir, und zwar nach dem muster /irgendein/verz/usera - dasselbe/verz/userb, also ist es dem script nicht möglich, verz. wie /etc zu erstellen/überberschreiben. ich hab auch schon versucht, mit

    chdir(das/verz)

    in das verz zu wechseln und dann mkdir ohne die pfadangabe auszuführen, aber das geht auch nicht.

    Kannst du mir bitte etwas genauer beschreiben, wie das mit sudo aussehen soll? wir dann sudo von dem perl-script aus aufgerufen? Ich muss es halt vom webserver aus machen lassen können

    Danke

  6. #6
    Registrierter Benutzer Avatar von lolli
    Registriert seit
    20.09.2000
    Beiträge
    166
    Hallo Kernel-Fallback,
    wie sieht denn deine Interpreterzeile aus? Ich habe es einmal lokal bei mir versucht und konnte mit dem Skript

    #!/usr/bin/suidperl -U
    print "Content-type: text/plain\n\n";
    print "Hallo\n";
    mkdir("/test/$ENV{'QUERY_STRING}",0755) || print "Fehler: $!";


    ein entsprechendes Verzeichnis anlegen. Schau dir doch mal die Hilfeseiten ( /usr/bin/suidperl --help) an. Es geht aber nur mit der Option -U für "erlaube unsichere Operationen"...
    Also immer schon vorsichtig und alle übergebenen Parameter 1 mal, besser 2malsudo mehr prüfen!!

    oliver

  7. #7
    Registrierter Benutzer
    Registriert seit
    21.02.2002
    Ort
    Moosburg
    Beiträge
    13
    Hi,

    Danke!
    Bei mir war wohl das Problem, dass ich als Befehlsinterpreter

    #! /usr/bin/perl -w

    benutzt hab. Ich versuchs mal mit deinem Vorschlag!

    Das ich suidperl benutzen muss, wusste ich nicht...

    Merci

  8. #8
    Registrierter Benutzer
    Registriert seit
    21.02.2002
    Ort
    Moosburg
    Beiträge
    13

    Funktioniert

    Hallo

    Also es funktioneirt jetzt - danke sehr!

    Grüße - Markus

  9. #9
    Registrierter Benutzer Avatar von lolli
    Registriert seit
    20.09.2000
    Beiträge
    166
    Hi,
    du kannst auch weiterhin !#/usr/bin/perl nehmen. Nur wenn eben das Skript SETUID ist, wird eh' suidperl aufgerufen...

    oliver

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •