[PHP-users 27344] Re: PHP4.4.0以下、PHP5.0.5以下に「重大」な脆弱性

Seiji Masugata s.masugata @ digicom.dnp.co.jp
2005年 11月 2日 (水) 20:36:39 JST


こんんちわ、桝形です。

> 逆に言うとグローバル変数に一切依存しないスクリプトのみで運用しているサーバは
> 今回の脆弱性の影響は受けないという事になるんですかね。

そうなのかなぁ。。。と思います。

以下のスクリプトで実験してみました(register_globals=off)。
長いので、ごめんなさい。

globals.html:
--------------------------------------------------------------
<html>
<body>
<form enctype="multipart/form-data" action="globals.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    Send this file: <input name="GLOBALS" type="file" />
    <input type="submit" value="Send File" />
</form>
</body>
</html>
--------------------------------------------------------------

globals.php:
--------------------------------------------------------------
<pre>
<?php
function hoge( )
{
 global $name;
 global $type;
 global $tmp_name;
 global $error;
 global $size;

 echo $name."\n";
 echo $type."\n";
 echo $tmp_name."\n";
 echo $error."\n";
 echo $size."\n"; // ココと
}

echo "-------------------------------------------------\n";
echo PHP_VERSION."\n";
$name = 1;
$type = 1;
$tmp_name = 1;
$error = 1;
$size = 1;

echo $name."\n";
echo $type."\n";
echo $tmp_name."\n";
echo $error."\n";
echo $size."\n"; // ココと

echo "-------------------------------------------------\n";
echo "!!!!!!!!!".$GLOBALS["size"]."\n"; // ココと
$GLOBALS["size"] = "wahaha";
echo "!!!!!!!!!".$GLOBALS["size"]."\n"; // ココと
print_r( $GLOBALS );


import_request_variables( "GPC" );

echo "-------------------------------------------------\n";
echo "!!!!!!!!!".$GLOBALS["size"]."\n"; // ココと
print_r( $GLOBALS ); // ココを抜粋
echo "-------------------------------------------------\n";
hoge( );
echo "-------------------------------------------------\n";

?>
</pre>
--------------------------------------------------------------

結果:
--------------------------------------------------------------
1
!!!!!!!!!1
!!!!!!!!!wahaha
!!!!!!!!!1578
Array
(
    [name] => hoge.txt
    [type] => text/plain
    [tmp_name] => /tmp/phpCs5rZT
    [error] => 0
    [size] => 1578
)
wahaha
--------------------------------------------------------------

確認:PHP4.3.3〜PHP4.3.11

確かに$GLOBALS配列ががすり替わっているのは確認できたのですが
グローバル宣言している変数は書き換わっていないようでした。

どうやって値を保持しているのか気になるトコロではありますが。


この結果を見る限り、(register_globals=offを前提で)プログラム
中で$GLOBALS配列を使っていない限り、影響は受けないのかなぁ。。。
という気も。間違っていたら、是非とも指摘して頂きたく。:)

-- 
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>



PHP-users メーリングリストの案内