
PoC cobrindo o problema de manipulação do tempo de transação (CVE-2024-45244) no blockchain Hyperledger Fabric.
HLF_TxTime_spoofing - uma Prova de Conceito (PoC) que aborda o problema da manipulação do tempo de transação (usando GetTxTimestamp() ou GetHistoryForKey()) na blockchain Hyperledger Fabric. Testado nas versões v2.5.5 e v3.0.0-beta
O projeto consiste em várias partes:
Em todos os casos (ou seja, chaincodes), o depósito equivale a 20% ao ano.
Funções adicionais para entender o funcionamento da lógica de negócio: CalcDividents() - retorna o dividendo acumulado para um determinado número de dias e o valor do depósito inicial subtractTimestamp() - retorna a diferença entre o tempo atual e o tempo do depósito inicial
Chame Stake_insecure() para adicionar um depósito com o valor inicial. Chame CheckDividents_insecure() para verificar se o valor do depósito não mudou. Altere o horário local no cliente e chame CheckDividents_insecure() novamente.
Ataque financeiro: avançar o tempo em 1 ano permitiu obter 20% de juros anuais.
Ataque financeiro bem-sucedido
Da mesma forma, verificamos que o tempo da transação pode ser manipulado em GetHistoryForKey().
Nesta variante do chaincode, verificamos o tempo da transação em relação ao tempo recebido do servidor NTP (Network Time Protocol) (usando o pacote ntp client). Cada chaincode possui seu próprio endereço de servidor NTP (ou seja, pacotes de chaincode diferentes) para distribuição. Em caso de desvio de tempo, um erro será exibido: "horário incorreto". Observe que os dados de tráfego NTP podem ser falsificados (os dados são transmitidos em texto simples).
Ataque financeiro mal-sucedido
Nesta variante do chaincode, verificamos o tempo da transação em relação ao tempo recebido do servidor NTS (Network Time Security) (usando o pacote nts client). Cada chaincode possui seu próprio endereço de servidor NTS (ou seja, pacotes de chaincode diferentes) para distribuição. Em caso de desvio de tempo, um erro será exibido: "horário incorreto".
Ataque financeiro mal-sucedido
Nesta variante do chaincode, verificamos o tempo da transação em relação ao tempo local (ou seja, o tempo no nó peer). Em caso de desvio de tempo, um erro será exibido: "horário incorreto". Observe que a sincronização correta do horário é necessária em todos os nós peers.
Ataque financeiro mal-sucedido
hlf-time-oracle é um chaincode para a blockchain Hyperledger Fabric que fornece tempo preciso para outros chaincodes. hlf-time-oracle é baseado no pacote ntp e no pacote nts. Resolvendo assim o problema de segurança associado à possível manipulação do tempo de transação pelo cliente da blockchain. O chaincode fornece as funções GetTimeNtp() e GetTimeNts(). Chamar essas funções cria uma chamada aos servidores NTP (Network Time Protocol) e NTS (Network Time Security). O tempo recebido de qualquer um desses servidores pode ser usado para verificar a correção do tempo da transação definido no lado do cliente. Desenvolvedores de chaincodes para blockchain podem usar hlf-time-oracle em vez de escrever código independente para interagir com servidores NTP e NTS. hlf-time-oracle não salva nenhum dado na blockchain durante sua operação.