Explicando o Bug de Memória do Bitcoin Core de Forma Fácil
Explico a vulnerabilidade Script Interpreter Remote Crash (CVE-2024-52911) de forma fácil e como ela afeta a rede do Bitcoin. A CVE foi divulgada publicamente em 5 de maio.

No dia 5 de maio foi divulgada publicamente mais informações sobre uma vulnerabilidade de gravidade alta no código do Bitcoin Core, batizada de Script Interpreter Remote Crash (CVE-2024-52911).
O bug foi encontrado por Cory Fields (theuni, no GitHub) em novembro de 2024 e o patch foi lançado em abril de 2025 na versão 29.0.0 do Bitcoin Core.
No entanto, dados do bitref.com mostram que mais de 32% dos nodes de Bitcoin ainda estão rodando uma versão anterior a v29 — o que significa que ainda estão expostos ao bug.
Foi, segundo Niklas Gögge, o primeiro bug relacionado à segurança de memória no código do Bitcoin Core, escrito em C++. A comunidade do Rust (uma linguagem que resolve diversos problemas de segurança de memória) já está aproveitando o gancho para promover a portabilidade do código.
Mas o que é esse bug, como ele funciona e quais os possíveis vetores de ataque que ele expõe à rede do Bitcoin?
O Que é o Script Interpreter Remote Crash (CVE-2024-52911)
Nodes de Bitcoin são literalmente computadores (ou servidores) rodando o software do Bitcoin (Core ou Knots, majoritariamente), conectados entre si. Juntos, eles foram a rede do Bitcoin.
Estes nodes verificam os blocos e as transações enviadas por mineradores e verificam se estas são válidas. Blocos válidos são armazenados no disco e formam o registro de transações na rede. Os registros são os saldos de BTC em cada carteira.
Quando os nodes recebem um bloco, eles precisam verificar se cada transação é válida de acordo com as regras do protocolo. Para otimizar esse processo, a verificação ocorre através do CScriptCheck.
Podemos pensar nos nodes como um depósito logístico que recebe caminhões (blocos) cheios de pacotes (transações) que precisam ser verificados e armazenados. O gerente deste depósito tem outras funções e contrata uma equipe de funcionários para fazer a verificação dos pacotes enquanto isso (o script check).
Para os funcionários saberem o que precisam fazer, o gerente fornece uma planilha de instruções. Essa planilha é a função PrecomputedTransactionData que armazena uma série de dados pré-computados que ajudam na validação das transações. Toda ação do CScriptCheck (funcionários do depósito) aponta para dados mais detalhados nessa “planilha.”
Além disso, o gerente também contratou um supervisor para controlar esse serviço no depósito. A nível de código, estamos falando do CCheckQueueControl.
Todo este esquema funciona direitinho enquanto o node recebe apenas blocos válidos com transações válidas. O problema, no entanto, existe quando chega um bloco inválido que precisa ser descartado.
Isso ocorre pela forma como a linguagem C++ lida com objetos que precisam ser removidos (destruídos) da memória. A destruição ocorre na ordem inversa em que os objetos foram adcionados a memória.
Em nosso caso, o gerente contratou o supervisor (CCheckControl), depois os funcionários (CScriptCheck), e então forneceu a planilha de dados pré-computados (PrecomputedTransactionData).
Quando o bloco inválido precisa ser descartado, o gerente joga fora a planilha. Agora, tanto os trabalhadores como o supervisor estão sem as instruções de referência, criando uma confusão.
A nível de código, os ponteiros do script check apontam para dados que não existem mais e o node crasha, reiniciando. Se feito intencionalmente, o exploit desta vulnerabilidade cria um ataque de negação de serviço.
Teorias também sugerem que um atacante capacitado poderia executar código de forma remota no servidor afetado (RCE, remote code execution). Em tese, possibilitando, por exemplo, a instalação de um malware ou outros exploits. Esta possibilidade, no entanto, fica dificultada pela forma como o protocolo do Bitcoin lida com dados arbitrários, mas isso é assunto para outro artigo.
Qualquer node rodando software desatualizado (antes da v29) está exposto. Atualizar para uma versão corrigida já resolve o problema e previne que o node crashe.
Confira a versão em vídeo deste artigo.
Espero que tenha ficado claro o que está acontecendo no Bitcoin. Se te ajudou, deixe um like e um comentário e compartilhe com seus amigos para que mais pessoas possam entender o bug.
Obrigado por ler 「 código aberto 」!
Você já pode usar BTC e outras criptomoedas para pagar por IA!
NanoGPT é um agregador de IA pay-per-prompt que aceita pagamentos nativos em crypto e tem um setup focado em privacidade. Dá pra fazer microdepósitos no app (até $1) e escolher entre dezenas de modelos. Eu estou usando ele há anos, desde o lançamento em alpha.
Cadastrar pelo meu link acima te dá desconto vitalício de 5% em todas as suas queries. Teste com valores pequenos primeiro!




