Martinus: Sicherheitslücken in af.cgi (alienform oder alienform2)

Liebe Leute,

seit einigen Jahren sind Sicherheitslücken im immer noch oft genutzten Skript alienform bekannt. Eine englische Zusammenfassung und Bugfix von Nick Cleaton findet sich z.B. unter http://lists.jammed.com/bugtraq/2002/06/0077.html.
Für deutsche Nutzer sind die Angaben aber wenig hilfreich, da die wohl am meisten genutzte Version des Skripts ("Deutsche Übersetzung: www.internet-partner.de") die entsprechneden Zeilen gar nicht enthält.
Deshalb hier meine eigene Korrektur für diese Version:

Ab ca. Zeile 194 hinter

sub LogFile {
    my $msg  = shift @_;
    my $file = shift @_;

und hinter

sub ReadFile {
    my $msg  = shift @_;
    my $file = shift @_;

ist jeweils einzusetzen:

$file    =~ s[../] [_]g;
    $file    =~ s/[^\w-./\]+/_/g;

Desweiteren sollte für Logfiles ein anderes Verzeichnis gewählt werden als für den Rest, da sie sonst leicht ausgelesen werden können. Das wird erreicht durch Definition eines zweiten Pfades:

hinter

$base_path      = '../htdocs/formulare/';

ca. in Zeile 23 also ergänzen:

$base_path_logs      = '../htdocs/logs/';

sowie in der Subschleife für logfiles ca. in Zeile 199

$file = $base_path . $file;

ersetzen durch

$file = $base_path_logs . $file;

Schließlich gibt es noch einen schwerwiegenden Fehler, auf den Nick Cleaton nicht hinweist: In Alienform soll festgelegt werden können, welcher Server auf das Skript zugreifen darf. Das funktioniert aber nicht, erforderlich ist diese Änderung unter sub CheckRef ca. in Zeile 106:

statt

if ((@Referers) and ($ENV{'HTTP_REFERER'})) {

muss es heißen:

if (@Referers) {

So. Ich hoffe, es stimmt alles wie hier beschrieben und es mag jemandem nützen.

Gruß Martin