Файл, в котором хранятся основные настройки 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 в исходниках, которые они прилежно перезаписывают каждый раз при обновлении.
Надеюсь, кому-то после прочтения стало спокойнее спать. =)
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)