[Solodit] Lack of access control on tSQD's `registerTokenOnL2`
개요
심각도 : High
언어 : Solidity
취약점 유형 : Missing Access Control
이 리포트는 Subsquid 프로젝트에서 Pashov Audit Group이 발견한 tSQD의 registerTokenOnL2 함수에 접근 제어가 없어서 공격자가 브릿지 토큰을 손상시킬 수 있는 취약점에 대해 설명한다.
tSQD 토큰을 Ethereum(L1)에서 Arbitrum(L2)로 브릿지 할 때, registerTokenOnL2 함수가 L2 토큰 주소 (12CustomTokenAddress)를 설정한다.
이 함수에 접근 제어(권한 제한)가 없기 때문에 아무나 함수를 호출하여 임의의 L2 토큰 주소를 지정할 수 있다. 호출이 되면 gateway 내 L2 토큰 주소를 바꿀 수 없으므로, 브릿지 토큰이 영구적으로 망가질 수 있다.
영향 받는 코드
function registerTokenOnL2(
address l2CustomTokenAddress,
uint256 maxSubmissionCostForCustomGateway,
uint256 maxSubmissionCostForRouter,
uint256 maxGasForCustomGateway,
uint256 maxGasForRouter,
uint256 gasPriceBid,
uint256 valueForGateway,
uint256 valueForRouter,
address creditBackAddress
) public payable {
require(!shouldRegisterGateway, "ALREADY_REGISTERED");
shouldRegisterGateway = true;
gateway.registerTokenToL2{value: valueForGateway}(
l2CustomTokenAddress, maxGasForCustomGateway, gasPriceBid, maxSubmissionCostForCustomGateway, creditBackAddress
);
router.setGateway{value: valueForRouter}(
address(gateway), maxGasForRouter, gasPriceBid, maxSubmissionCostForRouter, creditBackAddress
);
shouldRegisterGateway = false;
}
누구든지 호출할 수 있으며, L2 토큰 주소에 임의의 값을 넣을 수 있다.
공격자가 registerTokenOnL2 를 먼저 호출해 잘못된 L2 토큰 주소를 기록하면, 브릿지된 토큰을 사용하는 모든 L2 트랜잭션이 실패하고 영구 손상된다.
래퍼런스
Smart Contract Vulnerability Dataset - Cyfrin Solodit
h-04-lack-of-access-control-on-tsqds-registertokenonl2-pashov-audit-group-none-subsquid-markdown
solodit.cyfrin.io
audits/team/md/Subsquid-security-review.md at master · pashov/audits
Contribute to pashov/audits development by creating an account on GitHub.
github.com