Os nós eram potencialmente vulneráveis a um buffer overflow por servidores SOCKS maliciosos. Uma correção foi lançada em 6 de novembro de 2017 no Bitcoin Core versão 0.15.1.
CVE-2017-18350 é uma vulnerabilidade de buffer overflow que permite que um servidor proxy SOCKS malicioso substitua a pilha de programas em sistemas com um char
tipo (incluindo PCs x86 comuns de 32 e 64 bits).
A vulnerabilidade foi introduzida em 60a87bce873 (suporte SOCKS5) e lançado pela primeira vez no Bitcoin Core v0.7.0rc1 em 27 de agosto de 2012. Uma correção foi ocultada em d90a00eabed (“Melhorar e documentar o código SOCKS”) lançado em v0.15.1, 6 de novembro de 2017.
Para ficar vulnerável, o nó deve ser configurado para usar esse proxy malicioso em primeiro lugar. Observe que usando qualquer proxy em uma rede insegura (como a Internet) é potencialmente uma vulnerabilidade, pois a conexão pode ser interceptada para esse fim.
Após uma solicitação de conexão do nó, o proxy malicioso responderia com uma confirmação de um nome de domínio de destino diferente daquele solicitado. Normalmente, esse reconhecimento é totalmente ignorado, mas se o comprimento usar o bit alto (ou seja, um comprimento de 128 a 255 inclusive), ele será interpretado pelas versões vulneráveis como um número negativo. Quando o número negativo é passado para a chamada do sistema recv() para ler o nome de domínio, ele é convertido novamente em um número positivo/não assinado, mas em um tamanho muito maior (normalmente 32 bits), resultando em uma leitura efetivamente infinita. e além do buffer de pilha fictício de 256 bytes.
Para corrigir esta vulnerabilidade, o buffer fictício foi alterado para um tipo de dados explicitamente não assinado, evitando a conversão de/para um número negativo.
O crédito vai para práticorápido por descobrir e fornecer a correção inicial para a vulnerabilidade, e Wladimir J. van der Laan por uma versão disfarçada da correção, bem como pela limpeza geral do código em risco.
- 01/04/2012: Vulnerabilidade introduzida no PR #1141.
- 08/05/2012: Vulnerabilidade mesclada ao repositório mestre git.
- 27/08/2012: Vulnerabilidade publicada na v0.7.0rc1.
- 17/09/2012: Vulnerabilidade lançada na v0.7.0.
- …
- 21/09/2017: PracticalSwift divulga vulnerabilidade à equipe de segurança.
- 23/09/2017: Wladimir abre PR #11397 para corrigir discretamente a vulnerabilidade.
- 27/09/2017: Correção mesclada ao repositório git mestre.
- 18/10/2017: Correção mesclada no repositório git 0,15.
- 04/11/2017: Correção publicada na v0.15.1rc1.
- 09/11/2017: Correção lançada na v0.15.1.
- …
- 22/06/2019: Existência de vulnerabilidade divulgada para bitcoin-dev ML.
- 08/11/2019: Divulgação de detalhes de vulnerabilidade para bitcoin-dev ML.