Robert Bienert: Remote File Include Vulnerability

Beitrag lesen

Moin!

http://www.securityfocus.com/archive/1/484045

Oho, so prominent ist das Problem also.

Und woher bekommst du $language_file? Da solltest du ansetzen.

in einem include der (fast) überall eingebunden wird:

// Are we using the default language or user's choice?
function setupLanguage() {
global $config, $user_lang, $tb_language;

$path = $_SERVER['DOCUMENT_ROOT'] . $config['talkback_path'] . 'language/';

if ($_REQUEST['language'] && $_REQUEST['language'] != $config['default_language']) {
  // visitor has selected a language
  $language_file          = $path . $_REQUEST['language'] . '.php';

  
Genau hier ^^^ ist z.B. ein Punkt, an dem man ansetzen muss: Die Variable language kommt von außerhalb und wird ohne zu filtern in einen Pfad eingebaut! Was gibt language denn an? Dir hilft bestimmt einer Funktionen [basename](http://de.php.net/manual/de/function.basename.php) oder [dirname](http://de.php.net/manual/de/function.dirname.php) weiter.  
  

> ~~~php

  $user_lang              = $_REQUEST['language'];  

>  } elseif ($tb_language) {  
>   // it was set in the page that invoked comments.php  
>   $language_file          = $path . $tb_language . '.php';  
>   $_REQUEST['language']   = $tb_language;  
>   $user_lang              = $tb_language;  
>  } else {  
>   // use the default language  
>   $language_file          = $path . $config['default_language'] . '.php';  
>   $_REQUEST['language']   = '';  
>   $user_lang              = $config['default_language'];  
>  }  
>  return $language_file;  
> }

Es ist witzlos, wenn du zwei konkrete Dateien auf Existenz prüfst, und dann doch wieder eine beliebige andere includierst.

*schäm* stimmt, ich habs geändert:
include ("language/english.php");

Beide? Dann kann man keine Sprache mehr selektieren? Aber wie gesagt, das obere sieht mir kritischer aus.

original:
include $config['comments_form_tpl'];

Das könnte relativ "sicher" sein, wenn du $config[] selbst mit erlaubten Werten initialisierst.

ist per config.php mit werten initalisiert, aber trotzdem wurde das als sicherheitslücke moniert.

Wurde auch gesagt, wie dort Werte überschrieben werden könnten?

Viele Grüße,
Robert