As versões do Lightning Development Kit anteriores à v0.2.7 e à v0.1.13 expunham algumas aplicações Bitcoin Lightning a um ataque de reconexão que podia transformar um pagamento reencaminhado numa perda. Um par malicioso do canal podia acusar a receção de uma atualização, reconectar-se e afirmar falsamente que nunca a tinha recebido. Antes da correção, o LDK podia assinar uma transação de compromisso em conflito sem a registar no channel monitor.
Porque é importante
O ataque visava o processo de gestão de estado por trás dos canais Lightning. Após a alegação falsa na reconexão, o par malicioso podia confirmar a transação em conflito na blockchain do Bitcoin e permitir que o pagamento fosse liquidado junto do próximo destinatário. Podia depois reclamar o contrato de pagamento recebido quando este expirava, deixando a aplicação de reencaminhamento no prejuízo, apesar de conhecer o segredo de pagamento normalmente usado para reivindicar os fundos.
O comportamento corrigido permite a retransmissão apenas enquanto o reconhecimento do par estiver pendente. Se um par afirmar que uma atualização já reconhecida não foi recebida, o LDK agora força o fecho do canal.
Os programadores do LDK também corrigiram um percurso de roubo separado na v0.2.7, envolvendo pagamentos just-in-time do LSPS2. Um pagamento intercetado podia declarar um valor incorreto, levando um serviço de liquidez a abrir um canal e reencaminhar mais Bitcoin do que o pagamento recebido financiava. Os programadores também têm de contabilizar os contratos de pagamento pendentes criados por versões anteriores, porque os respetivos valores podem não ter sido validados.
Impacto no mercado
A exposição imediata é operacional e não representa uma falha do protocolo Bitcoin. O LDK é compilado nas aplicações que o utilizam, pelo que os programadores de carteiras e pagamentos têm de integrar o código da biblioteca corrigida no software já em produção. A versão v0.2.7 resolve o problema de reconexão no ramo 0.2 e a verificação de valores do LSPS2, enquanto a v0.1.13 traz a correção partilhada de reconexão para o ramo 0.1.
As equipas que operam infraestruturas Lightning devem rever as versões do LDK em produção, os canais abertos e os contratos LSPS2 pendentes. O Core Lightning é uma implementação separada e não é a biblioteca afetada neste relatório.
Perguntas frequentes
-
Que vulnerabilidade do Lightning as versões corrigidas do LDK resolveram?
Um par malicioso do canal podia reconectar-se e afirmar falsamente que tinha perdido uma atualização já reconhecida. Antes da correção, o LDK podia assinar uma transação de compromisso em conflito que não era registada pelo channel monitor.
-
Que versões do LDK corrigem a vulnerabilidade de reconexão?
O LDK v0.2.7 corrige o problema no ramo 0.2, enquanto a v0.1.13 traz a correção partilhada de reconexão para o ramo 0.1.
-
Como podia o ataque de reconexão causar uma perda de Bitcoin?
O atacante podia confirmar uma transação em conflito no Bitcoin, deixar o pagamento reencaminhado ser liquidado junto do próximo destinatário e depois reclamar o contrato de pagamento recebido quando este expirava.
-
Que problema adicional o LDK v0.2.7 resolve?
A versão 0.2.7 corrige também um problema de pagamentos just-in-time do LSPS2 em que um valor de pagamento declarado incorretamente podia levar um serviço de liquidez a reencaminhar mais Bitcoin do que aquele que recebeu.
-
O que devem fazer os programadores de aplicações Lightning a seguir?
Os programadores devem integrar o código corrigido do LDK nas aplicações em produção e rever os contratos de pagamento LSPS2 pendentes criados por versões anteriores, procurando valores não validados.