Как стать автором
Обновить

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

Время на прочтение5 мин
Количество просмотров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 €. Можете попробовать что-нибудь исправить. Но если не получится — не отчаивайтесь, мантейнеры этого проекта обучены в высшей степени ловко маневрировать между задачами, чтобы годами держать Друпал на одном месте.
Теги:
Хабы:
Всего голосов 47: ↑46 и ↓1+45
Комментарии21

Публикации

Истории

Работа

Ближайшие события