Вы, без сомнения, слышали или видели, как другие охотники за ошибками находят критические уязвимости благодаря изучению JavaScript файлов, не так ли? В этой статье рассказывается о важности тестирования и проверки JavaScript файлов для баг-хантеров. Мы расскажем вам, что именно нужно искать, и приведем примеры наиболее распространенных уязвимостей (и закономерностей, которые приводят к уязвимостям) в JavaScript файлах!
Важность JavaScript файлов в процессе bug bounty
Мы все знаем, насколько важны JavaScript файлы в процессе bug bounty, поскольку они могут привести к появлению множества (критических) уязвимостей. Некоторые баг-хантеры часто упускают из виду или даже не проводят тестирование и проверку javascript файлов. Чаще всего из-за того, что их трудно читать и их довольно сложно изучить и полностью понять.
Однако эти файлы часто содержат ссылки на конечные API, маршруты приложений и входные параметры. Иногда в них также могут присутствовать токены или другие жестко запрограммированные учетки.
Интересные находки, спрятанные в JavaScript-файлах
Ссылки на API-эндпоинты и маршруты приложения
JavaScript-файлы содержат универсальный код (например, вызовы функций), чтобы обеспечить работу приложения для конечного пользователя. Эти функции, особенно те, которые предназначены для общения с API, должны определить конечную точку для взаимодействия, включая любые входные параметры или структуры данных, которые может ожидать API.
Наша основная цель как охотников за багами — найти как можно больше таких, поскольку это неотъемлемая часть нашего процесса обнаружения контента.
Еще одна мысль, которую стоит учесть, заключается в том, что некоторое ПО имеет API-эндпоинты или маршруты приложения, упомянутые в JavaScript-файлах, которые не являются частью основного приложения или не предназначены для конечного пользователя (подумай об административных панелях или инструментах отладки для разработчиков). Изучая целевое ПО, можно не заметить эти скрытые API-эндпоинты или URL, поэтому нам придется прибегнуть к дополнительным способам обнаружения.
Жестко заданные учетные данные
Случается, что разработчики случайно допускают ошибки и прописывают учетные данные в общедоступных ресурсах, таких как JavaScript файлы. Например, учетные данные AWS не должны быть жестко зашиты и присутствовать в статических файлах.
Пример файла конфигурации с жестко заданными учетными данными AWS
Автоматические инструменты могут обнаруживать множество типов учетных данных, однако, вам потребуется вручную проверять обнаруженные учетные данные, прежде чем сообщать об этом, поскольку некоторые из результатов являются либо недействительными, либо уже отозванными ключами.
репозиторий, который содержит список популярных публичных API-ключей и учетных данных, а также инструкции по проверке обнаруженных данных.
Входные параметры
Входные параметры принимают произвольные пользовательские данные, что может привести к всевозможным уязвимостям, таким как CSRF, SQL-инъекции, XSS и многое другое. Очень важно, чтобы мы определили все возможные параметры, которые может принимать конкретная конечная точка.
Один из наиболее точных способов сделать это - использовать JavaScript файлы. В вызовах API функций вы часто найдете тело или параметры запроса:
Обратите внимание на эти параметры и попробуйте использовать их различными способами для взаимодействия с API endpoint. Попробуйте изменить тип содержимого тела вашего запроса. Помните, что некоторые параметры могут использоваться повторно.
DOM-based уязвимости
JavaScript файлы также могут помочь в поиске других DOM-based уязвимостей, таких как . DOM-based уязвимости требуют поиска приемников и источников DOM. Источник DOM - это источник, из которого поступают ваши произвольные входные данные (например, location.hash или параметр запроса). Когда приложение уязвимо, оно передает ваши небезопасные входные данные непосредственно в приемник DOM, вызывающий функцию, которая поддерживает динамическое выполнение кода на стороне клиента (например, такие функции, как eval, location.href или innerHTML).
Мы можем специально искать эти ключевые слова, чтобы найти DOM-based уязвимости.
Уязвимости типа "prototype pollution" используют аналогичный подход, и нам потребуется искать функции или методы, которые небезопасным образом объединяют объекты с произвольными входными данными.
Никогда не следует пренебрегать JavaScript файлами, они содержат ценную информацию, которая может помочь вам найти следующую критическую уязвимость! Всегда старайтесь проверять все встроенные JS-файлы у вашей цели, включая те, которые динамически импортируются после загрузки страницы. JavaScript файлы также могут помочь нам расширить пространство для атаки (изучив URL-адреса, на которые ссылаются, конечные точки API и параметры).
Вы только что узнали кое-что новое о JavaScript файлах и их важности в баг-хантинге. А теперь самое время проверить свои навыки!
Давайте приступим!Как и в случае с большинством нашего технического контента, вы всегда можете использовать это в качестве чек-листа, когда будете рубить бабло на поисках ошибок в чужом коде!
Важность JavaScript файлов в процессе bug bounty
Мы все знаем, насколько важны JavaScript файлы в процессе bug bounty, поскольку они могут привести к появлению множества (критических) уязвимостей. Некоторые баг-хантеры часто упускают из виду или даже не проводят тестирование и проверку javascript файлов. Чаще всего из-за того, что их трудно читать и их довольно сложно изучить и полностью понять.
Однако эти файлы часто содержат ссылки на конечные API, маршруты приложений и входные параметры. Иногда в них также могут присутствовать токены или другие жестко запрограммированные учетки.
В этой статье мы расскажем вам, на что обращать внимание в JavaScript файлах.По этой причине никогда не следует пренебрегать JavaScript файлами. Особенно если целевой объект выглядит либо устаревшим, либо является приложением с большим количеством JavaScript файлов.
Интересные находки, спрятанные в JavaScript-файлах
Ссылки на API-эндпоинты и маршруты приложения
JavaScript-файлы содержат универсальный код (например, вызовы функций), чтобы обеспечить работу приложения для конечного пользователя. Эти функции, особенно те, которые предназначены для общения с API, должны определить конечную точку для взаимодействия, включая любые входные параметры или структуры данных, которые может ожидать API.
Наша основная цель как охотников за багами — найти как можно больше таких, поскольку это неотъемлемая часть нашего процесса обнаружения контента.
Еще одна мысль, которую стоит учесть, заключается в том, что некоторое ПО имеет API-эндпоинты или маршруты приложения, упомянутые в JavaScript-файлах, которые не являются частью основного приложения или не предназначены для конечного пользователя (подумай об административных панелях или инструментах отладки для разработчиков). Изучая целевое ПО, можно не заметить эти скрытые API-эндпоинты или URL, поэтому нам придется прибегнуть к дополнительным способам обнаружения.
- это отличный и простой инструмент с открытым исходным кодом, который поможет вам находить ссылки в файлах JavaScript!По этой причине вам всегда следует пытаться найти такие типы труднодоступных API-эндпоинтов или маршрутов приложений в JS-файлах, поскольку они могут значительно увеличить наши шансы обнаружить непроверенные компоненты, которые могут привести к критическим уязвимостям.
Жестко заданные учетные данные
Случается, что разработчики случайно допускают ошибки и прописывают учетные данные в общедоступных ресурсах, таких как JavaScript файлы. Например, учетные данные AWS не должны быть жестко зашиты и присутствовать в статических файлах.
По этой причине рекомендуется искать учетные данные любого типа, которые жестко закодированы в файлах конфигурации (часто объявляются как глобальные объекты или переменные).
Пример файла конфигурации с жестко заданными учетными данными AWS
Автоматические инструменты могут обнаруживать множество типов учетных данных, однако, вам потребуется вручную проверять обнаруженные учетные данные, прежде чем сообщать об этом, поскольку некоторые из результатов являются либо недействительными, либо уже отозванными ключами.
репозиторий, который содержит список популярных публичных API-ключей и учетных данных, а также инструкции по проверке обнаруженных данных.
Входные параметры
Входные параметры принимают произвольные пользовательские данные, что может привести к всевозможным уязвимостям, таким как CSRF, SQL-инъекции, XSS и многое другое. Очень важно, чтобы мы определили все возможные параметры, которые может принимать конкретная конечная точка.
Один из наиболее точных способов сделать это - использовать JavaScript файлы. В вызовах API функций вы часто найдете тело или параметры запроса:
Обратите внимание на эти параметры и попробуйте использовать их различными способами для взаимодействия с API endpoint. Попробуйте изменить тип содержимого тела вашего запроса. Помните, что некоторые параметры могут использоваться повторно.
DOM-based уязвимости
JavaScript файлы также могут помочь в поиске других DOM-based уязвимостей, таких как . DOM-based уязвимости требуют поиска приемников и источников DOM. Источник DOM - это источник, из которого поступают ваши произвольные входные данные (например, location.hash или параметр запроса). Когда приложение уязвимо, оно передает ваши небезопасные входные данные непосредственно в приемник DOM, вызывающий функцию, которая поддерживает динамическое выполнение кода на стороне клиента (например, такие функции, как eval, location.href или innerHTML).
Мы можем специально искать эти ключевые слова, чтобы найти DOM-based уязвимости.
Уязвимости типа "prototype pollution" используют аналогичный подход, и нам потребуется искать функции или методы, которые небезопасным образом объединяют объекты с произвольными входными данными.
ЗаключениеК счастью для нас, расширения для веб-браузеров, такие как DOM Invader и Untrusted Types, могут помочь нам автоматизировать процесс обнаружения. Таким образом, нам не придется тратить много времени на ручное изучение JS-файлов!
Никогда не следует пренебрегать JavaScript файлами, они содержат ценную информацию, которая может помочь вам найти следующую критическую уязвимость! Всегда старайтесь проверять все встроенные JS-файлы у вашей цели, включая те, которые динамически импортируются после загрузки страницы. JavaScript файлы также могут помочь нам расширить пространство для атаки (изучив URL-адреса, на которые ссылаются, конечные точки API и параметры).
Вы только что узнали кое-что новое о JavaScript файлах и их важности в баг-хантинге. А теперь самое время проверить свои навыки!