From 78a592a9e57951af592920b954b84e268773e749 Mon Sep 17 00:00:00 2001 From: Tobias Eidelpes Date: Sat, 15 Jan 2022 11:22:15 +0100 Subject: [PATCH] Change formatting --- project2/report2.pdf | Bin 139858 -> 139810 bytes project2/report2.tex | 24 +++++++++++------------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/project2/report2.pdf b/project2/report2.pdf index 2e607521abee280c77a79bf66fa4e2048ecf0b8b..b78c8f47848a4782f1b4ec3430b139a7c7af61e6 100644 GIT binary patch delta 12138 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
yWawv&!++xGkFAHAwKc(XIuXSjE*T17)J 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 k!{qROV diff --git a/project2/report2.tex b/project2/report2.tex index bb8b6d8..8ab2e92 100644 --- a/project2/report2.tex +++ b/project2/report2.tex @@ -173,7 +173,7 @@ is aborted. In this challenge we were given some form of a gambling contract, which promises 10 times the ether, with which user participates. The idea is, a user submits a number along with some ether and a random number is generated with the help of a method. User's number and randomly generated number are added together and if the result is exactly 42, then user earns 10 times the ether.(if the 10 times the participant's ether value is bigger than the contract balance, then contract sends all the balance it has.) Now let's take a look at the method, which generates the random number: \begin{minted}[frame=lines,framesep=2mm,bgcolor=LightGray,fontsize=\footnotesize,linenos,breaklines]{solidity} -function PRNG(address sender) private view returns(uint8){ +function PRNG(address sender) private view returns(uint8) { // Totally "awesome" PRNG //return uint8(keccak256(abi.encodePacked(sender, block.coinbase, now, big_secret))); return uint8(uint(keccak256(abi.encodePacked(sender, block.coinbase, now, big_secret)))); @@ -188,26 +188,25 @@ Since blockchain is a deterministic data structure, anyone can produce the outco \end{itemize} It seems like out of all parameters used, all of them except \textbf{big\_secret} variable can be known, because \textbf{big\_secret} is a private variable, right? -\\ \\ + What is stored on public blockchains, whether with public or private modifiers, are still accessible by anyone, because Ethereum Virtual Machine saves smart contract data in "slots" in the order of the variables declared and anyone with an access to web3 can inspect the data in these slots, if they know the address of the contract. In conclusion, using private modifier only prohibits the access of other contracts to the private variables or functions. With this knowledge, we can start the first step of our exploit, which is retrieving the value of the \textbf{big\_secret}: -\\ \\ \\ \\ \begin{minted}[frame=lines,framesep=2mm,bgcolor=LightGray,fontsize=\footnotesize,linenos,breaklines]{solidity} //pragma solidity ^0.4.12; pragma solidity ^0.5.4; -contract SatoshiFailDice{ +contract SatoshiFailDice { // Hint: use web3.toInt() when converting bytes to soldity uint - else values may not match uint private big_secret; address student; address private owner; -... + ... +} \end{minted} Now we can see above that the variable we are looking for is declared first, meaning that it has to be stored in the "slot 0". By using geth console we can learn what's stored in the "slot 0" of this contract: \begin{minted}[frame=lines,framesep=2mm,bgcolor=LightGray,fontsize=\footnotesize,linenos,breaklines]{javascript} // Assume failDiceContractAddress is already initialized. eth.getStorageAt(failDiceContractAddress, 0); // Returned value is unique to every student, but let's assume the return value is "0xc0343f9c49df15c65b456c551da8926a7841ef9ad444edb606b097af9591802d" \end{minted} - After completing this step, we now know all the parameters that is used in creating a random number. Now we can write a malicious contract that can generate the same random number, which will be generated by the contract in a specific block, remove this number from 42 to find out which number to submit as our participation number: \begin{minted}[frame=lines,framesep=2mm,bgcolor=LightGray,fontsize=\footnotesize,linenos,breaklines]{solidity} @@ -260,7 +259,6 @@ We will call the pwn function to start the exploit. This function will require a maliciousFailDiceContractInstance.pwn({from:student, value: web3.toWei(4, 'ether')}); // call pwn function maliciousFailDiceContractInstance.withdraw({from:student}); // withdraw the malicious contract balance \end{minted} - Conclusion is that do not use private variables for the purpose of hiding them from anyone. Private modifiers should be used for the cases where we do not want other contracts to use or access the variables or functions. Since Solidity contracts are deterministic, there is no true random number generation possible using only Solidity contract code. Though with the use of oracle services such as Chainlink, one can retrieve generate a random number outside of the blockchain and bring this data into the blockchain. \section{Not A Wallet} @@ -268,9 +266,9 @@ In this challenge we were expected to exploit a wallet contract and drain its fu \begin{minted}[frame=lines,framesep=2mm,bgcolor=LightGray,fontsize=\footnotesize,linenos,breaklines]{solidity} function removeOwner(address oldowner) public rightStudent { - require(owners[msg.sender] = true); - owners[oldowner] = false; - } + require(owners[msg.sender] = true); + owners[oldowner] = false; +} \end{minted} The writer of this contract wanted to check if the message sender is an owner, but instead of using the equals operator (==), he/she used assignment operator (=), which ends up making the sender of the message an owner by assigning true value to the sender address key in owners mapping. To exploit this contract and drain its funds, as student, its enough to first call the removeOwner method with the owner address as parameter and then withdraw function from the geth console: @@ -286,9 +284,9 @@ walletContractInstance.withdraw(web3.toWei(10,'ether'), {from:studentAddress}); This bug seems to be caused by a typo and therefore could have been avoided if the function looked like following: \begin{minted}[frame=lines,framesep=2mm,bgcolor=LightGray,fontsize=\footnotesize,linenos,breaklines]{solidity} function removeOwner(address oldowner) public rightStudent { - require(owners[msg.sender] == true); - owners[oldowner] = false; - } + require(owners[msg.sender] == true); + owners[oldowner] = false; +} \end{minted} \section*{Work distribution}