2020년 11월, Loopring의 LRC 프로토콜 수수료 볼트에서 발견된 치명적인 취약점으로 인해 공격자들이 접근 제어 취약점을 악용하고 플래시 론 공격을 통해 토큰 가격을 조작할 수 있었습니다. 이 사건은 견고한 접근 제어와 지속적인 DeFi 보안 모니터링의 중요성을 강조하며, 값비싼 익스플로잇을 방지하는 데 필수적임을 보여줍니다.
Loopring (LRC) 프로토콜 사건 소개
2020년 말, Pickle Finance와 88mph를 포함한 여러 이더리움 기반 DeFi 플랫폼에서 보안 사고가 발생했습니다. 이러한 취약점을 탐지하기 위해 BlockSec은 ThunderForecast 시스템을 개발했으며, 이 시스템은 비정상적으로 큰 거래 비율 차이와 동일한 외부 소유 계정(EOA)에 의한 지속적인 이더 획득이 포함된 의심스러운 트랜잭션을 식별했습니다.
EthScope 시스템을 사용하여 이러한 트랜잭션을 분석한 결과, Loopring의 볼트 프로토콜, 특히 LRC 프로토콜 수수료 볼트(LRCPFV)의 취약점을 노린 익스플로잇을 발견했습니다. 이 블로그 포스트에서는 공격의 세부 사항, 그 영향, 그리고 DeFi 보안 커뮤니티를 위한 교훈을 자세히 설명합니다.
LRC 프로토콜 수수료 볼트 개요
Loopring은 이더리움 기반의 오픈소스 탈중앙화 거래소(DEX) 프로토콜입니다. 네이티브 토큰인 LRC(ERC-20)는 생태계 내에서 사용됩니다. LRC 프로토콜 수수료 볼트(LRCPFV)로 알려진 Loopring의 볼트 프로토콜은 프로토콜 수수료를 저장하고 수수료를 LRC 토큰으로 교환할 수 있도록 합니다.
LRCPFV의 취약한 함수는 sellTokenForLRC로, 적절한 접근 제어 없이 토큰을 LRC로 교환할 수 있어 누구든지 이를 호출할 수 있습니다.
function sellTokenForLRC(
address token,
uint amount
)
external
nonReentrant
{
require(amount > 0, "ZERO_AMOUNT");
require(token != lrcAddress, "PROHIBITED");
address recipient = tokenSellerAddress == address(0) ? owner : tokenSellerAddress;
if (token == address(0)) {
recipient.sendETHAndVerify(amount, gasleft());
} else {
token.safeTransferAndVerify(recipient, amount);
}
require(
tokenSellerAddress == address(0) ||
ITokenSeller(tokenSellerAddress).sellToken(token, lrcAddress),
"SELL_FAILURE"
);
emit TokenSold(token, amount);
}
이 함수에 접근 제어가 없기 때문에, 공격자들은 이를 반복적으로 호출하여 토큰 가격을 조작하고 차익 거래 기회를 통해 이익을 얻을 수 있었습니다.
공격 세부 사항
대표적인 공격 트랜잭션 0x00b2c...을 분석했습니다. 공격은 여섯 가지 주요 단계로 이루어졌습니다:

- 플래시 론: 플래시 론 제공자(
0xEB7e...)로부터 3,773.88 ETH를 차용했습니다. - 초기 스왑: Uniswap V1-LRC에서 3,773.88 ETH를 1 ETH = 1.32878 LRC의 비율로 5,014.68 LRC로 교환했습니다.
- 수수료 볼트 스왑: 취약한
sellTokenForLRC함수를 호출하여 LRCPFV에 저장된 0.231 ETH 수수료를 0.000219 LRC로 교환했습니다. 이 무단 호출로 Uniswap에서 LRC 가격이 조작되어 ETH 대비 가치가 급격히 상승했습니다(1 ETH = 0.00094 LRC). - 수익성 스왑: Uniswap V1-LRC에서 5,014.68 LRC를 다시 3,774.09 ETH로 교환하여 조작된 가격으로 인해 추가로 0.215 ETH를 획득했습니다.
- 대출 상환: 3,773.88 ETH 플래시 론을 반환했습니다.
- 수익 이전: 0.215 ETH 수익을 공격자의 EOA로 전송했습니다.
이 익스플로잇은 플래시 론 공격과 가격 조작, 그리고 볼트 컨트랙트의 접근 제어 부재를 결합하여 활용했습니다.
공격의 영향과 규모
분석된 트랜잭션은 2020년 10월 13일에 발생했습니다. CoinGecko 데이터에 따르면, 당시 LRC 가격은 약 0.0005175 ETH였습니다.
조사 결과 다음이 밝혀졌습니다:
- 악성 컨트랙트: 공격자가 배포한 3개(
0xa896...,0x414a...,0xd91d...). - 공격 규모: LRCPFV가 배포된 블록 9,644,449 이후 공격자의 EOA(
0x81e8...)가 실행한 90건의 트랜잭션. - 최대 수익: 하나의 트랜잭션(
0x33eab...)에서 9.89 ETH의 수익이 발생했습니다. - 총 수익: 약 80.97 ETH(2020년 10월 1일 기준 약 48,849 USD).
근본 원인은 sellTokenForLRC 함수의 접근 제어 부재로, 반복적인 악용이 가능했습니다.
교훈 및 마무리
이더리움 DeFi 생태계가 성장함에 따라, 접근 제어 취약점과 같은 보안 과제는 점점 더 중요해지고 있습니다. 주목받는 대형 공격이 관심을 끄는 경우가 많지만, 이 사건에서 보여주듯이 눈에 띄지 않는 취약점도 상당한 재정적 손실을 초래할 수 있습니다.
Loopring은 이 익스플로잇으로 인해 약 80.97 ETH를 손실했으며, 이는 엄격한 스마트 컨트랙트 감사와 지속적인 보안 모니터링의 필요성을 강조합니다.
DeFi 프로토콜의 경우, 디지털 자산을 보호하기 위해 엄격한 접근 제어 구현, BlockSec의 스마트 컨트랙트 감사 및 Phalcon Security와 같은 도구 활용, 그리고 사전 예방적 위험 관리가 필수적입니다.
사건 타임라인
- 2020/11/30: ThunderForecast에 의해 의심스러운 트랜잭션 탐지.
- 2020/12/01: EthScope를 사용한 상세 분석 완료.
- 2020/12/02: Loopring 팀에 취약점 보고.
- 2020/12/03: 취약점 확인 및 수정 구현.
- 2020/12/03: 사건 세부 사항 공개 공시.
- 2021/01/03: 취약점에 CVE-2020-35962 할당.



