Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Компьютер для продвинутых пользоватлей Выпус по безопасности. Ошибка в phpRPC.


Компьютер для продвинутых пользователей
Содержание:
phpRPC
ПО: phpRPC
Версия: <= 0.7

О софте:
phpRPC средства облегчающее работу с xmlrpc библиотеками. phpRPC является очень простым для использования базой данных/абстрактного протокола-rpc. Приложение может быть запушено на любом php сервере с некоторым количество баз данных. К сожалению, в приложении очень легко провести атаку с применением php кода, что позволит атакующем выполнить произвольный код на сервере. Эта узявимсоть возможна из-за недостаточной проверки данных идущих к вызову eval. В конечном счете, это дает доступ над всеми данными, которые хранятся на сервере.
Уязвимость:
Это очень серьезная уязвимость, потому как выполнить произвольный код в библиотеку phpRPC очень легко. Уязвимость находится в файле rpc_decoder.php в функции decode(). Эта функция основная по расшифровки поступающей XML информации в php читаемые данные, для дальнейшего использования в приложении.
/**
* Tells the decoder to process the xml data
*
* Used internaly but can also be used to send xml data to the decoder
* @param string $data Transforms $data into a php readable array
* @return array Returns an array containing the extracted data
*/
function decode($data) {

$this->parser = xml_parser_create($this->encoding);

xml_set_object($this->parser, &$this);
xml_set_element_handler($this->parser, "tag_open", "tag_close");
xml_set_character_data_handler($this->parser, "cdata");
xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1);
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 1);
xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, $this->encoding);
xml_parse($this->parser, $data);
xml_parser_free($this->parser);

if ($this->debug == 1) { $this->dump(); }
eval($this->code);
return $params;
}

Переменная $this->code в нашем случае создается функцией cdata(), и никогда не санируется, когда помещается в пределы тега base 64. Предполагалось что данные зашифрованы и таким образом защищены, но запрос base64_decode не выполняется пока evil не проанализирует данные в пределах "$this->code".


test.method



Приведенный выше XML запрос отправляется на phpRPC сервер успешно выполняет функцию phpinfo(). При этом вместо phpinfo() можно вставить любой код. Хотя эта библиотека не так распространена, но она встречается во многих проектах.
phpRPC
Рассылка создана и ведется при поддержке Информационной сети Пермского края.
Меня можно найти: ICQ - 273214003

В избранное