PVS-Studio.com logo
>
>
>
V5323. OWASP. Potentially tainted data …


V5323. OWASP. Potentially tainted data is used to define 'Access-Control-Allow-Origin' header.

Анализатор обнаружил небезопасную конфигурацию Cross-origin resource sharing (CORS). Значение заголовка ответа сервера Access-Control-Allow-Origin формируется на основе непроверенных данных извне.

Если значение заголовка Access-Control-Allow-Origin конфигурируется на основе данных извне, которые никак не проверяются, то это небезопасно и, в зависимости от обстоятельств, чревато негативными последствиями разной степени серьёзности. Сайты злоумышленников смогут получать доступ к ресурсам вашей страницы, а при особых обстоятельствах возможно раскрытие конфиденциальной информации.

Уязвимости такого типа относятся к категории рисков OWASP Top 10 Application Security Risks 2021:

Пример небезопасной конфигурации:

@GetMapping("/test")
public ResponseEntity<?> getExample(@RequestParam("origin") String origin) {
  var httpHeaders = new HttpHeaders();
  httpHeaders.add("Access-Control-Allow-Origin", origin); // <=

  return new ResponseEntity<>("ok", httpHeaders, HttpStatus.ACCEPTED);
}

Чтобы исключить риски, необходимо проверять, соответствуют ли данные извне значениям из "белого листа".

Исправленный пример:

private static final List<String> ALLOWED_ORIGINS = List.of(
        "https://first-allowed-domain.com",
        "https://second-allowed-domain.com"
);

@GetMapping("/test")
public ResponseEntity<?> getExample(@RequestParam("origin") String origin) {
  var httpHeaders = new HttpHeaders();
  if (ALLOWED_ORIGINS.contains(origin)) {
      httpHeaders.add("Access-Control-Allow-Origin", origin);
  }
  // ....
}

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.).

Данная диагностика классифицируется как: