SecuFiby TechFi
ETHERNAUT LAB · LEVEL 10

Reentrancy 취약점
실습 가이드

스마트 컨트랙트 재진입 공격 — 취약점 분석 · 공격 · 패치 · 진단보고서

난이도: MEDIUMCWE: CWE-841실습환경: MetaMask + Sepolia참고: The DAO Hack 2016
WHAT IS REENTRANCY?

재진입(Reentrancy)이란?

컨트랙트 A가 외부 컨트랙트 B를 호출할 때, B가 다시 A를 호출해 상태 업데이트 전에 자금을 반복 인출하는 공격입니다.

⚡ 실제 피해 사례2016년 The DAO 해킹 — Reentrancy 취약점으로 360만 ETH(약 6,000만 달러) 탈취. 이더리움 하드포크(ETH/ETC 분리)의 직접 원인.
ATTACK MECHANISM

공격 메커니즘

핵심 문제는 Check-Effect-Interaction 순서 위반입니다.

❌ 취약한 순서1. Check → 잔액 확인
2. Interact → ETH 전송 (여기서 재진입!)
3. Effect → 잔액 차감 (이미 늦음)
✅ 안전한 순서 (CEI 패턴)1. Check → 잔액 확인
2. Effect → 잔액 차감 먼저
3. Interact → ETH 전송
CONTEXT

왜 이게 가능한가?

1
ETH 전송 시 fallback/receive 함수 자동 실행 — ETH를 수신하는 컨트랙트는 receive() 또는 fallback()이 자동으로 호출됩니다.
2
상태 업데이트 이전에 외부 호출 — 취약한 컨트랙트는 ETH를 보낸 후 잔액을 0으로 만들기 때문에 그 사이에 재호출 가능합니다.
3
call()은 가스를 모두 전달call{value: amount}("")는 수신자에게 가스를 모두 포워딩하여 복잡한 로직 실행이 가능합니다.
CWE-841SWC-107OWASP SC-01