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);
}
// ....
}
Данная диагностика классифицируется как: