Уязвимость configuration.php Joomla к взлому изнутри

Файл, в котором хранятся основные настройки CMS Joomla 3 может быть прочитан любым способом из любого места сервера, на котором расположен сайт на этой популярной CMS-ке. Всё дело в том, что права на чтение configuration.php прописаны как 0644 или 0444 в зависимости от того, каким способом этот конфиг сохраняется на сервере. Последняя 4 в обозначении прав означает то, что любой скрипт, запущенный на сервере, в любом месте может прочитать этот файл!



А в конфиге хранятся в открытом виде имя базы данных, пользователь базы данных и его пароль к доступу в БД. Это прямой путь к тому, чтобы считав эти данные, залезть в БД сайта и прописать себе права администратора сайта. После того, как получены права админа, можно спокойно зайти в админку сайта и через Менеджер шаблона сайта написать любой скрипт, который будет запускаться уже с правами пользователя той директории, в которой расположены скрипты сайта.

Это может быть скрипт рассылки спама или скрипт размещения рекламы. И это всё цветочки в равнении с тем, что злоумышленник может просто удалить весь сайт и поставить редирект на тот ресурс, который посчитает нужным. И кому от этого станет веселее?

Как закрыть доступ к configuration.php из любого места на сервере

Можно конечно зайти на сервер по SSH и выставить права файлу 0440, но при обновлении конфига сайта, ядро Joomla снова выставит права на него 0444, и снова всё та же самая история с потенциальной угрозой взлома (если у кого-то есть доступ к какому-нибудь файлу на сервере, он обязательно доберётся и до файлов всего сайта с configuration.php с такими правами на чтение).

Итак, где выставляются права на configuration.php в ядре Joomla?

Эти права выставляются в файле компонента конфигурации в файлах ядра админки:

/administrator/components/com_config/model/application.php

Для того, чтобы закрыть эту дыру в уязвимости сайта на CMS Joomla нужно поменять права с 0644 на 0640 в 481 строке:

if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0640'))

0444 на 0440 в строке 501

if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0440'))

После этого либо зайти на сервер и выставить права на файл configuration.php 0440 с помощью команды chmod. Либо просто что-то поменять в основной конфигурации Joomla и пересохранить её (права при пересохранении выставятся автоматически с запретом на чтение любому пользователю, не являющемуся владельцем этого файла или не входящего в группу владельцев).

ВНИМАНИЕ!
Данное решение будет работать только до тех пор, пока вы не накатите обновление Joomla (пока разработчики не устранят эту дыру в безопасности CMS Joomla в исходниках, которые они прилежно перезаписывают каждый раз при обновлении.

Надеюсь, кому-то после прочтения стало спокойнее спать. =)

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню