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