Перейти к содержанию

Возможность подмены 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();
}
}

Рекомендации

  1. Проводить валидацию URL:

    1. Разрешать доступ только к ресурсам компании, т. е. поддерживать «белый список» URL-адресов и сверять с ним создаваемый экземпляр класса URL.

    2. Разрешать доступ только к определённым origin, т. е проверять схему и домен URL.

  2. Сформированный 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;
    }
    

Ссылки

  1. Input Validation - OWASP Cheat Sheet Series

  2. UrlQuerySanitizer | Android Developers

К началу