- PVSM.RU - https://www.pvsm.ru -

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

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

Автор: Maureen

Источник [64]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/drupal/306792

Ссылки в тексте:

[1] phpass: https://www.openwall.com/phpass

[2] [#1845004]: https://www.drupal.org/project/drupal/issues/1845004

[3] [#2939888]: https://www.drupal.org/project/drupal/issues/2939888

[4] [#1850638]: https://www.drupal.org/project/drupal/issues/1850638

[5] [#1203852]: https://www.drupal.org/project/drupal/issues/1203852

[6] [#2475539]: https://www.drupal.org/project/drupal/issues/2475539

[7] [#850600]: https://www.drupal.org/project/drupal/issues/850600

[8] [#2846994]: https://www.drupal.org/project/drupal/issues/2846994

[9] [#2989631]: https://www.drupal.org/project/drupal/issues/2989631

[10] [#2338671]: https://www.drupal.org/project/drupal/issues/2338671

[11] [#1672986]: https://www.drupal.org/project/drupal/issues/1672986

[12] [#1538118]: https://www.drupal.org/project/drupal/issues/1538118

[13] [#540008]: https://www.drupal.org/project/drupal/issues/540008

[14] [#572240]: https://www.drupal.org/project/drupal/issues/572240

[15] [#39636]: https://www.drupal.org/project/drupal/issues/39636

[16] [#2846365]: https://www.drupal.org/project/drupal/issues/2846365

[17] [#594412]: https://www.drupal.org/project/drupal/issues/594412

[18] [#1635646]: https://www.drupal.org/project/drupal/issues/1635646

[19] [#2628870]: https://www.drupal.org/project/drupal/issues/2628870

[20] [#2667018]: https://www.drupal.org/project/drupal/issues/2667018

[21] [#2949017]: https://www.drupal.org/project/drupal/issues/2949017

[22] [#2148353]: https://www.drupal.org/project/drupal/issues/2148353

[23] [#2938441]: https://www.drupal.org/project/drupal/issues/2938441

[24] [#2543590]: https://www.drupal.org/project/drupal/issues/2543590

[25] [#2829048]: https://www.drupal.org/project/drupal/issues/2829048

[26] [#154339]: https://www.drupal.org/project/drupal/issues/154339

[27] [#2669870]: https://www.drupal.org/project/drupal/issues/2669870

[28] [#31056]: https://www.drupal.org/project/drupal/issues/31056

[29] [#2684403]: https://www.drupal.org/project/drupal/issues/2684403

[30] [#144538]: https://www.drupal.org/project/drupal/issues/144538

[31] [#2931533]: https://www.drupal.org/project/drupal/issues/2931533

[32] [#872206]: https://www.drupal.org/project/drupal/issues/872206

[33] [#1245482]: https://www.drupal.org/project/drupal/issues/1245482

[34] [#2888838]: https://www.drupal.org/project/drupal/issues/2888838

[35] [#2864933]: https://www.drupal.org/project/drupal/issues/2864933

[36] [#2904842]: https://www.drupal.org/project/drupal/issues/2904842

[37] [#1781766]: https://www.drupal.org/project/drupal/issues/1781766

[38] [#1521996]: https://www.drupal.org/project/drupal/issues/1521996

[39] [#1681832]: https://www.drupal.org/project/drupal/issues/1681832

[40] [#1921576]: https://www.drupal.org/project/drupal/issues/1921576

[41] [#2339399]: https://www.drupal.org/project/drupal/issues/2339399

[42] [#85494]: https://www.drupal.org/project/drupal/issues/85494

[43] [#2238561]: https://www.drupal.org/project/drupal/issues/2238561

[44] [#2515054]: https://www.drupal.org/project/drupal/issues/2515054

[45] [#2449335]: https://www.drupal.org/project/drupal/issues/2449335

[46] [#2860607]: https://www.drupal.org/project/drupal/issues/2860607

[47] [#2567743]: https://www.drupal.org/project/drupal/issues/2567743

[48] [#2552837]: https://www.drupal.org/project/drupal/issues/2552837

[49] [#2544110]: https://www.drupal.org/project/drupal/issues/2544110

[50] [#846430]: https://www.drupal.org/project/drupal/issues/846430

[51] [#2868150]: https://www.drupal.org/project/drupal/issues/2868150

[52] [#2896735]: https://www.drupal.org/project/drupal/issues/2896735

[53] [#2266809]: https://www.drupal.org/project/drupal/issues/2266809

[54] [#2614230]: https://www.drupal.org/project/drupal/issues/2614230

[55] [#2982770]: https://www.drupal.org/project/drupal/issues/2982770

[56] [#2889855]: https://www.drupal.org/project/drupal/issues/2889855

[57] [#2616330]: https://www.drupal.org/project/drupal/issues/2616330

[58] [#2691099]: https://www.drupal.org/project/drupal/issues/2691099

[59] [#2652236]: https://www.drupal.org/project/drupal/issues/2652236

[60] breachattack.com: http://breachattack.com/

[61] [#2234243]: https://www.drupal.org/project/drupal/issues/2234243

[62] [#2789139]: https://www.drupal.org/project/drupal/issues/2789139

[63] баунти: https://juliareda.eu/2018/12/eu-fossa-bug-bounties/

[64] Источник: https://habr.com/ru/post/437820/?utm_source=habrahabr&utm_medium=rss&utm_campaign=437820