# V5327. OWASP. Possible regex injection. Potentially tainted data is used to create regular expression

Анализатор обнаружил, что пришедшие извне данные используются в качестве регулярного выражения и не подвергаются проверке. Это делает приложение уязвимым к отказу в обслуживании (DoS).

Уязвимости такого типа относятся к категории рисков OWASP Top 10 Application Security Risks 2021:

- A3:2021 - Injection.

Если код выглядит таким образом:

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

Данная диагностика классифицируется как:

CWE-1333 CWE-20 CWE-400