⚡ 실습 사이트 바로가기 — 설치 불필요
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 → 잔액 차감 (이미 늦음)
2. Interact → ETH 전송 (여기서 재진입!)
3. Effect → 잔액 차감 (이미 늦음)
✅ 안전한 순서 (CEI 패턴)1. Check → 잔액 확인
2. Effect → 잔액 차감 먼저
3. Interact → ETH 전송
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