CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
akuba

Критическая уязвимость (v11.1)

Recommended Posts

Сегодня меня взломали благодаря уязвимости в движке + человеческий фактор.

Метод атаки:

1. Через систему личных сообщений пользователю из группы Администраторы присылают письмо (обычно жалоба и тп) в тексте которого есть некая ссылка. Ссылка закодирована якобы антиличем и ссылается на штатный скрипт - /engine/go.php?url=%1D... (к сожалению оригинальный url не сохранился - пока я разбирался с последствиями злоумышленник потер историю сообщений).

2. При переходе по ссылке штатный скрипт /engine/go.php раскодирует следующий javascript код (код на ходу правился для анализа, но вроде я его полностью восстановил в исходный вид):

<code style='display: none;' id='LJKwqoiDHqewE'></code>
<script>
.....
</script>

3. Злоумышленник соответственно создает себе юзера petromadsss с привилегиями Администратора и отправляет себе сигнал о новой жертве. Кстати, ждать он себя не заставил - практически сразу же залогинился в админку и начал править настройки сайта (выявлено по логу последних действий в админпанели).

 

Как дальше собирался воспользоваться хацкер взломанной системой не известно (я заблокировал все сети с которых он входил - вероятно через TOP или подобное, т.к. сетей было около 5, все иностранные хостинги).

deny 185.93.181.0/25;   # M247-LTD-Madrid / ES
deny 217.64.127.0/24;   # M247-LTD-Vienna
deny 37.221.160.0/20;   # RO-VOXILITY
deny 91.229.76.0/22;    # DeltaHost / UA

Также, данный взлом может привести к взлому самого сервера и потере контроля над ним.

 

PS: ни какие файлы движка более не изменялись (проверено вручную через find из консоли и средствами контроля самого движка), данные БД вероятно тоже. Все вышеперечисленные материалы были получены по горячим следам и описаны сразу же, так что извиняюсь за возможные мелкие неточности.

PS2:  по данным Google ящика petromadsss@gmail.com не существует.

  • Upvote 3

Share this post


Link to post
Share on other sites

Да, оригинальный способ заставить админа создать админа :)

Посмотрите бекапы sql, возможно есть копия с перепиской.

Share this post


Link to post
Share on other sites

О таком надо писать в обратную связь и в личные сообщения celsoft. Сейчас понабегут и пойдут ломать сайты )

Share this post


Link to post
Share on other sites
28 минут назад, MSK сказал:

Да, оригинальный способ заставить админа создать админа :)

Посмотрите бекапы sql, возможно есть копия с перепиской.

 

сам текст послания не оригинален и ни чего нового не несет, поэтому и выкладывать не стал, но кому интересно вот копия из мыла, пришедшего по ПМ:

Цитата
Уважаемая администрация веб сайта,
Материалы, принадлежащие нашему клиенту, размещены на Вашем сайте. Клиент разрешения на их публикацию на указанном веб ресурсе не давал. Существуют основания для запрета клиентом к распространению в сети данных файлов, а также основания, в случае отказа удаления, признания соответствующих действий компрометирующими. Просим удалить материалы в течение 3-х рабочих дней со дня получения данного письма. Данное письмо просим считать официальным электронным уведомлением*, которое является зарегистрированным в соответствующей электронной базе t&amp;p, заверено электронной подписью и может быть использовано t&amp;p в качестве аргумента в случае возникновения дополнительных разбирательств.

Ссылка на материал
_________
*зафиксирован t&amp;p как официальное средство уведомления состоянием на 3 марта 2017 года

С уважением, Екатерина Стрельцова
Ведущий специалист t&amp;p
tokarevpartners.ru
Regards, Kate Stleltzova

на тексте "Ссылка на материал" и висел зловред

Share this post


Link to post
Share on other sites

Забыл самое очевидное - ссылка должна быть в истории браузера.

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

Share this post


Link to post
Share on other sites

да смысла в ссылке нет - то, что было закодировано в ней (js код) я раскодировал и выложил на обозрение. Выкладывать тот же код в base64 я не вижу смысла

7 минут назад, MSK сказал:

Забыл самое очевидное - ссылка должна быть в истории браузера.

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

Правильное использование социальной инженерии.. такие письма счастья многие админы получают пачками и действуют на автомате - открыл, удалил. Так, что все было рассчитано верно - ни кто обычно не проверяет ссылку, тем более оно закодировано base64, вроде как ведет на твой же сайт и тп. и вуаля

17 минут назад, webair сказал:

О таком надо писать в обратную связь и в личные сообщения celsoft. Сейчас понабегут и пойдут ломать сайты )

ну самому я не писал, а в саппорт скинул одновременно с этой темой. Чем раньше закроют - тем меньше будет жертв.

