Включена отладка WebView (remote debugging)
![]() |
Критичность: СРЕДНИЙ |
| Способ обнаружения: DAST, WEBVIEW |
Описание
Вызов WebView.setWebContentsDebuggingEnabled(true) включает удалённую отладку содержимого WebView. После этого к WebView на устройстве можно подключиться с компьютера через chrome://inspect (протокол Chrome DevTools) и инспектировать DOM, cookies, локальное хранилище, сетевые запросы, а также исполнять произвольный JavaScript в контексте страницы. Эта настройка предназначена для разработки, но нередко остаётся включённой в production-сборках.
Важно: метод статический и действует на весь процесс — один вызов setWebContentsDebuggingEnabled(true) делает отлаживаемыми все WebView приложения.
Пример небезопасного кода:
// включено безусловно — остаётся активным в release-сборке
WebView.setWebContentsDebuggingEnabled(true);
Проблема
- Инспекция и изменение содержимого. Через DevTools злоумышленник с доступом к устройству (в том числе по ADB) может просматривать и изменять DOM, перехватывать данные, исполнять JavaScript в контексте приложения.
- Доступ к чувствительным данным. Cookies, токены, локальное хранилище, содержимое форм и сетевой трафик WebView становятся доступны для просмотра.
- Обход клиентской логики и реверс-инжиниринг. Включённая отладка облегчает анализ и обход проверок, выполняемых в веб-части приложения.
Рекомендации
-
Привязывайте включение отладки строго к debug-сборке. Никогда не вызывайте метод с безусловным
true: -
Задавайте флаг централизованно и один раз (например, в
Application.onCreate()), опираясь на тип сборки, чтобы исключить «забытые» включения в отдельных экранах. Поскольку настройка глобальна на процесс, единая точка управления надёжнее разрозненных вызовов. -
В release-сборке метод не должен вызываться с
trueвообще. Не полагайтесь на runtime-условия из внешних источников (конфиги, флаги фич) — значение должно определяться только типом сборки. -
Защитите релиз автоматическими проверками. Добавьте в CI/линтер правило, запрещающее
setWebContentsDebuggingEnabled(true)без обёрткиBuildConfig.DEBUG, и проверяйте итоговый APK/AAB (например, поиском вызова в декомпилированном коде) перед публикацией. -
Используйте обфускацию и анти-отладочные механизмы как дополнительный барьер (проверки root/отладчика), но помните: они не заменяют отключение флага — отладка WebView должна быть выключена в релизе независимо от них.
-
Проверяйте сторонние SDK и гибридные фреймворки. Некоторые библиотеки (рекламные, аналитические, кросс-платформенные движки) включают отладку WebView самостоятельно — убедитесь, что в релизе она отключена и на их стороне.
Ссылки
- https://developer.android.com/reference/android/webkit/WebView#setWebContentsDebuggingEnabled(boolean)
- https://developer.chrome.com/docs/devtools/remote-debugging/webviews/
- https://developer.android.com/privacy-and-security/risks/webview-debuggable-enabled
- https://mas.owasp.org/MASTG/tests/android/MASVS-RESILIENCE/MASTG-TEST-0046/
- https://cwe.mitre.org/data/definitions/489.html
- https://cwe.mitre.org/data/definitions/215.html
