Возможность подмены URL
Критичность: СРЕДНИЙ | |
Способ обнаружения: IAST |
Описание
Уязвимость позволяет злоумышленнику контролировать URL в экземпляре класса java.net.URL
. В зависимости от способов применения URL эта уязвимость может использоваться в различных векторах атак.
Уязвимость присутствует, если экземпляр класса java.net.URL
создаётся на основе строки, полученной из недоверенного источника.
Например, уязвимое приложение может использовать такой код:
if("https".equals(uri.getScheme()) && "vuln.app.pkg".equals(uri.getHost())) {
String path = uri.getPath();
if("/login".equals(path)) {
String urlStr = uri.getQueryParameter("url");
if(urlStr != null) {
try {
URL url = new URL(urlStr);
/* .. */
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
finish();
}
}
Рекомендации
-
Проводить валидацию URL:
-
Разрешать доступ только к ресурсам компании, т. е. поддерживать «белый список» URL-адресов и сверять с ним создаваемый экземпляр класса URL.
-
Разрешать доступ только к определённым origin, т. е проверять схему и домен URL.
-
-
Сформированный URL также нужно проверять перед непосредственным использованием.
List<String> whiteHosts = Arrays.asList("stackoverflow.com", "stackexchange.com", "google.com"); public boolean isValid(String url) { String host = Uri.parse(url).getHost(); if(whiteHosts.contains(host) { return true; } return false; }