in reply to Re^3: How to avoid Null Byte Injection?
in thread How to avoid Null Byte Injection?

Will do that, thank you :-)
But how you mean it stops me? It somehow check my perl script and if it founds it not secure proof it denies the execution of it or displays warnings?
  • Comment on Re^4: How to avoid Null Byte Injection?

Replies are listed 'Best First'.
Re^5: How to avoid Null Byte Injection?
by sgifford (Prior) on Oct 09, 2006 at 15:24 UTC
    While your script is running, it will mark variables that come from outside the program as tainted. If you try to perform an unsafe operation with a tainted variable, the program will be killed instead of executing that operation.

    However, it actually looks like Perl doesn't consider opening a file readonly to be an unsafe operation, which is surprising to me. So it wouldn't have solved your security problem, but it would help with something like this (which opens a file for append):

    #!/usr/bin/perl -T use warnings; use strict; use Scalar::Util qw(tainted); use CGI qw(:standard); BEGIN { if ($ENV{REQUEST_METHOD}) { eval 'use CGI::Carp qw(fatalsToBrowser)'; } } use constant EOL => $ENV{REQUEST_METHOD} ? "<br>\n" : "\n"; if ($ENV{REQUEST_METHOD}) { start_html(); } my $file = param('file') or die "No filename given"; # The next 3 lines will untaint the variable. $file =~ /^(\w+)$/ or die "illegal filename\n"; $file = $1; printf "\$file is%s tainted.".EOL,tainted($file)?"":"n't"; open(F,">> /tmp/$file") or die "Couldn't open file"; print F "Wrote.\n"; close(F); print "OK".EOL; if ($ENV{REQUEST_METHOD}) { end_html(); }

    Update: This version should work from the command-line or CGI.

      Thanks but to me it doesnt run at all!
        Based on some earlier posts, I suspect you were running it as a CGI script, when it was originally designed to be run from the command-line. I've updated it so it should work in either environment.
Re^5: How to avoid Null Byte Injection?
by Anonymous Monk on Oct 09, 2006 at 07:59 UTC
    $ perl -lTe'system;print "RTFM"' Insecure $ENV{PATH} while running with -T switch at -e line 1. $ perl -le'system;print "RTFM"' RTFM
    A reply falls below the community's threshold of quality. You may see it by logging in.