Resumo

  • Alguns clientes repetiam uma negociação fracassada com versões cada vez mais antigas. Um atacante capaz de bloquear as primeiras tentativas passava a influenciar o próximo ClientHello.
  • A recuperação de dados exigia ainda SSL 3.0 CBC, posição ativa no caminho, pedidos repetidos com o segredo e alteração de registros. O artigo original estimou 256 pedidos por byte recuperado.
  • TLS_FALLBACK_SCSV não era uma cifra: declarava o recuo e permitia que o servidor rejeitasse localmente uma versão abaixo da maior que ele mantinha habilitada.

A negociação normal permitia ao cliente oferecer TLS 1.2 e ao servidor escolher a melhor versão comum. O resultado ficava protegido pelo handshake. A rota paralela nasceu para contornar servidores e middleboxes que quebravam ao receber mensagens mais novas.

Nessa rota, silêncio virava descrição de capacidade. Depois de uma falha, o cliente reduzia a versão máxima e tentava outra vez. Um intermediário ativo podia derrubar as tentativas modernas até que o próprio cliente se limitasse ao SSL 3.0. Não era necessário quebrar o TLS 1.2; bastava fazê-lo parecer incompatível.

O rebaixamento abria acesso a uma fraqueza diferente. No CBC do SSL 3.0, bytes arbitrários de padding não recebiam verificação determinística completa pelo MAC. O ataque Web descrito pelos pesquisadores fazia o navegador emitir pedidos HTTPS com cookie, alinhava o byte desejado ao fim de um bloco, trocava o bloco final e observava se o servidor aceitava o registro alterado.

Sob essas condições, a aceitação ocorria em média uma vez a cada 256 tentativas. Portanto, 256 pedidos por byte é uma expectativa, não um prazo nem uma taxa universal. O cenário também precisava de adversário no caminho, controle da forma do pedido, sessão CBC e repetição. Suporte a SSL 3.0 sozinho não revelava o cookie.

Desabilitar SSL 3.0 eliminava o caminho. Quando dependências legadas impediam o corte imediato, era preciso sinalizar que a oferta menor era uma repetição e deixar o servidor testar se ela fazia sentido.

RFC 7507 definiu {0x56,0x00} para esse fim. O valor aparece na lista de suites, mas nunca pode ser escolhido como algoritmo. Se o servidor suporta uma versão superior à anunciada no recuo, responde com o alerta fatal inappropriate_fallback(86).

É uma regra pequena e local. O cliente declara contexto; o servidor compara com sua configuração efetiva. O alerta, porém, não prova ataque, pois falhas comuns de rede também podem provocar o recuo. E SCSV não substitui a negociação correta nem conserta um endpoint limitado ao SSL 3.0.

OpenSSL incluiu suporte em 1.0.1j, 1.0.0o e 0.9.8zc. RFC 7568 proibiu SSL 3.0. RFC 8996 depois aposentou TLS 1.0 e 1.1 e tornou RFC 7507 obsoleto, já que TLS 1.3 usa sentinelas em ServerHello.Random.

Uma ponte de migração é saudável quando torna a exceção visível e também permite que ela desapareça.