В системе управления контентом Drupal выявлена (https://www.drupal.org/sa-core-2018-002) критическая уязвимость (https://groups.drupal.org/security/faq-2018-002) (CVE-2018-7600 (https://security-tracker.debian.org/tracker/CVE-2018-7600)), которую можно использовать для удалённого выполнения кода на сервере через отправку специально оформленного запроса без аутентификации. Проблема достаточно проста в эксплуатации и затрагивает ветки Drupal 8, 7 и 6. Всем пользователям рекомендуется срочно установить обновления Drupal 8.5.1, 7.58, 8.3.9, 8.4.6 или использовать патч (https://cgit.drupalcode.org/drupal/rawdiff/?h=8.5.x&id=5ac87...).Для эксплуатации уязвимости достаточно (https://twitter.com/codeincarnate/status/979080318966730753) передать параметр запроса или Cookie, начинающийся с символа "#", который будет обработан как спецключ для вызова произвольного PHP-обработчика через Drupal Form API (https://api.drupal.org/api/drupal/developer%21topics...).
URL: https://www.drupal.org/sa-core-2018-002
Новость: https://www.opennet.me/opennews/art.shtml?num=48348
Это не дыра, это фича!
господи друпал это жи грех какой то
А патчи в стили PHP, годы идут, ничего не меняется. Мы тут ввод подчистим, вместо, того чтоб принципиально дыру прикрыть.
принципиальная дыра - это вообще работать с каким-либо user input? В противном случае, у меня для вас плохие новости... по крайней мере, для машин с фон-неймановской архитектурой и тьюринг-полных языков.а на "parser3" вы современный сайт делать не захотите (он не тьюринг-полный, untrusted данные изолированы. Щастья своим разработчикам не принес.)
Принципиальная дыра - это ожидать, что в user input будет только то, что там должно быть по представлениям разработчика.
> Принципиальная дыра - это ожидать, что в user input будет только то, что там должно быть по
> представлениям разработчика.они ничего такого не ожидали, просто ошиблись, упустив еще одно из миллиона мест, где нужно фильтровать еще один из сотни символов, имеющих специльное значение.
это не лечится, это будет всегда.
Принципиально дыра в головах. Прикрыть будет ооооочень сложно.
Что, опять?
https://www.drupal.org/files/issues/2018-03-28/SA-CORE-2018-...для Drupal6
Drupal6 упоминается почему-то только в одной ссылке. В двух других только 7 и 8. Там вообще про одну и ту же уязвимость?
Одним словом - пехапе
Одним словом - не пехапе, а ошибки пейсателей парсеров пользовательских запросов
Не язык должен быть "безошибочным", а код. Так-то.
> Одним словом - не пехапе, а ошибки пейсателей парсеров пользовательских запросов
> Не язык должен быть "безошибочным", а код. Так-то.ну, на самом-то деле, изначальное отсутствие в языке "с низким порогом вхождения" каких-нибудь тривиальных высокоуровневых примитивов вида tosql/tohtml/toxml/tojson и необходимость в каждом случае переизобретать велосипед - очень даже способствует написанию кривого кода. А безошибочного кода не бывает. Бывает хорошо отлаженный.
отдельный привет я-у-мамы-программистам. Прекрасный тест на профпригодность - дать такому задачу "преобразовать untrusted data в,к примеру, sql" (с особым нажимом на слово "untrusted").
Если вы видите, что он сходу начинает писать регекс вместо транслятора - сразу пинка под зад, это рефлексы, это никакому переобучению не поддастся.
В современном PHP все уже есть.А в старом коде времен php4, да, я видел "парсеры" XML и JSON через eval(). "Ну а чо, так проще же". Один такой eval() одной компании как-то обошелся в полмиллиона долларов.
> одной компании как-то обошелся в полмиллиона долларовтак это одной. А полмиллиона других компаний сэкономили на этом по доллару - и вот уже общий баланс неотрицательный :)
Сразу вспоминается модификация анекдота про ковбоев, которые увеличили ВВП.
htmlspecialchars, filter_var
> htmlspecialchars, filter_varэто слишком низкоуровневые конструкции, и к тому же они by design неверны (если использовать filter не для валидации, с этим-то все в порядке, кроме названия).
То есть малейшая неаккуратность, и получаем дыру типа описанной.трансляцию надо выполнять не на обработке input (потому что совершенно неизвестно, что мы с тем input делать собираемся - мы его может вообще сейчас as-is бросим обратно в рожу пользователю в тот textarea, из которого получили, потому что он капчу неверно набрал - и зачем, спрашивается, было куда-то транслировать?)
ее надо выполнять в том месте, где ты с этим input что-то собрался делать.Если в базу собрался положить - тебе нужен sql translator, если в html - html'ный, в js - js'овый. Ну, надеюсь, eval() мы не собираемся? Хотя php-транслятором лучше сразу озаботиться ;-)
Известно это становится только непосредственно на этапе выполнения, уже после всех валидаций и промежуточных обработок (попутно уже нельзя в этом месте вернуть ошибку и ничего не сделать). Именно там и надо фильтровать.
Дырень касается всех или только тех у кого есть какие-то пользователи и они чего-то куда-то вводят?
если у твоего локалхоста нет пользователей - нет, тебя не касается. Особенно если и drupal ты из архива не распаковывал.
Тонко
Да куда уж тоньше. Словно сайты без аунтификации и прочих форм ввода бывают только на локалхосте.
Касается всех, даже включение режима обслуживания не спасет. Ошибка прямо с бутстрапа ядра как-то тянется. В общем без вариантов, надо обновлять.
Drupal весьма хорош для крупных порталов, для тех, кто не хочет изучать программирование, но нужна гибкая настройка сущностей. А шкурку натянуть можно какую хочешь. Скорость правда не ахти, но для корпоратпорталов и не надо.
> Скорость правда не ахтиИ безопасность, как видим, тоже. Но шкурку натянуть можно, это да.
>> Скорость правда не ахти
> И безопасность, как видим, тоже. Но шкурку натянуть можно, это да.Для бизнеса чаще всего важнее шкурка, а не содержание. В таком мире мы живем.
Для бизнеса важны бабки, а как следствие - важно все. Просто некоторые осознают важность качественного безопасного кода только после того, как понесут миллионные убытки.Я всегда объясняю нетехническим бизнесменам понятие технического долга через бабки, прекрасно понимают.
>как понесут миллионные убытки.или не понесут.. а при удачном раскладе еще и страховку нехилую получат...
>долга через бабки, прекрасно понимаютраскрутить лоха на бабки.. да.. есть мастера еще какие :)
>>как понесут миллионные убытки.
> или не понесут.. а при удачном раскладе еще и страховку нехилую получат...
>>долга через бабки, прекрасно понимают
> раскрутить лоха на бабки.. да.. есть мастера еще какие :)Или продадут "успешный" стартап, а отдуваться будет подрядчик фирмы, кто его купит )
> раскрутить лоха на бабки.. да.. есть мастера еще какие :)Да вот прямо сейчас последствия работы таких мастеров разгребаю. До человека, к сожалению, дошло только после того, как слили всю его базу.
>> раскрутить лоха на бабки.. да.. есть мастера еще какие :)
> Да вот прямо сейчас последствия работы таких мастеров разгребаю. До человека, к
> сожалению, дошло только после того, как слили всю его базу."Неприятности происходят вне зависимости от того делаете вы что-то или нет." (с)
Вы считаете что проблема в мастерах... Возможно со своей колокольни вы действительно видите проблему так. Потому что иных вариантов для вас просто не существует.
Другой специалист на тех же данных увидит другую причину проблемы... И тоже, что характерно - будет прав...
Третий специалист найдет третий источник бед... И опять же будет прав.. и докажет что именно его виденье должно как можно более щедро наполнится хрустящими купюрами...
и все будут просить дай, дай денег дай.....
Простите, вы какие-то вещества употребляете, или это ваш естественный ход мыслей?
Ну чел вообще-то в чём-то прав. Вы с ним не согласны?
Два еврея пришли к раввину, чтобы он разрешил их спор.
- Ребе, вот я говорю, что на небе луна.
- Ты прав.
- А он говорит, что это месяц.
- И он прав.
Жена раввина кричит с кухни:
- Соломон, так не может быть, чтоб они оба были правы!
- И ты права.
Оу шыт! Вы посмотрите на этот патч. Он выкидывает все параметры GET/POST-запросов и куки, имена которых начинаются с символа "#".Это же что там с ними делается, что у них означает этот маркер, что его использованием можно запустить произвольный код? Eval? Call_user_func? Кому вообще пришло в голову такое сделать? И сколько же таких мест, что вместо того, чтобы их переписать по-человечески, надо делать глобальную фильтрацию?
Это не php, это люди, которых нельзя пускать за клавиатуру.
Система render array https://www.drupal.org/docs/8/api/render-api/render-arrays
Скорее https://api.drupal.org/api/drupal/developer%21topics...
> Оу шыт! Вы посмотрите на этот патч. Он выкидывает все параметры GET/POST-запросов
> и куки, имена которых начинаются с символа "#".
> Это же что там с ними делается, что у них означает этот
> маркер, что его использованием можно запустить произвольный код? Eval? Call_user_func?
> Кому вообще пришло в голову такое сделать? И сколько же таких
> мест, что вместо того, чтобы их переписать по-человечески, надо делать глобальную
> фильтрацию?
> Это не php, это люди, которых нельзя пускать за клавиатуру.Будь мужиком, покажи класс. Напиши свой патч, а мы посмотрим, ок?
Там изначальная архитектурная ошибка со смешением данных и колбэков в одном массиве, с префиксом "#" у колбэков.Если делать по-хорошему, надо вместо этого массива сделать класс, в котором данные отдельно и колбэки отдельно. Учитывая объем кода, включая сотни сторонних плагинов, нормального способа исправления уже нет, и приходится делать вот такой костыль. А вот тот идиот, который изначально такое смешение придумал, заложил в проект бомбу замедленного действия, и лучше бы его не пускали за клавиатуру.
"В тот момент эта идея мне показалась привлекательной" (с) анек
А можно весь анекдот? Сходу не нагуглил :(
> А можно весь анекдот?Так это он весь и есть: "ыы"
> Там изначальная архитектурная ошибка со смешением данных и колбэков в одном массиве,
> с префиксом "#" у колбэков.Смешение user input и callbacks в одном массиве?
OH SHI...
Закoпать и не откапывать.
> Смешение user input и callbacks в одном массиве?"когда мы это писали - классов в php (4?) еще не было"
а им надо было донести до обработчика и данные, и какое-то обозначение, что с ними делать.
Да были классы.В конце концов, можно было бы просто два разных массива сделать.
Проверьте кому не лень залатали ли эту уязвимость на сайте Белого дома?
Он уже миллион лет не на Друпале. Это всё реклама.
Неудовлетворенные влечения, как сознательные, так и бессознательные, заставляют человека испытывать любовные надежды в отношении практически всех встречающихся ему новых лиц. Как вернуть интерес к жизни: 11 шагов