ctfwriteup
  • โœ…/home/ret2basic.eth
  • Game Hacking
    • ๐Ÿ‘‘Pwn Adventure 3: Pwnie Island
      • โœ…Prep: Speed Hack
      • โœ…Prep: Infinite Health and Mana (Offline)
      • โœ…Prep: Analyze Network Packets with Wireshark
      • Prep: Build a Proxy in Python
      • โœ…Until the Cows Come Home
      • Unbearable Revenge
      • Pirate's Treasure
    • Cheat Engine Tutorial
      • โœ…Step 1: Setup
      • โœ…Step 2: Scan for "Exact Value"
      • โœ…Step 3: Scan for "Unknown initial value"
      • โœ…Step 4: Scan for float and double
      • โœ…Step 5: Replace instruction
      • Step 6: Pointer scanning
      • Step 7: Code injection
      • Step 8: Multilevel pointers
      • Step 9: Shared code
  • Web3 CTF
    • ๐Ÿ‘‘Remedy CTF 2025 (Todo)
      • Diamond Heist
      • R vs Q
      • Rich Man's Bet
      • Casino Avengers
      • Frozen Voting
      • Lockdown
      • Proof of Thought
      • Maybe it's unnecessary?
      • Et tu, Permit2?
      • Not a very LUCKY TOKEN
      • risc4
      • HealthCheck as a Service
      • Restricted Proxy
      • Unstable Pool
      • Opaze Whisperer
      • "memorable" onlyOwner
      • World of Memecraft
      • Copy/Paste/Deploy
      • Peer-to-peer-to-me
      • Joe's Lending Mirage
      • Tokemak
      • OFAC Executive Order 13337
    • ๐Ÿ‘‘Paradigm CTF 2023 (Todo)
      • Oven
      • Dragon Tyrant
    • Damn Vulnerable DeFi
      • โœ…Unstoppable
      • โœ…Naive Receiver
      • โœ…Truster
      • โœ…Side Entrance
      • โœ…The Rewarder
      • โœ…Selfie
      • โœ…Compromised
      • โœ…Puppet
      • โœ…Puppet V2
      • โœ…Free Rider
      • Backdoor
      • Climber
      • Wallet Mining (Todo)
      • Puppet V3 (Todo)
      • ABI Smuggling (Todo)
    • Milotruck Challs
      • โœ…Greyhats Dollar
      • Escrow
      • Simple AMM Vault
      • Voting Vault
      • โœ…Meta Staking
      • โœ…Gnosis Unsafe
    • Secureum AMAZEX DSS Paris
      • โœ…Operation magic redemption
      • Mission Modern WETH: Rescue the Ether
      • LendEx pool hack
      • Operation Rescue POSI Token!
      • Balloon Vault
      • Safe Yield?
      • โœ…Crystal DAO
      • โœ…Liquidatoooor
    • โœ…Ethernaut
      • โœ…Hello Ethernaut
      • โœ…Fallback
      • โœ…Fallout
      • โœ…Coin Flip
      • โœ…Telephone
      • โœ…Token
      • โœ…Delegation
      • โœ…Force
      • โœ…Vault
      • โœ…King
      • โœ…Re-entrancy
      • โœ…Elevator
      • โœ…Privacy
      • โœ…Gatekeeper One
      • โœ…Gatekeeper Two
      • โœ…Naught Coin
      • โœ…Preservation
      • โœ…Recovery
      • โœ…MagicNumber
      • โœ…Alien Codex
      • โœ…Denial
      • โœ…Shop
      • โœ…DEX
      • โœ…DEX Two
      • โœ…Puzzle Wallet
      • Motorbike
      • DoubleEntryPoint
      • โœ…Good Samaritan
      • Gatekeeper Three
      • Switch
    • โœ…Flashbots MEV-Share CTF
    • โœ…Capture the Ether
      • โœ…Lotteries
      • โœ…Math
      • โœ…Miscellaneous
    • โœ…EVM Puzzles
      • โœ…Puzzle 1
      • โœ…Puzzle 2
      • โœ…Puzzle 3
      • โœ…Puzzle 4
      • โœ…Puzzle 5
      • โœ…Puzzle 6
      • โœ…Puzzle 7
      • โœ…Puzzle 8
      • โœ…Puzzle 9
      • โœ…Puzzle 10
    • โœ…More EVM Puzzles
      • โœ…Puzzle 1
      • โœ…Puzzle 2
      • โœ…Puzzle 3
      • โœ…Puzzle 4
      • โœ…Puzzle 5
      • โœ…Puzzle 6
      • โœ…Puzzle 7
      • โœ…Puzzle 8
      • โœ…Puzzle 9
      • โœ…Puzzle 10
    • โœ…QuillCTF
      • โœ…MetaToken
      • โœ…Temporary Variable
      • KeyCraft
      • โœ…Lottery
      • โœ…Private Club
      • Voting Machine
      • โœ…Predictable NFT
      • โœ…Invest Pool
      • PseudoRandom
      • โœ…Gold NFT
      • Slot Puzzle
      • Moloch's Vault
      • โœ…Donate
      • โœ…WETH-11
      • Panda Token
      • Gate
      • โœ…WETH10
      • โœ…Pelusa
      • โœ…True XOR
      • โœ…Collatz Puzzle
      • โœ…D31eg4t3
      • โœ…Safe NFT
      • โœ…VIP Bank
      • โœ…Confidential Hash
      • โœ…Road Closed
    • โœ…unhacked
      • โœ…reaper
  • RareSkills Puzzles
    • Solidity Exercises
    • Solidity Riddles
    • Yul Puzzles
      • โœ…01 - ReturnBool
      • โœ…02 - SimpleRevert
      • โœ…03 - Return42
      • โœ…04 - RevertWithError
      • โœ…05 - RevertWithSelectorPlusArgs
      • 06 - RevertWithPanic
    • Huff Puzzles
    • Uniswap V2 Puzzles
    • Zero Knowledge Puzzles
  • Web2 CTF
    • Grey Cat CTF 2024
      • โœ…Web Challs
    • pwn.college
      • Introduction
        • What is Computer Systems Security?
      • Program Interaction
        • Linux Command Line
        • ๐Ÿšฉembryoio
      • Program Misuse
        • Privilege Escalation
        • Mitigations
        • ๐Ÿšฉbabysuid
      • Assembly Refresher
        • x86 Assembly
        • ๐Ÿšฉembryoasm
      • Shellcoding
        • Introduction
        • Common Challenges
        • Data Execution Prevention
        • ๐Ÿšฉbabyshell
      • Sandboxing
        • chroot
        • seccomp
        • Escaping seccomp
        • ๐Ÿšฉbabyjail
      • Debugging Refresher
        • x86 Assembly
        • ๐Ÿšฉembryogdb
      • Binary Reverse Engineering
        • Functions and Frames
        • Data Access
        • Static Tools
        • Dynamic Tools
        • Real-world Applications
        • ๐Ÿšฉbabyrev
      • Memory Errors
        • High-Level Problems
        • Smashing the Stack
        • Causes of Corruption
        • Canary
        • ASLR
        • Causes of Disclosure
        • ๐Ÿšฉbabymem
      • Exploitation
        • Introduction
        • Hijacking to Shellcode
        • Side Effects
        • JIT Spray
        • ๐Ÿšฉtoddler1
      • Return Oriented Programming
        • Binary Lego
        • Techniques
        • Complications
        • ๐Ÿšฉbabyrop
      • Dynamic Allocator Misuse
        • What is the Heap?
        • Dangers of the Heap
        • tcache
        • Chunks and Metadata
        • Metadata Corruption
        • ๐Ÿšฉbabyheap
      • Race Conditions
        • Introduction
        • Races in the Filesystem
        • ๐Ÿšฉbabyrace
      • Kernel Security
        • Environment Setup
        • Kernel Modules
        • Privilege Escalation
        • ๐Ÿšฉbabykernel
      • Advanced Exploitation
        • toddler2
    • pwnable.kr
      • fd
      • collision
      • bof
      • flag
      • passcode
      • random
      • input
      • leg
      • mistake
      • shellshock
      • coin1
      • blackjack
      • lotto
      • cmd1
      • cmd2
      • uaf
      • memcpy
      • asm
      • unlink
      • blukat
      • horcruxes
    • ROP Emporium
      • ret2win
      • split
      • callme
      • write4
      • pivot
    • โœ…Jarvis OJ Pwn Xman Series
    • โœ…Jarvis OJ Crypto RSA Series
    • โœ…picoMini by redpwn
      • Binary Exploitation
      • Reverse Engineering
      • Cryptography
      • Web Exploitation
      • Forensics
    • โœ…picoCTF 2021
      • Reverse Engineering
      • Web Exploitation
      • Forensics
    • โœ…picoCTF 2020 Mini-Competition
  • Red Teaming
    • vulnlab
      • Active Directory Chains
        • โœ…Trusted (Easy)
        • Hybrid (Easy)
        • Lustrous (Medium)
        • Reflection (Medium)
        • Intercept (Hard)
      • Red Team Labs
        • Wutai (Medium)
        • Shinra (Hard)
    • Hack The Box
      • AD
        • Intelligence
        • Pivotapi
        • Sharp
        • Monteverde
        • Resolute
        • Endgame: P.O.O.
        • Forest
        • Sauna
        • Active
        • Blackfield
      • โœ…Linux
        • โœ…Safe (Easy)
        • โœ…Delivery (Easy)
        • โœ…TheNotebook (Medium)
        • โœ…Brainfuck (Insane)
    • TCM Windows Privilege Escalation Course
      • โœ…Hack The Box - Chatterbox (Medium)
      • Hack The Box - SecNotes (Medium)
    • โœ…TCM Linux Privilege Escalation Course
      • โœ…TryHackMe - Simple CTF (Easy)
      • โœ…TryHackMe - Vulnversity (Easy)
      • โœ…TryHackMe - CMesS (Medium)
      • โœ…TryHackMe - UltraTech (Medium)
      • โœ…TryHackMe - LazyAdmin (Easy)
      • โœ…TryHackMe - Anonymous (Medium)
      • โœ…TryHackMe - tomghost (Easy)
      • โœ…TryHackMe - ConvertMyVideo (Medium)
      • โœ…TryHackMe - Brainpan 1 (Hard)
