Анализатор обнаружил небезопасную конфигурацию 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 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.). |
Данная диагностика классифицируется как: