Tyojong

[Solodit] Lack of access control on tSQD's `registerTokenOnL2` 본문

web3/Solodit Report

[Solodit] Lack of access control on tSQD's `registerTokenOnL2`

Tyojong 2025. 9. 23. 20:48

개요


심각도 : 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