V5327. OWASP. Possible regex injection. Potentially tainted data is used to create regular expression
Анализатор обнаружил, что пришедшие извне данные используются в качестве регулярного выражения и не подвергаются проверке. Это делает приложение уязвимым к отказу в обслуживании (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";
}
}