Apache-Config, PHP als FastCGI - falsche Dateiendungen werden als PHP-Script ausgeführt

Apache, Lighttpd, nginx, Cherokee
skolem
Posts: 6
Joined: 2006-02-16 10:41

Apache-Config, PHP als FastCGI - falsche Dateiendungen werden als PHP-Script ausgeführt

Post by skolem » 2007-04-17 09:46

Hallo!

Ich habe einige Server nach dem Tutorial "Debian Sarge, Apache2, Suexec2, mod_fastcgi, php5-fcgi HowTo" eingerichtet. Das Ganze hat super geklappt, läuft seit über einem Jahr ohne Probs und brachte auch Performance-Vorteile.

Gestern stellte ich jedoch fest, dass mit dieser Konfiguration PHP-Skripte mit falschen Dateiendungen ausgeführt werden können. So wird jede Datei, die im entsprechenden Verzeichnis liegt und nach dem Schema datei.php.IRGENDWAS benannt ist, als PHP-Skript ausgeführt.

Im entsprechenden Fall könnte ein Angreifer in einer Applikation, die zum Beispiel Bilderuploads unzureichend prüft, eine evil.php.jpg hochladen und den Server kompromitieren, je nachdem mit welchen Rechten die PHP-Datei abgespeichert wird.

Wie kann man einstellen, dass nur *.php Dateien auch als PHP-Skripte interpretiert werden?

fastcgi.conf: Dachte eigentlich AddHandler und AddType sorgen dafür

Code: Select all

FastCgiWrapper /usr/lib/apache2/suexec2
FastCgiServer /var/www/php-fcgi-scripts/default/php-fcgi-starter -user USER -group GROUP

AddHandler php-fastcgi .php

<Location /cgi-bin/php-fcgi-starter>
        SetHandler fastcgi-script
        Options +ExecCGI
</Location>

Action php-fastcgi /cgi-bin/php-fcgi-starter

AddType application/x-httpd-php .php
site-conf:

Code: Select all

...
ScriptAlias /cgi-bin/ /var/www/php-fcgi-scripts/default/
        <Directory "/var/www/php-fcgi-scripts/default">
                AllowOverride None
                Options +ExecCGI -MultiViews -Indexes
                Order allow,deny
                Allow from all
        </Directory>
...

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Apache-Config, PHP als FastCGI - falsche Dateiendungen werden als PHP-Script ausgeführt

Post by Roger Wilco » 2007-04-17 17:25

Das Verhalten von Apache ist bekannt und auch dokumentiert.

Wenn du die Dateien, die geparsed werden dürfen, einschränken willst, hast du u. a. folgende Möglichkeiten:

1a. PHP-Skripte werden nur in bestimmten Verzeichnissen geparsed. Das lässt sich mit Directory- oder Location-Blöcken sowie der SetHandler-Direktive bewerkstelligen.

1b. Du lässt PHP-Dateien in Verzeichnissen für statische Dateien erst gar nicht parsen, siehe RemoveHandler.

2. Du benutzt FilesMatch, um die Dateierweiterungen explizit festzulegen.

Code: Select all

RemoveHandler .php
<FilesMatch ".php$">
  SetHandler fastcgi-script
</FilesMatch>