честно говоря - это мой последний проект на DLE.. все время его ломали, то так, то эдак.. в топку

Share this post


Link to post
Share on other sites

Ну на самом деле подобный "финт" возможен на любой CMS, в которой есть внутренний редирект для ссылок.
Лечится это достаточно просто (ну пока новый не придумают) - проверка ссылки при генерации редиректа.

Спасибо за инфу - о подобных вещах надо узнавать как можно скорее. Предупрежден - значит вооружен.

 

Я бы добавил еще, что подобным способом можно не только Админа создать, но и любые действия выполнить доступные авторизованному пользователю... Т.ч. это касается не только Админов.

Пока нет заплатки - лучше отключить в настройках групп

Автоматическая замена ссылок в тег [leech]
Разрешить использование кликабельных ссылок

Edited by MSK

Share this post


Link to post
Share on other sites
19 минут назад, MSK сказал:

Ну на самом деле подобный "финт" возможен на любой CMS, в которой есть внутренний редирект для ссылок.
Лечится это достаточно просто (ну пока новый не придумают) - проверка ссылки при генерации редиректа.

Спасибо за инфу - о подобных вещах надо узнавать как можно скорее. Предупрежден - значит вооружен.

 

Я бы добавил еще, что подобным способом можно не только Админа создать, но и любые действия выполнить доступные авторизованному пользователю... Т.ч. это касается не только Админов.

Пока нет заплатки - лучше отключить в настройках групп


Автоматическая замена ссылок в тег [leech]
Разрешить использование кликабельных ссылок

в он ее не тегом [leech] сделал - это вручную было закодировано и всунуто, так что отключение лича не поможет

нужно скипать любой програмный код в /engine/go.php

 

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

 

кстати, уже немного позже обнаружил, что хацкер включил в движке заливку файлов, так что это, по-видимому, был еще далеко не конец.. видимо просто немного не успел

Edited by akuba

Share this post


Link to post
Share on other sites
3 часа назад, akuba сказал:

 

честно говоря - это мой последний проект на DLE.. все время его ломали, то так, то эдак.. в топку

А нехер кому попало права админа раздавать, людям которые не смотрят на какие ссылки тыкают. Если ссылка пришла с /engine/go.php, в просьбе удалить какой то материал, то это уже должно насторожить, так как правообладатели дают ссылку на материал который нужно удалить всегда прямую, так как они копируют её из окна браузера.

 

 

Share this post


Link to post
Share on other sites

Спасибо за предоставленную информацию. Опубликован патч http://dle-news.ru/bags/v112/1715-nedostatochnaya-filtraciya-dannyh.html устраняющий данную проблему.

 

7 часов назад, MSK сказал:

Пока нет заплатки - лучше отключить в настройках групп


Автоматическая замена ссылок в тег [leech]

 

Пользователю не прислали ссылку через [leech] ему прислали уже подготовленную ссылку. Здесь нужно иметь запрет на публикацию кликабельных ссылок.

  • Upvote 1

Share this post


Link to post
Share on other sites

А у меня буквы цифрами пишут в коментариях - сайт с кодировкой 1251

в хорошем качестве здесь h&#116;&#116;p&#58;&#47;&#47kinodem&#046;&#114;&#117;

Share this post


Link to post
Share on other sites
17 минут назад, SusaPusa сказал:

А у меня буквы цифрами пишут в коментариях - сайт с кодировкой 1251

в хорошем качестве здесь h&#116;&#116;p&#58;&#47;&#47kinodem&#046;&#114;&#117;

И? Непонятна суть вашей проблемы. Это вам пытаются написать HTML сущности. Что пользователь написал, то скрипт и вывел.На безопасность вашего сайта это никак не влияет.

Share this post


Link to post
Share on other sites

Владимир, небольшое уточнение:

в патче нужно добавить ниже, или заменить на?

если добавить ниже, то получается вот так?

$url = @str_replace ( "&amp;", "&", $url );
$url = htmlspecialchars( $url, ENT_QUOTES, $config['charset'] );
$url = str_replace ( "&amp;", "&", $url );

 

Share this post


Link to post
Share on other sites
10 минут назад, prikindel сказал:

в патче нужно добавить ниже, или заменить на?

Добавить. 

10 минут назад, prikindel сказал:

если добавить ниже, то получается вот так?

Да верно, так и должно быть.

  • Upvote 2

Share this post


Link to post
Share on other sites

Странно что так долго никому в голову не пришло что go.php не фильтрует передаваемые ему данные на html...
А ведь этот код почти не трогался не одну линейку DLE же...

  • Upvote 1

Share this post


Link to post
Share on other sites
23 минуты назад, SKYNET74 сказал:

Странно что так долго никому в голову не пришло что go.php не фильтрует передаваемые ему данные на html...

