No dia 30 de novembro, nosso sistema de monitoramento de incidentes de segurança ThunderForecast descobriu um ataque ao protocolo Loopring (Blog em EN, CN) por meio da varredura de transações históricas no Ethereum. Como conclusão, a causa raiz deste ataque é a falta de controle de acesso na função sellTokenForLRC. O atacante se aproveitou de 80,97 ETH, o que equivale a 48.849,20 USD com base no preço da época.
No dia 11 de dezembro de 2020, nosso sistema de monitoramento ThunderForecast reportou uma série de transações negociadas com uma taxa de câmbio anormal. Em seguida, utilizamos o sistema EthScope desenvolvido pela nossa equipe de pesquisa para analisar essas transações e descobrimos que se trata de um ataque explorando uma vulnerabilidade do Protocolo Seal Finance com fins de arbitragem.
O que é o Seal?
Mencionado no whitepaper do Seal: "SEAL - Um protocolo experimental que serve como intermediário entre os principais tokens de protocolo DeFi, criando maior liquidez entre eles". Até o momento, existem mais de 10 pools de liquidez que conectam o Seal com outros tokens conhecidos (como UNI, YFI, USDT, SNX e outros). Para obter o bônus, o investidor precisa depositar tokens LP no contrato de recompensa SEAL e acionar a função breed() no contrato Farm para produzir novos tokens SEAL. O contrato Farm é implantado em cada pool Seal e a função breed() no contrato é utilizada para emitir novos tokens Seal. Conforme a configuração de breed(), ela emite adicionalmente 1,6% de Seal Token. Além disso, 0,8% dos tokens Seal emitidos são trocados por outro token que é depositado no pool com os outros 0,8% dos tokens Seal emitidos como liquidez. No entanto, como não há controle de acesso projetado para a função breed(), qualquer pessoa pode acionar essa função, e esse design primitivo se torna a causa raiz do ataque relatado.
A seguir está o código-fonte confirmado da função breed():
function breed() external {
require(now / 1 days > today);
today += 1;
uint256 sealPairAmount = seal.balanceOf(address(cSeal));
uint256 tokenPairAmount = token.balanceOf(address(cSeal));
uint256 newSeal = sealPairAmount.mul(spawnRate).div(1e18);
uint256 amount = UniswapV2Library.getAmountOut(newSeal, sealPairAmount, tokenPairAmount);
seal.mint(address(cSeal), newSeal);
if(address(seal) < address(token))
cSeal.swap(0, amount, address(this), "");
else
cSeal.swap(amount, 0, address(this), "");
token.transfer(address(cSeal), amount);
seal.mint(address(cSeal), newSeal);
cSeal.mint(address(this));
}
Detalhes
Agora começamos a revelar mais detalhes deste ataque com uma transação de ataque. Nesta transação, o atacante repete a lógica de ataque em 10 pools Seal para maximizar seu lucro. Para a análise a seguir, focamos no ataque lançado no pool Seal-SNX.

Há três etapas envolvidas:
- Etapa 1: Trocar 1.084 Seal por 2.787 SNX no pool Seal-SNX. A taxa de câmbio é: 1 Seal = 2,57 SNX.
- Etapa 2: Acionar a função
breed()no contratoFarm. Esta função emite 13,08 Seal e os troca por 10,20 SNX. A taxa de câmbio agora é: 1 SNX = 0,78 Seal. O motivo é que a maior parte do SNX no pool é trocada por Seal, causando uma enorme diferença entre SNX e Seal em termos de quantidade. Então, com base no algoritmo de cálculo de preço do Uniswap, o SNX se torna extremamente valioso (o preço aumenta mais de 3 vezes) no pool. - Etapa 3: Trocar 2.787 SNX por 1.100 Seal no pool Seal-SNX. Como a troca aumenta ainda mais o preço do SNX, o atacante obtém mais tokens Seal por arbitragem (extra de 16 Seal).
Para medir e confirmar ainda mais a perda, reproduzimos a função breed() sob o estado do bloco anterior ao ataque, utilizando nosso sistema EthScope. Como resultado, o Farm emitiu 18 tokens Seal adicionais em comparação com a invocação normal. O atacante capturou 16 Seal e apenas 2 Seal permaneceram no pool.
Ganhos e Perdas
Nesta transação, o atacante obteve um total de 175 Seal.
A Escala do Ataque
Até 13 de dezembro de 2020, há 3 contratos maliciosos (0x49f93e, 0x8b3710, 0x0f20b6) implantados na rede e 22 transações foram lançadas com sucesso para capturar 4.247 tokens Seal. Com base no preço no momento, o atacante lucrou cerca de 58.467 USD explorando a vulnerabilidade do protocolo Seal. Vale mencionar que a vulnerabilidade do protocolo Seal ainda está sendo explorada!!!
Além disso, ao analisar o fluxo dos tokens Seal obtidos, descobrimos que cerca de 900 tokens Seal foram depositados em DEX e o restante foi distribuído em 6 endereços diferentes. Conforme mostrado na figura a seguir, esses endereços são todos os principais detentores de tokens Seal, além do Seal Finance e do pool de liquidez no Uniswap V2.

Conclusão
Com o desenvolvimento do ecossistema DeFi no Ethereum, diversos problemas de segurança estão gradualmente emergindo. De fato, a causa raiz, que é o controle de acesso, por trás do ataque causou uma perda considerável (58.467 USD) ao Seal por meio de 22 transações até 13 de dezembro de 2020.
Atualização (2021/01/04)
Após o primeiro ataque em 30/11/2020, o atacante implantou um terceiro contrato de ataque e lançou cinco ataques. O último ataque ocorreu em 24/12/2020 e transferiu os tokens Seal obtidos para este endereço. Durante esse processo, o atacante obteve 6.021 tokens Seal.
Linha do Tempo:
- 2020/12/11: Transações suspeitas foram encontradas
- 2020/12/12: Análise concluída
- 2020/12/13: Reportado ao Seal Finance
- 2021/01/03: Detalhes foram divulgados
- 2021/01/03: CVE-2021–3006 foi atribuído
Sobre a BlockSec
A BlockSec é uma empresa pioneira em segurança de blockchain, fundada em 2021 por um grupo de especialistas em segurança de renome mundial. A empresa está comprometida em aprimorar a segurança e a usabilidade do emergente mundo Web3, a fim de facilitar sua adoção em massa. Para isso, a BlockSec oferece serviços de auditoria de segurança de contratos inteligentes e chains EVM, a plataforma Phalcon para desenvolvimento seguro e bloqueio proativo de ameaças, a plataforma MetaSleuth para rastreamento e investigação de fundos, e a extensão MetaSuites para construtores web3 navegarem com eficiência no mundo cripto.
Até o momento, a empresa atendeu mais de 300 clientes renomados, como MetaMask, Uniswap Foundation, Compound, Forta e PancakeSwap, e recebeu dezenas de milhões de dólares em duas rodadas de financiamento de investidores de destaque, incluindo Matrix Partners, Vitalbridge Capital e Fenbushi Capital.
Site oficial: https://blocksec.com/
Conta oficial no Twitter: https://twitter.com/BlockSecTeam



