GivingThanks

First Flight #28
Beginner FriendlyFoundry
100 EXP
View results
Submission Details
Severity: medium
Invalid

Misuse of `abi.encodePacked` Leading to Hash Collisions

Root Cause and Impact

  • Root Cause: Using abi.encodePacked with dynamic types can cause data collisions, especially when concatenated for hashing or encoding.

  • Impact: Potential for hash collisions, leading to incorrect token URIs or vulnerabilities if used in security-critical contexts.

Vulnerability Details

  • Code Snippet:

    string memory json = string(
    abi.encodePacked(
    '{"donor":"',
    Strings.toHexString(uint160(donor), 20),
    '","date":"',
    Strings.toString(date),
    '","amount":"',
    Strings.toString(amount),
    '"}'
    )
    );
    • Issue: abi.encodePacked concatenates data without padding, risking collisions.

    • Consequence: May result in incorrect or maliciously crafted metadata.

Recommendations

  • Use abi.encode Instead:

    string memory json = string(
    abi.encode(
    '{"donor":"',
    Strings.toHexString(uint160(donor), 20),
    '","date":"',
    Strings.toString(date),
    '","amount":"',
    Strings.toString(amount),
    '"}'
    )
    );
  • Alternatively, Use String Concatenation Functions:

    • Use Solidity's string concatenation or helper libraries for safer operations.

Updates

Lead Judging Commences

n0kto Lead Judge 12 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.