Потому что вектор атаки достаточно сложный, чем может показаться на первый взгляд. И требует достаточно серьезных знаний. Чтобы атака была успешной требуется соблюдение целого ряда условий.

 

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

2. Ссылку нужно специально подготовить закодировать и только потом отправить, простая вставка кода не сработает.

3. Нужны серьезные знания JS программирования, т.к. код достаточно сложен, просто так нужные данные не получить.

4. Ссылку нужно послать именно администратору и именно на сайт, из вне она уже не сработает.

5. Собственно уговорить кликнуть по ней администратора.

Share this post


Link to post
Share on other sites
1 час назад, celsoft сказал:

Потому что вектор атаки достаточно сложный, чем может показаться на первый взгляд. И требует достаточно серьезных знаний. Чтобы атака была успешной требуется соблюдение целого ряда условий.

 

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

2. Ссылку нужно специально подготовить закодировать и только потом отправить, простая вставка кода не сработает.

3. Нужны серьезные знания JS программирования, т.к. код достаточно сложен, просто так нужные данные не получить.

4. Ссылку нужно послать именно администратору и именно на сайт, из вне она уже не сработает.

5. Собственно уговорить кликнуть по ней администратора.

Первое правило программиста, не доверять входным данным от пользователей. (с)
И раз go.php ничего не подразумевает к передаче кроме ссылок, нужно было жестко фильтровать $_GET['url'], движок же не будет HTML/JS кодировать в base64...
PS: Ссылки включены практически у всех, через личивание, ибо не дело в 2017 то году усложнять жизнь пользователям в виде вставки ссылки как текста...

  • Upvote 1

Share this post


Link to post
Share on other sites
28 минут назад, SKYNET74 сказал:

Первое правило программиста, не доверять входным данным от пользователей. (с)

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

 

28 минут назад, SKYNET74 сказал:

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

Вообще то речь идет о комментариях, а не просто ссылках как таковых. Если вы считаете нормальным давать прямые ссылки, для лиц, которые не имеют доверия, то я умываю руки. И дело тут совершенно не в go.php и в антиличах, а в том что вам могут понаставить ссылки в комментариях на порно, на вирусы и трояны, которые расположены на других сайтах и т.д. и все это будет стоять прямыми ссылками на вашем сайте и в лучшем случае сайт будет отмечен как небезопасный поисковиками, т.к. отправляет пользователей на сайты с вирусами, поисковики отключают не только сайты где вирусы, но и сайты ссылающиеся на таковые. В худшем услышите много хороших слов про себя от посетителей своего сайта когда они пойдут по таким ссылкам и наловят вирусов. Кликабельные ссылки на сайте должны публиковать доверенные лица, так было и 2000 году, так будет и в 2999 году, если там конечно останется понятие ссылок.

  • Upvote 2

Share this post


Link to post
Share on other sites
7 минут назад, celsoft сказал:

Вообще то речь идет о комментариях, а не просто ссылках как таковых. Если вы считаете нормальным давать прямые ссылки, для лиц, которые не имеют доверия, то я умываю руки. И дело тут совершенно не в go.php и в антиличах, а в том что вам могут понаставить ссылки в комментариях на порно, на вирусы и трояны, которые расположены на других сайтах и т.д. и все это будет стоять прямыми ссылками на вашем сайте и в лучшем случае сайт будет отмечен как небезопасный поисковиками, т.к. отправляет пользователей на сайты с вирусами. В худшем услышите много хороших слов про себя от посетителей своего сайта когда они пойдут по таким ссылкам и наловят вирусов. Кликабельные ссылки на сайте должны публиковать доверенные лица, так было и 2000 году, так будет и в 2999 году, если там конечно останется понятие ссылок.

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

Посмотрите на популярные сайты, были бы они такими популярными, если бы вместо улучшения юзабилити, вставляли бы палки в колёса пользователям?
Вопрос риторический...

PS: А может сделать элементарно ещё один вид личивания, без кодирования в base64?
Пример: /engine/go.php?to=https://site.ru/page/about/
И не индексируется, и сразу видно куда ведёт. А base64 это как неведомое болото...

  • Upvote 1

Share this post


Link to post
Share on other sites
42 минуты назад, SKYNET74 сказал:

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

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

 

42 минуты назад, SKYNET74 сказал:

PS: А может сделать элементарно ещё один вид личивания, без кодирования в base64?
Пример: /engine/go.php?to=https://site.ru/page/about/
И не индексируется, и сразу видно куда ведёт. А base64 это как неведомое болото...

Не имеет ни малейшего смысла. За https://site.ru/page/about/ вас также может ждать вирус и в URL об этом написано не будет.

 