Powered by GitBook
On this page
  • Description
  • Background Knowledge
  • delegatecall
  • delegatecall vulnerability
  • Code Audit
  • Solution
  • Summary
  1. Web3 CTF
  2. Ethernaut

Delegation

delegatecall

PreviousTokenNextForce

Last updated 2 years ago

Description

The goal of this level is for you to claim ownership of the instance you are given.

Things that might help:

  • Look into Solidity's documentation on the delegatecall low level function, how it works, how it can be used to delegate operations to on-chain libraries, and what implications it has on execution scope.

  • Fallback methods

  • Method ids

Background Knowledge

delegatecall

My comment: It is important to understand why delegatecall is useful. Recall that if a smart contract is deployed to the blockchain then we can't be modified its code no more. All the logic implemented in the contract will stay there forever, unless we selfdestruct the contract and deploy a new one. To get around this, we can use delegatecall to call a "library" contract where new logic is implemented.

delegatecall vulnerability

Code Audit

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

contract Delegate {

  address public owner;

  constructor(address _owner) public {
    owner = _owner;
  }

  function pwn() public {
    owner = msg.sender;
  }
}

contract Delegation {

  address public owner;
  Delegate delegate;

  constructor(address _delegateAddress) public {
    delegate = Delegate(_delegateAddress);
    owner = msg.sender;
  }

  fallback() external {
    (bool result,) = address(delegate).delegatecall(msg.data);
    if (result) {
      this;
    }
  }
}

