Я наткнулся на довольно серьезную дыру в безопасности этой CMS и в связи с большой популярностью этой системы решил написать о ней здесь.
Грубо говоря, позволяет сменить пароль администратора из-за недостаточной фильтрации входных параметров.
Вы можете проверить, уязвим ли ваш сайт, перейдя по ссылке имя_сайта/index.phpЭoption=com_user&view=reset&layout=confirm и введите одинарную кавычку в поле токена.
Уязвимый код: File : /components/com_user/controller.php
#####################################################################################
Line : 379-399
function confirmreset()
{
// Check for request forgeries
JRequest::checkToken() or die( 'Invalid Token' );
// Get the input
$token = JRequest::getVar('token', null, 'post', 'alnum');
// Get the model
$model = &$this->getModel('Reset');
// Verify the token
if ($model->confirmReset($token) === false)
{
$message = JText::sprintf('PASSWORD_RESET_CONFIRMATION_FAILED', $model->getError());
$this->setRedirect('index.phpЭoption=com_user&view=reset&layout=confirm', $message);
return false;
}
$this->setRedirect('index.phpЭoption=com_user&view=reset&layout=complete');
}
#####################################################################################
File : /components/com_user/models/reset.php
Line: 111-130
function confirmReset($token)
{
global $mainframe;
$db = &JFactory::getDBO();
$db->setQuery('SELECT id FROM #__users WHERE block = 0 AND activation = '.
$db->Quote($token));
// Verify the token
if (!($id = $db->loadResult()))
{
$this->setError(JText::_('INVALID_TOKEN'));
return false;
}
// Push the token and user id into the session
$mainframe->setUserState($this->_namespace.'token', $token);
$mainframe->setUserState($this->_namespace.'id', $id);
return true;
}
#####################################################################################
Как видите, вам нужно добавить экранирование кавычек в $db-> Quote($token).
В очередной раз убедился в низкой безопасности сайтов Joomla и ее модов.
к сожалению.
Теги: #уязвимость Joomla #Чулан