P.S. Зачем ставить себе лайки за свои собственные сообщения? Я как администратор это могу увидеть. Только не говорите что вы их не ставите. Ставите и к каждому сообщению, только от другого аккаунта.

  • Upvote 1

Share this post


Link to post
Share on other sites
1 час назад, celsoft сказал:

Не имеет ни малейшего смысла. За https://site.ru/page/about/ вас также может ждать вирус и в URL об этом написано не будет.

Зато видно URL куда тебя отправляют...
И если там неведомые символы, тогда это повод задуматься о цели такой ссылки...

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

  • Upvote 1

Share this post


Link to post
Share on other sites

Немного вклинюсь в Вашу беседу - речь шла не о комментариях - зловред был прислан в Личные сообщения.

 

"будучи администраторами, люди бездумно идут по ссылкам" - администраторы тоже люди (даже матерые программеры и прочие животные), со свойственными людям недостатками типа переутомление, какие-либо жизненные неурядицы, привыкание к множеству однотипных и монотонных операций и тп. Так что не стоит поливать грязью бездумных администраторов. Уверен на 120%, что любой из Вас хоть раз в жизни попадался на довольно тупые разводы типа этого - все люди одинаковы и абсолютно непогрешимых не бывает.

Поэтому, не стоит валить косяки с недостаточной фильтрацией полностью на тупых администраторов - вина, как бы сказать, коллективная.

Edited by akuba
  • Upvote 1

Share this post


Link to post
Share on other sites
1 час назад, akuba сказал:

Немного вклинюсь в Вашу беседу - речь шла не о комментариях - зловред был прислан в Личные сообщения.

 

"будучи администраторами, люди бездумно идут по ссылкам" - администраторы тоже люди (даже матерые программеры и прочие животные), со свойственными людям недостатками типа переутомление, какие-либо жизненные неурядицы, привыкание к множеству однотипных и монотонных операций и тп. Так что не стоит поливать грязью бездумных администраторов. Уверен на 120%, что любой из Вас хоть раз в жизни попадался на довольно тупые разводы типа этого - все люди одинаковы и абсолютно непогрешимых не бывает.

Поэтому, не стоит валить косяки с недостаточной фильтрацией полностью на тупых администраторов - вина, как бы сказать, коллективная.

Ну и всё таки если бы видно было реальную ссылку перенаправления, то как минимум это бросилось бы в глаза, тот же хром, лиса и опера её выводят при наведении.
Может я какой то не такой, но я обычно смотрю куда ведёт ссылка)

  • Upvote 1

Share this post


Link to post
Share on other sites
5 часов назад, akuba сказал:

Немного вклинюсь в Вашу беседу - речь шла не о комментариях - зловред был прислан в Личные сообщения.

В DLE это просто единые настройки.

 

5 часов назад, akuba сказал:

Поэтому, не стоит валить косяки с недостаточной фильтрацией полностью на тупых администраторов - вина, как бы сказать, коллективная.

Ни в коем случае никто не сваливает вины на администраторов, в моем сообщении шла речь просто о непонимании того зачем администраторы так делают. Этого не должны делать администраторы сайтов. Я администрирую уже много лет, очень много сайтов, мне без преувеличения каждый день приходят письма, о том что чтобы что нажать, о том что аккаунты блокированы, что то где то украдено, и в 100% случаев в лучшем случае это фишинг, если бы я ходил по каждой такой ссылке, то давно бы уже были украдены все доступы. Вашей вины в том что в скрипте была уязвимость нет, это моя личная вина. Но вот просто так ходить по ссылкам вне изолированной песочницы нельзя, будучи где то администратором, потому как вы мишень на кражу доступов. По ссылке мог быть троян, который бы селился на компьютере и крал доступы к серверу, и это не была бы уже вина DLE в том что он вообще позволяет присылать личные сообщения.

4 часа назад, SKYNET74 сказал:

Может я какой то не такой, но я обычно смотрю куда ведёт ссылка

Вы не понимаете смысла моих сообщений, куда она ведет неважно. Важно то, что вы не знаете что за ней, пока по ней не пройдете.

5 часов назад, akuba сказал:

Уверен на 120%, что любой из Вас хоть раз в жизни попадался на довольно тупые разводы типа этого - все люди одинаковы и абсолютно непогрешимых не бывает.

Безусловно. Кто не попадался это лишь вопрос времени.

Share this post


Link to post
Share on other sites
24 минуты назад, celsoft сказал:

Вы не понимаете смысла моих сообщений, куда она ведет неважно. Важно то, что вы не знаете что за ней, пока по ней не пройдете.

В данном случае, если я правильно понял код, не вела на сайт злоумышленника, а выполнила JS прямо на go.php, или я не прав?
И хотите сказать было бы не видна странность при просмотре URL такой ссылки?

  • Upvote 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this