opi: Taint: insecure ...

Guten Nabend Leutz,

kenn Ihr das... viereckige Augen und am Rande der Verzweiflung?
Ich komm einfach nicht weiter.

Vielen wird mein Problem bestimmt schon bekann sein, deshalb schildere ich meine Sache kurz.

  
#!/usr/bin/perl -wT  
  
use strict;  
  
my $cmd = "@ARGV";  
  
system "$cmd";  

Wie bekomme ich nun $cmd sicher? Ich möchte ungern auf taint verzichten. Mein dickes Perlbüchlein spuckt zwar eine - inoffizielle - Lösung aus, von der aber abgeraten wird. Hat da jemand eine Idee die er mit mir teilen mag?

Gutes Nächtle.

Bis dann,
opi

--
Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|
  1. Hallo,

    #!/usr/bin/perl -wT

    use strict;

    my $cmd = "@ARGV";

    system "$cmd";

    
    >   
    > Wie bekomme ich nun $cmd sicher? Ich möchte ungern auf taint verzichten. Mein dickes Perlbüchlein spuckt zwar eine - inoffizielle - Lösung aus, von der aber abgeraten wird. Hat da jemand eine Idee die er mit mir teilen mag?  
      
      was soll das werden?  
      hast du mal im internet gesucht und gelesen wir man mit taint arbeitet?  
      - nimm eine tainted variable  
      - untainte sie, indem du z.b. einen regulären ausdrück mit () und $1 usw darauf anwendest.  
      
      "$variable" oder "@array" ist nicht gut (freundlich gesagt).  
      verwende "asdf".$var."asdf" oder "asdf".join ("",@array)."asdf"  
      
    gruss
    
    -- 
    no strict;  
    no warnings;  
      
    Ich weiss es nicht, aber ich bin mir nicht sicher.  
    Craptastic.  
    Wenn ich groß bin, werde ich eine nervige künstliche Intelligenz.
    
    1. Hallo,

      Wie bekomme ich nun $cmd sicher? Ich möchte ungern auf taint verzichten. Mein dickes Perlbüchlein spuckt zwar eine - inoffizielle - Lösung aus, von der aber abgeraten wird. Hat da jemand eine Idee die er mit mir teilen mag?

      was soll das werden?

      Nur ein Beispiel. Wenn du den genauen Hintergrund wissen möchtest, spende ich dir gerne ein paar Zeilen.

      hast du mal im internet gesucht und gelesen wir man mit taint arbeitet?

      Um ehrlich zu sein versuche ich immer so sicher wie nur möglich zu schreiben und wenn der liebe Taint-Modus dann trotzallem noch etwas zu meckern hat, dann versuche ich die Sache zu lösen. So richtig habe ich mich aber mit taint noch nicht beschäftigt, werde dies aber noch machen... eine Lösung brauchte ich kurzfristig, deshalb der Thread.

      - nimm eine tainted variable
        - untainte sie, indem du z.b. einen regulären ausdrück mit () und $1 usw darauf anwendest.

      "$variable" oder "@array" ist nicht gut (freundlich gesagt).
        verwende "asdf".$var."asdf" oder "asdf".join ("",@array)."asdf"

      Hmm, sobald ich an meinem Proggi sitze, versuche ich es mal. Danke schonmal.

      Greez,
      opi

      --
      Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|
  2. Tag opi.

    my $cmd = "@ARGV";
    system "$cmd";
    Wie bekomme ich nun $cmd sicher?

    Indem du es irgendeiner Gültigkeitsprüfung unterziehst, wie Eternius schon schrieb.

    Mein dickes Perlbüchlein spuckt zwar eine - inoffizielle - Lösung aus, von der aber abgeraten wird.

    Lies perlsec, da steht alles drin, was du wissen musst. Vielleicht hilft dir das Studium dieses Archivthreads auch ein Stückchen weiter.

    Siechfred

    --
    Früh übt sich ... (74kB)
    Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
    1. Hallo,

      Lies perlsec

      na dieser Link ist voll genial. Hab mir die Offline-Version runtergeladen und direkt auf meinen Entwickler PC geladen! Kennst du noch mehr solcher Seiten, die man downloaden kann?

      Greez,
      opi

      --
      Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|
      1. Tag opi.

        na dieser Link ist voll genial. Hab mir die Offline-Version runtergeladen und direkt auf meinen Entwickler PC geladen! Kennst du noch mehr solcher Seiten, die man downloaden kann?

        Hast du Perl lokal installiert? Dann befindet sich die komplette Doku bereits auf deinem PC (einschließlich perlsec). Ansonsten ist der gepostete Link Teil der Online-Dokumentation. Da solltest du ruhig ein bisschen stöbern.

        Siechfred

        --
        Früh übt sich ... (74kB)
        Der schwierigste Blick ist immer der über den Tellerrand -- man glaubt gar nicht, wie hoch so ein Tellerrand sein kann.
        1. Hallo,

          Hast du Perl lokal installiert? Dann befindet sich die komplette Doku bereits auf deinem PC (einschließlich perlsec).

          oh, dass wußte ich noch garnicht.

          Ansonsten ist der gepostete Link Teil der Online-Dokumentation. Da solltest du ruhig ein bisschen stöbern.

          Hab ich schon getan und bemerkt, dass mein Perlbüchlein (Programmieren mit Perl von Oreily) genau die gleichen Beispiele vorstellt. Leider sind in dem Buch keine genaueren Beispiele, wie man Skalare untainten kann, aber ich habe es jetzt mit deinem "Tipp" geschafft (regexp und $1), dazu habe ich noch ein paar weitere Sicherheiten reingepresst. Schaut ulkig aus, aber so schaut Perl wohl immer aus ;-)

          Greez,
          opi

          --
          Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|
    2. morgen,

      my $cmd = "@ARGV";

      würde
      $ENV{"PATH"} = "";

      system "$cmd";

      das taint problem nicht grundsätzlich so gelöst?
      Gruss
      Alain

      1. Guten Morgen Alain,

        morgen,

        my $cmd = "@ARGV";

        würde
        $ENV{"PATH"} = "";

        system "$cmd";

        das taint problem nicht grundsätzlich so gelöst?

        Nicht ganz. Zunächst einmal müsste der Pfad mit einfachen Anführungszeichen gesetzt werden. Etwa so:

        $ENV{PATH} = '';

        Dies nützt dir aber nur etwas, wenn der Aufruf nicht von ausherhalb kommt. Beispiel:

        my $cmd = "ps -ef";
        system "$cmd";

        Wenn das Kommando allerdings von Ausserhalb eingelesen wird, wie zum Beispiel:

        my $cmd = "@ARGV";
        system "$cmd";

        dann bleibt $cmd tainted.

        Eine einfache Möglichkeit, dies zu untainten, hat, so glaube ich, Siechfred schon erklärt.

        if ( /^([-@\w.]+)$/ ) {
           $cmd = $1;
        }
        else {
           die "Argument ist tainted!\n";
        }

        system "$cmd";

        jetzt funktioniert es.

        Ich hoffe, dass ich es so gut erklärt habe, wie ich es auch selber verstanden habe.

        Bis dann.

        Greez,
        opi

        --
        Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|