Skip to content

Instantly share code, notes, and snippets.

@lcanady
Created September 15, 2023 21:58
Show Gist options
  • Save lcanady/4676289481a23cd40d4ee4ac2e8e25d9 to your computer and use it in GitHub Desktop.
Save lcanady/4676289481a23cd40d4ee4ac2e8e25d9 to your computer and use it in GitHub Desktop.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"contractName": "BadRNG",
"auditDate": "2023-09-15",
"auditors": ["ChatGPT Auditor", "Solidity Expert"],
"codeExplanation": "The smart contract named 'BadRNG' is a raffle system where participants can enter by sending a certain amount of ether. A winner is then picked pseudo-randomly and awarded the accumulated funds. However, there are certain vulnerabilities associated with this contract.",
"analysis": [
{
"issueType": "Source of Randomness",
"severity": "Critical",
"description": "The contract utilizes the combination of 'block.difficulty' and 'msg.sender' as a seed for the Keccak256 hash function to generate a pseudo-random number. This can be manipulated by miners and is not a safe source of randomness.",
"affectedCode": "keccak256(abi.encodePacked(block.difficulty, msg.sender))",
"codeExample": "uint256 randomWinnerIndex = uint256(keccak256(abi.encodePacked(block.difficulty, msg.sender)));",
"recommendation": "Consider using Chainlink's VRF (Verifiable Random Function) or other off-chain solutions to obtain a truly random number."
},
{
"issueType": "No Restrictions on pickWinner",
"severity": "High",
"description": "The 'pickWinner' function does not have any restrictions on who can call it, which means anyone can call this function and potentially manipulate the outcome.",
"affectedCode": "function pickWinner() external",
"codeExample": "function pickWinner() external {...}",
"recommendation": "Restrict access to the 'pickWinner' function. For example, make it callable only by the contract owner or implement a specific time-based logic."
}
]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment