allow_url_fopen

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Post Reply
hixi
Posts: 153
Joined: Wed Jun 08, 2011 7:02 pm

allow_url_fopen

Post by hixi » Wed May 14, 2014 8:46 pm

Hallo

Eben hat uns ein Kollege mitgeteilt, dass allow_url_fopen on sehr gefährlich ist. Unser Provider schreibt dazu:

"Die PHP-Konfigurations-Option "allow_url_fopen" ist bei uns aus Sicherheitsgründen deaktiviert. Ist sie aktiviert und der PHP-Code nicht einwandfrei programmiert, kann es einem Hacker unter Umständen gelingen, die Webseite und die Dateien auf diesem System zu manipulieren. Er könnte auch beliebige Befehle unter Ihrem Benutzer ausführen."

Bei CMSimple 4... muss die Funktion für den Update-Check aktiviert sein.

Was sagt ihr dazu?

Danke für eure Feedbacks!

Grüsse aus der Schweiz

Beat + Susanne

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: allow_url_fopen

Post by cmb » Wed May 14, 2014 9:34 pm

Hallo Beat und Susanne,

allow_url_fopen ist tatsächlich nicht ohne, weshalb es auch per PHP-Einstellung deaktiviert werden kann. Ist es aktiviert, dann kann man mit normalen PHP-Dateioperationen nicht nur auf Dateien auf dem Server zugreifen, sondern auch auf beliebige Resourcen im Web, die per URL erreichbar sind. Das tut auch der Update-Check von CMSimple 4, der die Update-Info-Datei auf dem Server des Core- bzw. Pluginentwicklers liest wie eine Datei (file_get_contents()). Die mögliche Gefahr, die euer Provider erwähnt besteht nun darin, dass durch unsichere Programmierung es einem Angreifer möglich sein könnte, ein PHP-Script so zu manipulieren, dass es nicht die gewünschte Resource, sondern eine Resource, die der Angreifer kontrolliert, liest. Das wiederum bedeutet zunächst noch keine Gefahr -- es kommt darauf an, was das PHP-Script mit dieser Datei macht. Gibt es sie (oder Teile davon) unmaskiert als HTML aus, dann wird eine XSS-Attacke möglich; schickt es sie (oder Teile davon) durch den PHP-Evaluator, dann wird eine Arbitrary Code Execution Attacke (Ausführung von beliebigem PHP-Code) möglich, um nur einmal zwei Beispiele zu nennen.

Im Falle von CMSimple 4 besteht definitiv keine Gefahr was die Versionsprüfung des Cores betrifft, da die URL hart im Script kodiert ist. Auch bezüglich der Plugin-Versionsprüfung dürfte keine Gefahr bestehen.

Aber richtig: die Notwendigkeit allow_url_fopen aktivieren zu müssen, könnte an anderen Stellen (z.B. Plugins) eben doch Risiken bergen. Die Versionsprüfung bei CMSimple_XH verwendet einen direkten Socketzugriff, damit eben allow_url_fopen nicht aktiv sein muss (ist es wohl auf vielen Servern, aber eben nicht auf allen). Das ist zwar etwas aufwendiger, aber wirklich wild ist es nicht; die gleiche Technik verwendet z.B. auch der Link-Checker.

Viel gefährlicher ist übrigens die verwandte Einstellung allow_url_include, womit es möglich ist Resourcen im Web als Programmcode zu inkludieren. Die gehört m.E. abgeschafft, und sollte zumindest immer deaktiviert sein. Der Exploit für die kürzlich bekannt gewordene Vulnerability in einigen Plugins, macht sich eben allow_url_include=On zunutze, um fremden Schadcode einer fremden Domain einzuschleusen; ist allow_url_include deaktiviert, dann bleibt "lediglich" eine local file inclusion vulnerability (immer noch schlimm, aber weitaus weniger).

Christoph
Christoph M. Becker – Plugins for CMSimple_XH

Gert
Posts: 3078
Joined: Fri May 30, 2008 4:53 pm
Location: Berlin
Contact:

Re: allow_url_fopen

Post by Gert » Wed May 14, 2014 9:45 pm

Hallo,

wenn sich Euer Provider absolut weigert, allow_url_fopen zuzulassen, könntet Ihr ja mal folgendes für mich testen:

in adm.php suchen (müsste ca. Zeile 142 sein):

Code: Select all

$cmsimple_current_version = explode(',', @file_get_contents(CMSIMPLE_VERSIONSINFO));
und ersetzen durch:

Code: Select all

            if (function_exists('curl_version'))
            {
                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, CMSIMPLE_VERSIONSINFO);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                $cmsimple_current_version = explode(',', curl_exec($curl));
                curl_close($curl);
            }
            else if (file_get_contents(__FILE__) && ini_get('allow_url_fopen'))
            {
                $cmsimple_current_version = explode(',', file_get_contents(CMSIMPLE_VERSIONSINFO));
            }
in adm.php suchen (ein paar Zeilen weiter unten):

Code: Select all

$cmsimple_pluginversion_provider = explode(',', @file_get_contents($cmsimple_pluginversion_user[6]));
und ersetzen durch:

Code: Select all

                if (function_exists('curl_version'))
                {
                    $curl = curl_init();
                    curl_setopt($curl, CURLOPT_URL, $cmsimple_pluginversion_user[6]);
                    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                    $cmsimple_pluginversion_provider = explode(',', curl_exec($curl));
                    curl_close($curl);
                }
                else if (file_get_contents(__FILE__) && ini_get('allow_url_fopen'))
                {
                    $cmsimple_current_version = explode(',', file_get_contents($cmsimple_pluginversion_user[6]));
                }
Jetzt wird cURL ausgeführt, wenn verfügbar, und allow_url_fopen ist nur noch Fallback.

Bei mir funktioniert es, und wenn es bei Euch auch klappt, kommt das so in die nächste Version, dann aber noch mit einer Meldung, falls weder cURL zur Verfügung steht noch allow_url_fopen erlaubt ist,

Gert
Gert Ebersbach | CMSimple | Templates - Plugins - Services

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: allow_url_fopen

Post by cmb » Wed May 14, 2014 11:20 pm

Gert wrote:

Code: Select all

else if (file_get_contents(__FILE__) && ini_get('allow_url_fopen'))
Die Prüfung auf ini_get(...) verstehe ich, aber wozu dient die Prüfung auf file_get_contents(__FILE__)?
Christoph M. Becker – Plugins for CMSimple_XH

hixi
Posts: 153
Joined: Wed Jun 08, 2011 7:02 pm

Re: allow_url_fopen

Post by hixi » Thu May 15, 2014 4:17 am

Guten Morgen Christoph + Gert

Vielen Dank für eure Tipps. Wir werden das heute Abend gerne mal testen.

Beat + Susanne

hixi
Posts: 153
Joined: Wed Jun 08, 2011 7:02 pm

Re: allow_url_fopen

Post by hixi » Thu May 15, 2014 4:17 pm

Hallo

Wir haben die adm.php Einstellungen angepasst. Es hat funktioniert. :D

Vielen Dank und beste Grüsse

Beat + Susanne

Post Reply