Chengdu Lianan: Opyn ETH Put 논리적 취약점에 대한 기술적 분석
成都链安
2020-08-05 10:13
本文约1611字,阅读全文需要约6分钟
이번 사건에서 공격자는 운동 기능의 논리적 결함을 이용했습니다.

보조 제목

이벤트 개요

8월 5일 새벽 4시에 일부 사용자가 opyn 포럼에 계정 잔액이 이유 없이 사라졌다고 보고했으며 일부 사용자는 아래 그림과 같이 의심스러운 거래 정보를 발견했습니다.

Opyn 프로젝트 측은 상황에 대한 사전 분석 후 응답했으며 자금이 이체되었으며 문제의 원인을 찾는 중입니다.

보도 시간 현재 공식은 사건에 대한 응답을 발표했습니다. 해킹되었고 공격을 받았을 수 있는 자산이 이전되었지만 이 취약성은 ETH 계약에만 관련되며 다른 계약에는 영향을 미치지 않습니다. 아래 그림과 같이:

0xe7870231992ab4b1a01814fa0a599115fe94203f

0xb837531bf4eb8ebfa3e20948bd14be067c18cbd3

0xb72e60ea1d0c04605f406c158dce9ac6ae6d224c

Chengdu Lianan-Security Lab은 이 사건을 처음으로 추적 분석했으며 상황 인식 시스템이 도난을 감지한 공격자의 계약 주소는 다음과 같습니다.

공격자의 공격 방법이 복원됩니다.

1. 공격자는 계약을 호출하여 n USDC를 계약에 보내 모기지를 늘리고 계약 통화 oETH를 얻습니다.

3. 공격자는 저당 잡힌 ETH를 상환합니다.

아래 그림과 같이:

보조 제목

기술적 분석

기술적 분석

트랜잭션 0x56de6c4bd906ee0c067a332e64966db8b1e866c7965c044163a503de6ee6552a를 예로 들어 공격자는 계약 0xe7870231992ab4b1a01814fa0a599115fe94203f를 계약 0x951D에 사용합니다. 51bAe Fb72319d9FBE941E1615938d89ABfe2가 공격을 시작했고 이 거래에서 총 $9907의 이익을 얻었습니다. 아래 그림과 같이:

공격자는 먼저 addERC20CollateralOption 함수를 호출하고 아래 그림과 같이 9900 USDC를 컨트랙트에 보냈습니다.

addERC20Collateral(msg.sender, amtCollateral); 이 함수에서 USDC의 에이전시 전송을 담당함; issueOTokens(amtToCreate, receiver); 함수에서 oETH 발행을 담당함, 이 트랜잭션은 그림과 같이 30 oETH를 발행하여 공격자에게 보냅니다. 아래 그림에서 :

이 작업이 완료되면 공격자의 저장소 매개변수가 변경됩니다. 아래 그림과 같이 vault.oTokensIssued 및 vault.collateral이 각각 300000000 및 9900000000으로 업데이트됩니다.

그런 다음 공격자는 oETH를 교환하기 시작했습니다.

운동을 호출하면 구성 매개변수 oTokensToExercise는 60이고 vaultsToExerciseFrom은 두 개의 주소이며 그 중 하나는 조건을 충족하는 다른 사람의 주소입니다. 아래 그림과 같이:

Exercise 함수는 아래 그림과 같이 _exercise(vault.oTokensIssued, vaultOwner); 브랜치를 실행하고 호출자에게 30oETH에 해당하는 USDC를 전송합니다.

실습에서 for 루프를 다시 살펴보자.oTokensToExercise의 공격자의 입력은 60이므로 컨트랙트에서 두 번째 주소가 조건을 충족하는지 확인하면 여전히 잔액을 공격자인 msg.sender에게 전송합니다. 이를 통해 공격자는 USDC를 두 번 얻을 수 있으므로 이익을 얻을 수 있습니다.

보조 제목

요약 조언

이번 사건에서 공격자는 운동 기능의 논리적 결함을 이용했습니다. 이 기능은 호출자가 최종 이체를 하기 전에 이 주소의 USDC를 상환할 수 있는 권한이 있는지 확인하지 않고 단순히 주소를 상환할 수 있는지 여부를 확인합니다. 코드 레이어의 논리적 취약점이며 공식 답변에 따르면 이 계약은 보안 감사를 받았습니다. Chengdu Lianan은 이로써 모든 프로젝트 당사자에게 다음을 상기시킵니다.

1. 프로젝트가 시작되기 전에 충분하고 효과적인 보안 감사를 수행해야 하며, 가급적이면 다자간 감사를 수행해야 합니다.

2. 계약은 보안 사고 발생 시 자금의 안전을 확보하기 위해 계약 거래 정지 등의 기능을 설정해야 합니다.

成都链安
作者文库