Анализатор обнаружил, что пришедшие извне данные используются в качестве регулярного выражения и не подвергаются проверке. Это делает приложение уязвимым к отказу в обслуживании (DoS).
Уязвимости такого типа относятся к категории рисков OWASP Top 10 Application Security Risks 2021:
Если код выглядит таким образом:
@GetMapping("/check") public String checkInput(@RequestParam("input") String input) { var match = vulnerableString.matches(input); // <= if (match) { return "Valid input"; } else { return "Invalid input"; } }
То злоумышленник сможет сделать неэффективное регулярное выражение, замедляющее работу приложения. В худшем случае, если атакующий сможет подобрать Evil Regex — регулярное выражение, из-за которого выполнение зависнет, — это приведёт к отказу в обслуживании. Такая атака называется ReDoS.
Чтобы защититься от таких атак, лучше всего экранировать ввод с помощью Pattern.quote
:
@GetMapping("/check") public String checkInput(@RequestParam("input") String input) { var regex = Pattern.quote(input); var match = vulnerableString.matches(input); if (match) { return "Valid input"; } else { return "Invalid input"; } }
Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.). |
Данная диагностика классифицируется как: