Skip to content

Liveness Vulnerability in AggregateQC Creation due to Unverified Message Signatures #227

@sunwoo383838

Description

@sunwoo383838

Hello,

I am currently using this project to implement a new HotStuff-family consensus algorithm based on my theoretical work. During the implementation, I came across a different potential vulnerability from my previous reports that could severely impact liveness, which I've detailed below.

Description

A critical liveness vulnerability has been identified in the CreateAggregateQC function. The current implementation is susceptible to a denial-of-service (DoS) attack orchestrated by a single Byzantine node, which can stall the consensus process by poisoning an AggregateQC with an invalid MsgSignature.

The Problem

The CreateAggregateQC function collects and combines MsgSignature fields from multiple TimeoutMsg payloads without individually verifying each signature's validity against its corresponding Quorum Certificate (QC) within the same message. It blindly trusts that each received MsgSignature is valid before aggregation.

Steps to Reproduce

  1. A Byzantine replica sends a TimeoutMsg to the current leader.
  2. This message contains a valid view signature but has an intentionally invalid MsgSignature.
  3. The leader calls CreateAggregateQC, which trustingly includes the invalid partial signature in the aggregation process.
  4. The leader proposes this new AggregateQC containing the poisoned aggregate signature to the network.
  5. Honest replicas receive the AggregateQC and call VerifyAggregateQC.
  6. The verification fails because the aggregate signature is invalid due to the inclusion of the single forged partial signature.
  7. The consensus process stalls as no valid AggregateQC can be formed.

Impact

A single Byzantine node can prevent the formation of a valid AggregateQC for a given view by submitting a single TimeoutMsg with an invalid MsgSignature. This forces honest nodes to reject the proposed AggregateQC, effectively stalling consensus progress and potentially leading to a persistent liveness failure if the attacker continues this behavior in subsequent views.

Recommendation

To mitigate this vulnerability, it is crucial to verify each individual MsgSignature before it is included in the aggregate signature.

The CreateAggregateQC function should be modified to iterate through all incoming TimeoutMsgs and validate that the MsgSignature is a valid signature for the QC contained in that same message. Only signatures that pass this verification should be combined to create the final AggregateQC.

By implementing this change, the system can ensure that only valid partial signatures contribute to the AggregateQC, neutralizing the described attack vector.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions