2017년에 패리티 멀티시그 지갑의 스마트 컨트랙트가 해킹을 당함으로써 3500억 원 상당의 암호화폐가 동결되어 버리는 일이 발생했습니다. 이 사건은 패리티 멀티시그 지갑을 구현하기 위해 작성된 스마트 컨트랙트 코드의 취약점을 이용한 해킹이었습니다. 그렇다면 어떤 보안 취약점 때문에 발생한 사건이었는지 설명을 드리도록 하겠습니다.
해커는 패리티 멀티시그 지갑의 스마트 컨트랙트 코드에 취약점이 존재하여 컨트랙트의 오너십을 탈취하는 것이 가능하다는 것을 알게 됩니다. 그 취약점은 오너십을 지정이 스마트 컨트랙트를 최초에 실행했던 시점 이후에도 여전히 가능하다는 점이었습니다.
따라서 공격자는 멀티시그 지갑의 오너십을 탈취하기 위해 첫 번째 트랜젝션을 발생시켜 initWallet 함수를 호출하여 지갑 컨트랙트를 별도의 라이브러리로 분리하는 데에 성공하고 오너십을 변경하여 그것을 자신이 획득하게 됩니다.
그 다음 delegatecall 함수를 이용해 원래 계약에는 없는 함수를 자유롭게 이용할 수 있도록 한 후 m_owners의 주소를 자신의 주소로 바꾼 다음 두 번째 트랜젝션을 발생시켜 스마트 컨트랙트를 통해 지갑에 있는 모든 자금을 자신의 이더리움 계정으로 모두 출금하는데 성공하게 됩니다.
이렇게 공격은 성공했지만 아직도 해당 자금은 해커의 개인 지갑에 동결된 상태로 아무도 이용할 수가 없게 되어 있습니다.