Pull to refresh

50 оттенков безопасности Друпала

Reading time 5 min
Views 8.9K
  1. Для хеширования паролей используется модифицированная версия phpass, от которой на официальном сайте открестились. Но менять механизм не спешат [#1845004].
  2. Не желают даже предоставить возможность выбора механизма хеширования [#2939888].
  3. Число итераций для стойкости хеширования не обновлялось больше 7 лет [#1850638], хотя предполагалось увеличение итераций не реже чем в 2 года [#1203852].
  4. При использовании PostgreSQL хеши паролей сравниваются без учёта регистра [#2475539].
  5. Также с PostgreSQL есть проблемы с поддержкой SSL [#850600].
  6. Минимально допустимая версия PostgreSQL 9.2, которая уже давно без поддержки безопасности [#2846994].
  7. Официальная сборка Друпала содержит устаревшие версии вендорных библиотек (из-за совместимости с PHP 5.5). В некоторых из них, например Zend, есть даже известные уязвимости [#2989631].
  8. Также в сборке находятся все тесты, тестовые модули, тестовые темы и вендорные библиотеки для тестирования, что увеличивает не только размер архива, но и область возможных брешей [#2338671].
  9. Застопорилась и идея перенести исполняемые файлы за пределы сайта [#1672986].
  10. Проверка обновлений реализована с помощью GET запросов по небезопасному HTTP протоколу [#1538118]. При MITM атаке можно подсовывать любые ссылки на архивы модулей (домен и хеш-суммы не проверяются). Также можно собирать инфу о составе сайта, списке разработчиков и их активности (запросы с локальных версий сайтов совпадут по ip с аккаунтами на d.org). HTTP протокол позволяет разместить скрипт для сбора инфы за пределами drupal.org.
  11. Пользователь с id = 1 является самым лакомым объектом для атаки, поскольку всегда имеет все существующие на сайте права доступа (permissions), а также имеет все попытки лишить его этих прав [#540008].
  12. Такое поведение не совсем очевидно, поскольку визуально в админке этот пользователь ничем не отличается от других. Но даже попытка подсветить эту особенность закончилась ничем [#572240].
  13. Захватить контроль над этим божественным пользователем с id = 1 может любой администратор, или другой пользователь с нужными правами [#39636].
  14. Определённые права неявным образом дают контроль над всем сайтом, но внешне они тоже никак не выделяются [#2846365], [#594412].
  15. Некоторые права даже своим названием могут ввести в заблуждение. Например, право на просмотр логов на самом деле позволяет и удалять их [#1635646].
  16. Наведения порядка в пермишенах давно уже является острой задачей, но ее просто игнорят [#2628870], [#2667018].
  17. Администратор не может удалить файловый объект загруженный другим пользователем, каким бы вредоносным он ни был [#2949017].
  18. Хук hook_file_download не использует при валидации соответствующий контроллер [#2148353].
  19. Не отрабатывает валидация для файлов на стороне клиента [#2938441].
  20. Слабые проверки загрузки произвольных файлов [#2543590], не говоря уже о всяких RarJpeg склейках.
  21. Некоторые проверки файлов полагаются лишь на .htaccess правила [#2829048].
  22. В .htaccess хватает и других правил безопасности, которые неявным образом теряются при переключении на другое окружение (особенно Nginx), но реализация аналогичных правил web.config заглохла [#154339], [#2669870].
  23. По умолчанию на любой сайт с Друпал 8 можно заливать изображения простым POST запросом, состоящим из имени формы для регистрации и полем с аватаркой пользователя. Примечательно, что в Drupal 7 от вывода такого поля по умолчанию отказались [#31056], но те времена прошли.
  24. При многократной загрузке файла с одинаковым названием появляется проблема, связанная с реализацией алгоритма генерирования уникальных названий файлов [#2684403].
  25. Фильтрация адресов изображений также хромает. Поэтому можно разлогинивать пользователей картинкой с src='/user/logout' [#144538], или реализовать DOS-атаку, разместив пару сотен картинок с src='very/hard/page'.
  26. Ещё один способ съесть ресурсы, это загрузка изображений размерами 1000х1 в поля, которые обрабатываются с помощью «Scale and crop» эффекта [#2931533], [#872206].
  27. Забить базу данных мусорным кешем можно просто перебирая урлы [#1245482], хотя система кеширования и без посторонней помощи прекрасно забирает все ресурсы на хранения результатов, которые даже с нуля было бы получить быстрее [#2888838].
  28. Можно нагружать сайт и забивать логи сообщениями об ошибках с помощью специальных запросов к контекстным ссылкам [#2864933].
  29. Доступ к прикреплённым файлам и изображениям есть всегда, вне зависимости от доступа к контенту [#2904842].
  30. Комментарии к контенту тоже останутся доступны при запрете доступа к контенту [#1781766].
  31. Зареган ли пользовать на сайте можно узнать по сообщению на восстановление пароля [#1521996].
  32. Форма для сброса паролей не защищена от флуда [#1681832].
  33. При создании и проверке паролей, без всякого предупреждения удаляются все пробельные символы (" \t\n\r\0\x0B") вокруг [#1921576]. Это может быть сюрпризом для пользователя, и небольшим послаблением для алгоритма перебора.
  34. Если у вас нет возможности получить хеш пароля для брутфорса, но есть сессия пользователя, то можно брутить пароль без ограничений через сам аккаунт, например, меняя почтовый ящик [#2339399].
  35. Кстати, если что, пользователь даже не узнает, что его ящик был изменён, поскольку попытка реализовать эту фичу стопорится уже не первый год [#85494].
  36. Алгоритм генерации сессий тоже так себе [#2238561].
  37. Куки протекают между сайтами, которые размещены в подпапках [#2515054].
  38. В некоторых случаях можно заблочить пользователей, манипулируя с запросами на некорректный ввод пароля [#2449335].
  39. Доступ к правке шаблонов Twig позволяет получить неограниченный контроль над сайтом [#2860607].
  40. Упорно игнорируется XSS атака через Twig атрибуты [#2567743], [#2552837], [#2544110].
  41. Также можно внедрять XSS в info файлы. Например через description или package поля, что можно интересно эксплуатировать через фичи [#846430].
  42. Не используется заголовок безопасности X-XSS-Protection [#2868150].
  43. XSS можно протолкнуть и через метод редеринг класса PlainTextOutput, хотя название класса говорит о противоположном [#2896735].
  44. Также может быть сюрпризом, что некоторые методы проверяют и кешируют права доступа текущего пользователя, а не того, который в них передали [#2628870], [#2266809].
  45. Из-за неправильной настройки кеша можно делать для пользователя недоступным просмотр собственного профиля [#2614230]. Аналогичный трюк можно проделать при определеных настройках и с контентом [#2982770], и с медиа [#2889855].
  46. Статистикой просмотров материала можно легко манипулировать через обычный цикл for в консоли браузера, накручивая по тысячи просмотров в минуту даже если у вас нет доступа к самому материалу. Можно накручивать даже пока не существующие материалы [#2616330].
  47. Хромает валидация внешних урлов [#2691099], [#2652236].
  48. Нет полноценной защиты от breachattack.com [#2234243].
  49. Если настроить Content Security Policy, то отваливается редактор контента [#2789139].
  50. Это любительская подборка, ни на что не претендующая. Быть может кто-то знает дыры похлеще? С 30.01.2019 по 15.10.2020 действует баунти от EU бюджетом в 89 000,00 €. Можете попробовать что-нибудь исправить. Но если не получится — не отчаивайтесь, мантейнеры этого проекта обучены в высшей степени ловко маневрировать между задачами, чтобы годами держать Друпал на одном месте.
Tags:
Hubs:
+45
Comments 21
Comments Comments 21

Articles