Наткнулся тут на довольно серьезную дырку в безопасности этой CMS, и из-за большой популярности данной системы решил запостить об этом здесь.
Грубо говоря, позволяет менять пароль администратора из-за недостаточной фильтрации входных параметров.
Проверить, уязвим ли ваш сайт можно перейдя по ссылке
имя.сайта/index.php?option=com_user&view=reset&layout=confirm
и набрав в поле token одинарную кавычку.
Уязимый код:
Как видите, нужно добавить экранирование кавычек в $db->Quote($token).
В который раз я убедился в низкой безопасности сайтов Джумлы и ее модов… к сожалению..
Грубо говоря, позволяет менять пароль администратора из-за недостаточной фильтрации входных параметров.
Проверить, уязвим ли ваш сайт можно перейдя по ссылке
имя.сайта/index.php?option=com_user&view=reset&layout=confirm
и набрав в поле token одинарную кавычку.
Уязимый код:
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).
В который раз я убедился в низкой безопасности сайтов Джумлы и ее модов… к сожалению..