
PoC que cubre el problema de la manipulación del tiempo de transacción (CVE-2024-45244) en la blockchain de Hyperledger Fabric.
HLF_TxTime_spoofing: una PoC que cubre el problema de la manipulación de la hora de las transacciones (usando GetTxTimestamp() o GetHistoryForKey()) en la blockchain Hyperledger Fabric. Probado en v2.5.5 y v3.0.0-beta.
El proyecto consta de varias partes:
Funciones adicionales para comprender el funcionamiento de la lógica de negocio: CalcDividents(): devuelve el dividendo acumulado para un número determinado de días y el importe del depósito inicial. subtractTimestamp(): devuelve la diferencia entre la hora actual y la hora del depósito inicial.
Llame a Stake_insecure() para añadir un depósito con el importe inicial. Llame a CheckDividents_insecure() para asegurarse de que el importe del depósito no ha cambiado. Cambie la hora local en el cliente y vuelva a llamar a CheckDividents_insecure().
Ataque financiero: adelantar la hora un año le permitió obtener un interés anual del 20 %.
Ataque financiero exitoso
De la misma manera, comprobamos que la hora de la transacción puede manipularse en GetHistoryForKey().
En esta variante del chaincode, comprobamos la hora de la transacción contra la hora recibida del servidor NTP (Network Time Protocol) (usando el paquete de cliente ntp). Cada chaincode tiene su propia dirección de servidor NTP (es decir, diferentes paquetes de chaincode) para su distribución. En caso de desviación horaria, se mostrará un error: "wrong time". Tenga en cuenta que los datos de tráfico NTP pueden ser suplantados (los datos se transmiten en texto plano).
Ataque financiero fallido
En esta variante del chaincode, comprobamos la hora de la transacción contra la hora recibida del servidor NTS (Network Time Security) (usando el paquete de cliente nts). Cada chaincode tiene su propia dirección de servidor NTS (es decir, diferentes paquetes de chaincode) para su distribución. En caso de desviación horaria, se mostrará un error: "wrong time".
Ataque financiero fallido
En esta variante del chaincode, comprobamos la hora de la transacción contra la hora local (es decir, la hora en el nodo peer). En caso de desviación horaria, se mostrará un error: "wrong time". Tenga en cuenta que se requiere una sincronización horaria correcta en todos los nodos peer.
Ataque financiero fallido
hlf-time-oracle es un chaincode para blockchain Hyperledger Fabric que proporciona la hora exacta a otros chaincodes. hlf-time-oracle se basa en el paquete ntp y en el paquete nts. De este modo, resuelve el problema de seguridad asociado a la posible manipulación de la hora de las transacciones por parte del cliente de la blockchain. El chaincode proporciona las funciones GetTimeNtp() y GetTimeNts(). La llamada a estas funciones crea una llamada a los servidores NTP (Network Time Protocol) y NTS (Network Time Security). La hora recibida de cualquiera de estos servidores puede utilizarse para verificar la corrección de la hora de la transacción definida en el lado del cliente. Los desarrolladores de chaincodes para blockchain pueden usar hlf-time-oracle en lugar de escribir código de forma independiente para interactuar con los servidores NTP y NTS. hlf-time-oracle no guarda ningún dato en la blockchain durante su funcionamiento.