Уязвимости, связанные с раскрытием информации
В этом разделе мы объясним основы уязвимостей раскрытия информации и расскажем, как их находить и эксплуатировать. Мы также дадим рекомендации по тому, как предотвратить уязвимости раскрытия информации на ваших собственных сайтах.

Освоение поиска и эксплуатации раскрытия информации — жизненно важный навык для любого тестировщика. Скорее всего, вы будете сталкиваться с ним регулярно, и как только вы научитесь эффективно его использовать, это поможет повысить эффективность тестирования и позволит находить дополнительные ошибки высокой степени критичности.
Лабораторные задания
Если вы уже знакомы с базовыми концепциями уязвимостей раскрытия информации и просто хотите попрактиковаться в их эксплуатации на реалистичных, намеренно уязвимых целях, вы можете перейти ко всем лабораторным работам по ссылке ниже.
Что такое раскрытие информации?
Раскрытие информации (information disclosure), также известное как утечка информации (information leakage), — это когда веб-сайт непреднамеренно раскрывает своим пользователям конфиденциальные сведения. В зависимости от контекста сайты могут утекать к потенциальному злоумышленнику самые разные данные, в том числе:
Данные о других пользователях, такие как имена пользователей или финансовая информация
Конфиденциальные коммерческие или бизнес-данные
Технические детали о сайте и его инфраструктуре
Опасности утечки конфиденциальных пользовательских или бизнес-данных достаточно очевидны, но раскрытие технической информации иногда может быть не менее серьёзным. Хотя часть таких сведений будет иметь ограниченную пользу, они потенциально могут стать отправной точкой для выявления дополнительной поверхности атаки, которая может содержать другие интересные уязвимости. Сведения, которые вы сможете собрать, могут даже дать недостающий фрагмент пазла при попытке построить сложные атаки высокой критичности.
Иногда конфиденциальная информация может небрежно утекать пользователям, которые просто просматривают сайт обычным образом. Однако чаще злоумышленнику приходится вызывать раскрытие информации, взаимодействуя с сайтом неожиданными или злонамеренными способами. Затем он внимательно изучает ответы сайта, чтобы попытаться выявить интересное поведение.
Примеры раскрытия информации
Некоторые базовые примеры раскрытия информации:
Раскрытие названий скрытых каталогов, их структуры и содержимого через файл
robots.txtили листинг каталогаПредоставление доступа к файлам исходного кода через временные резервные копии
Явное упоминание в сообщениях об ошибках названий таблиц или столбцов базы данных
Ненужное раскрытие крайне чувствительных данных, таких как реквизиты банковской карты
Жёстко закодированные в исходном коде ключи API, IP-адреса, учётные данные БД и т. д.
Намёки на наличие или отсутствие ресурсов, имён пользователей и т. п. через тонкие различия в поведении приложения
В этой теме вы узнаете, как находить и эксплуатировать некоторые из этих примеров и многое другое.
Как возникают уязвимости раскрытия информации?
Уязвимости раскрытия информации могут возникать бесчисленными способами, но в целом их можно классифицировать следующим образом:
Неудаление внутреннего контента из публичного. Например, комментарии разработчиков в разметке иногда видны пользователям в продуктивной среде.
Небезопасная конфигурация веб-сайта и сопутствующих технологий. Например, незакрытые параметры отладки и диагностики порой предоставляют злоумышленникам полезные инструменты для получения конфиденциальной информации. Конфигурации по умолчанию также могут оставлять сайты уязвимыми, например за счёт слишком подробных сообщений об ошибках.
Ошибочный дизайн и поведение приложения. Например, если веб-сайт возвращает различные ответы при разных состояниях ошибок, это может позволить злоумышленникам перебирать конфиденциальные данные, такие как действительные учётные данные пользователей.
Каково влияние уязвимостей раскрытия информации?
Уязвимости раскрытия информации могут оказывать как прямое, так и косвенное влияние в зависимости от назначения веб-сайта и, следовательно, от того, какую информацию способен получить злоумышленник. В некоторых случаях сам по себе факт раскрытия конфиденциальной информации может иметь серьёзные последствия для пострадавших сторон. Например, утечка интернет-магазином реквизитов банковских карт своих клиентов, скорее всего, повлечёт тяжёлые последствия.
С другой стороны, утечка технической информации, такой как структура каталогов или используемые сторонние фреймворки, может иметь незначительное или вовсе отсутствующее прямое воздействие. Однако в дурных руках это может оказаться ключевой информацией, необходимой для построения множества других эксплойтов. В этом случае степень критичности зависит от того, что злоумышленник способен сделать с этой информацией.
Как оценивать критичность уязвимостей раскрытия информации
Хотя конечное воздействие потенциально может быть очень серьёзным, только при определённых обстоятельствах раскрытие информации само по себе является проблемой высокой критичности. В ходе тестирования, в частности, раскрытие технической информации часто представляет интерес лишь в том случае, если вы способны продемонстрировать, как злоумышленник может причинить вред, используя её.
Например, знание того, что веб-сайт использует определённую версию фреймворка, имеет ограниченную ценность, если эта версия полностью пропатчена. Однако эта информация становится значимой, когда сайт использует старую версию, содержащую известную уязвимость. В таком случае проведение разрушительной атаки может быть столь же простым, как применение публично задокументированного эксплойта.
Важно проявлять здравый смысл, когда вы обнаруживаете утечку потенциально конфиденциальной информации. Небольшие технические детали, вероятно, можно обнаружить множеством способов на многих из тестируемых вами сайтов. Поэтому основной акцент следует делать на воздействии и эксплуатируемости утёкшей информации, а не просто на факте наличия раскрытия информации как самостоятельной проблемы. Очевидное исключение — когда утёкшие сведения настолько чувствительны, что заслуживают внимания сами по себе.
Эксплуатация раскрытия информации
Мы собрали ещё несколько практических рекомендаций, которые помогут вам выявлять и эксплуатировать такие уязвимости. Вы также можете попрактиковаться в этих техниках, используя наши интерактивные лабораторные задания.
Как предотвратить уязвимости раскрытия информации
Полностью предотвратить раскрытие информации сложно из-за огромного разнообразия способов, которыми оно может происходить. Тем не менее существуют общие наилучшие практики, которых вы можете придерживаться, чтобы минимизировать риск появления подобных уязвимостей на ваших сайтах.
Убедитесь, что все, кто участвует в создании веб-сайта, полностью осведомлены о том, какая информация считается конфиденциальной. Порой кажущаяся безобидной информация может оказаться куда более полезной для злоумышленника, чем люди предполагают. Акцентирование этих рисков поможет обеспечить в вашей организации более безопасное обращение с конфиденциальной информацией в целом.
Проводите аудит любого кода на предмет возможного раскрытия информации в рамках процессов QA или сборки. Некоторые связанные задачи относительно легко автоматизировать, например удаление комментариев разработчиков.
По возможности используйте обобщённые сообщения об ошибках. Не давайте злоумышленникам лишних подсказок о поведении приложения.
Дважды проверьте, что любые функции отладки и диагностики отключены в продуктивной среде.
Убедитесь, что вы полностью понимаете параметры конфигурации и последствия для безопасности любых сторонних технологий, которые вы внедряете. Найдите время, чтобы изучить и отключить функции и настройки, которые вам на самом деле не нужны.
Last updated