# V5313. OWASP. Do not use old versions of SSL/TLS protocols as it may cause security issues.

Анализатор обнаружил использование в коде устаревших версий протоколов SSL/TLS. Это может сделать приложение уязвимым к таким атакам, как man-in-the-middle, BEAST, и т.п.

Проблемы, связанные с применением устаревших протоколов, могут быть отнесены к двум категориям OWASP Top 10 2021:

- A2: Cryptographic Failures
- A7: Identification and Authentication Failures

Рассмотрим пример:

    private void createSocket() {
        SSLContext sslContext;
        try {
            sslContext = SSLContext.getInstance("TLSv1");    // <=
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }

        try {
            sslContext.init(null, null, new SecureRandom());
            var socketFactory = sslContext.getSocketFactory();
            var socket = (SSLSocket) socketFactory.createSocket();

            // ....

            socket.close();
        } catch (KeyManagementException | IOException e) {
            throw new RuntimeException(e);
        }
    }

В указанном фрагменте используется значение `TLSv1`, представляющее протокол TLS версии 1.0. Данная версия является устаревшей и не рекомендуется к использованию, так как TLS 1.0 уязвим к ряду атак, в числе которых упоминавшаяся ранее BEAST.

Рекомендуется использовать более новые версии протоколов, например, TLS 1.2:

    private void createSocket() {
        SSLContext sslContext;
        try {
            sslContext = SSLContext.getInstance("TLSv1.2");
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }

        try {
            sslContext.init(null, null, new SecureRandom());
            var socketFactory = sslContext.getSocketFactory();
            var socket = (SSLSocket) socketFactory.createSocket();

            // ....

            socket.close();
        } catch (KeyManagementException | IOException e) {
            throw new RuntimeException(e);
        }
    }

Версии протоколов, являющиеся более старыми, чем TLS 1.2, не рекомендуются к использованию из-за возможных проблем с безопасностью. К таким протоколам относятся SSL версий 2.0 и 3.0, а также TLS версий 1.0 и 1.1.

Как правило, наиболее подходящим значением является `TLS`, представляющее выбор протокола передачи данных платформе. Если по каким-либо причинам данное значение не подходит, то рекомендуется задавать самую новую версию из доступных.

## Дополнительные ссылки

- Transport Layer Security (TLS) Protocol Overview
- Testing for Weak SSL TLS Ciphers Insufficient Transport Layer Protection
- Transport Layer Security Cheat Sheet
- Описание атаки Man-in-the-middle
- Описание атаки Man-in-the-Browser

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки некорректного использования системных процедур и интерфейсов, связанных с обеспечением информационной безопасности (шифрования, разграничения доступа и пр.).

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

CWE-327 OWASP-9.1.3 CERT-MSC61-J