Компьютер для продвинутых пользоватлей Выпус по безопасности. Ошибка в 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) {
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() можно вставить
любой код. Хотя эта библиотека не так распространена, но она встречается
во многих проектах.