Two key points:

  • The contract Delegation implements a fallback() function that executes delegatecall().

  • The contract Delegate implements a suspicious function pwn() that sets msg.sender as the owner.

For convenience, lets define the following aliases:

  • The attacker -> A

  • Delegation -> B

  • Delegate -> C

The idea is A calls B (delegate)calls C. Symbolically, A -> B -> C. When A -> B, we send a transaction to trigger the fallback() function in B. Here B initializes the delegatecall B -> C. If you watch Smart Contract Programmer's video, you should know that:

  • The delegatecall preserves A's context. In this case, we have msg.sender == A.

  • The delegatecall acts on B's state variable (in contrast, a normal "call" acts on C's state variable).

In C, when pwn() is called, the owner state variable refers to B's owner (instead of C's owner, since it is a delegatecall). The msg.sender here is A. In other words, the function pwn() sets A as B's owner, and we are done.

Solution

Send a transaction to Delegation and calls the pwn() function:

await contract.sendTransaction({data: web3.utils.keccak256("pwn()")})

Since pwn() is not defined in Delegation, the fallback() function will be triggered. After that, Delegation does delegatecall() and calls the pwn() function in Delegate. When pwn() is called, it updates owner to msg.sender, which is the attacker.

Note that this owner refers to the owner of Delegation since Delegation is doing the delegatecall().

Confirm the owner:

await contract.owner()

Click "Submit instance" and move on to the next level.

Summary

Usage of delegatecall is particularly risky and has been used as an attack vector on multiple historic hacks. With it, your contract is practically saying "here, -other contract- or -other library-, do whatever you want with my state". Delegates have complete access to your contract's state. The delegatecall function is a powerful feature, but a dangerous one, and must be used with extreme care.

Please refer to the article for an accurate explanation of how this idea was used to steal 30M USD.

The Parity Wallet Hack Explained
โœ…
โœ…
Page cover image
Delegatecall - Smart Contract Programmer
ethereumbook/09smart-contracts-security.asciidoc at develop ยท ethereumbook/ethereumbookGitHub
DELEGATECALL - Mastering Ethereum
Logo