Вопреки байке о том, что конструкторы всегда поддерживаются в лучшей современной форме, на самом деле они - заплатка на заплатке. Это касается Битрикса и практически всех других конструкторов.
Для хеширования паролей используется модифицированная версия phpass, от которой на официальном сайте открестились. Но менять механизм не спешат [#1845004].
Не желают даже предоставить возможность выбора механизма хеширования [#2939888].
Число итераций для стойкости хеширования не обновлялось больше 7 лет [#1850638], хотя предполагалось увеличение итераций не реже чем в 2 года [#1203852].
При использовании PostgreSQL хеши паролей сравниваются без учёта регистра [#2475539].
Также с PostgreSQL есть проблемы с поддержкой SSL [#850600].
Минимально допустимая версия PostgreSQL 9.2, которая уже давно без поддержки безопасности [#2846994].
Официальная сборка Друпала содержит устаревшие версии вендорных библиотек (из-за совместимости с PHP 5.5). В некоторых из них, например Zend, есть даже известные уязвимости [#2989631].
Также в сборке находятся все тесты, тестовые модули, тестовые темы и вендорные библиотеки для тестирования, что увеличивает не только размер архива, но и область возможных брешей [#2338671].
Застопорилас и идея перенеси исполняемые файлы за пределы сайта [#1672986].
Проверка обновлений реализована с помощью GET запросов по небезопасному HTTP протоколу [#1538118]. При MITM атаке можно подсовывать любые ссылки на архивы модулей (домен и хеш-суммы не проверяются). Также можно собирать инфу о составе сайта, списке разработчиков и их активности (запросы с локальных версий сайтов совпадут по ip с аккаунтами на d.org). HTTP протокол позволяет разместить скрипт для сбора инфы за пределами drupal.org.
Пользователь с id = 1 является самым лакомым объектом для атаки, поскольку всегда имеет все существующие на сайте права доступа (permissions), а также имеет все попытки лишить его этих прав [#540008].
Такое поведение не совсем очевидно, поскольку визуально в админке этот пользователь ничем не отличается от других. Но даже попытка подсветить эту особенность закончилась ничем [#572240].
Захватить контроль над этим пользователем с id = 1 может любой администратор, или другой пользователь с нужными правами [#39636].
Определённые права неявным образом дают контроль над всем сайтом, но внешне они тоже никак не выделяются [#2846365], [#594412].
Некоторые права даже своим названием могут ввести в заблуждение. Например, право на просмотр логов на самом деле позволяет и удалять их [#1635646].
Наведения порядка в пермишенах давно уже является острой задачей, но ее просто игнорят [#2628870], [#2667018].
Администратор не может удалить файловый объект загруженный другим пользователем, каким бы вредоносным он ни был [#2949017].
Хук hook_file_download не использует при валидации соответствующий контроллер [#2148353].
Нет отрабатывает валидация для файлов на стороне клиента [#2938441].
Слабые проверки загрузки произвольных файлов [#2543590], не говоря уже о всяких RarJpeg склейках.
Некоторые проверки файлов полагаются на .htaccess правила [#2829048].
В .htaccess хватает и других правил безопасности, которые неявным образом теряются при переключении на другое окружение (особенно Nginx), но реализация аналогичных правил web.config заглохла [#154339], [#2669870].
По умолчанию на любой сайт с Друпал 8 можно заливать изображения простым POST запросом, состоящим из имени формы для регистрации и полем с аватаркой пользователя. Примечательно, что в Drupal 7 от вывода такого поля по умолчанию отказались [#31056], но те времена прошли.
При многократной загрузке файла с одинаковым названием появляется проблема, связанная с реализацией алгоритма генерирования уникальных названий файлов [#2684403].
Фильтрация адресов изображений также хромает. Поэтому можно разлогинивать пользователей картинкой с src='/user/logout' [#144538], или реализовать DOS-атаку, разместив пару сотен картинок с src='very/hard/page'.
Ещё один способ съесть ресурсы, это загрузка изображений размерами 1000х1 в поля, которые обрабатываются с помощью «Scale and crop» эффекта [#2931533], [#872206].
Забить базу данных мусорным кешем можно просто перебирая урлы [#1245482], хотя система кеширования и без посторонней помощи прекрасно забирает все ресурсы на хранения результатов, которые даже с нуля было бы получить быстрее [#2888838].
Можно нагружать сайт и забивать логи сообщениями об ошибках с помощью специальных запросов к контекстным ссылкам.[#2864933].
Доступ к прикреплённым файлам и изображениям есть всегда, вне зависимости от доступа к контенту [#2904842].
Комментарии к контенту тоже останутся доступны при запрете доступа к контенту [#1781766].
Зареган ли пользовать на сайте можно узнать по сообщению на восстановление пароля [#1521996].
Форма для сброса паролей не защищена от флуда [#1681832].
При создании и проверке паролей, без всякого предупреждения удаляются все пробельные символы вокруг [#1921576]. Это может быть сюрпризом для пользователя, и небольшим послаблением для алгоритма перебора.
Если у вас нет возможности получить хеш пароля для брутфорса, но есть сессия пользователя, то можно брутить пароль без ограничений через сам аккаунт, например, меняя почтовый ящик [#2339399].
Кстати, если что, пользователь даже не узнает, что его ящик был изменён, поскольку попытка реализовать эту фичу стопорится уже не первый год [#85494].
Алгоритм генерации сессий тоже так себе [#2238561].
Куки протекают между сайтами, которые размещены в подпапках [#2515054].
В некоторых случаях можно заблочить пользователей, манипулируя с запросами на некорректный ввод пароля [#2449335].
Доступ к правке шаблонов Twig позволяет получить неограниченный контроль над сайтом [#2860607].
Также можно внедрять XSS в info файлы. Например через deion или package поля, что можно интересно эксплуатировать через фичи [#846430].
Не используется заголовок безопасности X-XSS-Protection [#2868150].
XSS можно протолкнуть и через метод редеринг класса PlainTextOutput, хотя название класса говорит о противоположном [#2896735].
Также может быть сюрпризом, что некоторые методы проверяют и кешируют права доступа текущего пользователя, а не того, который в них передали [#2628870], [#2266809].
Из-за неправильной настройки кеша можно делать для пользователя недоступным просмотр собственного профиля [#2614230]. Аналогичный трюк можно проделать при определеных настройках и с контентом [#2982770], и с медиа [#2889855].
Статистикой просмотров материала можно легко манипулировать через обычный цикл for в консоли браузера, накручивая по тысячи просмотров в минуту даже если у вас нет доступа к самому материалу. Можно накручивать даже пока не существующие материалы [#2616330].
Если настроить Content Security Policy, то отваливается редактор контента [#2789139].
Это любительская подборка, ни на что не претендующая. Быть может кто-то знает дыры похлеще? С 30.01.2019 по 15.10.2020 действует баунти от EU бюджетом в 89 000,00 €. Можете попробовать что-нибудь исправить. Но если не получится — не отчаивайтесь, мантейнеры этого проекта обучены в высшей степени ловко маневрировать между задачами, чтобы годами держать Друпал на одном месте.
Об авторе:Статьи на сайте Форнит активно защищаются от безусловной веры в их истинность, и авторитетность автора не должна оказывать влияния на понимание сути. Если читатель затрудняется сам с определением корректности приводимых доводов, то у него есть возможность задать вопросы в обсуждении или в теме на форуме. Про авторство статей >>.
Обнаружен организм с крупнейшим геномом Новокаледонский вид вилочного папоротника Tmesipteris oblanceolata, произрастающий в Новой Каледонии, имеет геном размером 160,45 гигапары, что более чем в 50 раз превышает размер генома человека.