Carregando, por favor aguarde...
Pular para o conteúdo

Auditoria do protocolo Avalaunch XAVA – CoinFabrik Blog

[ad_1]

Introdução

A CoinFabrik foi solicitada a auditar os contratos do projeto XAVA Protocol da Avalaunch.
Primeiro faremos um resumo de nossas descobertas e depois mostraremos o
detalhes de nossas descobertas.

Alcance

Os contratos auditados são do https://github.com/avalaunch-app/xava-protocol/
repositório git. A auditoria é baseada no commit
fd9b97ccd963819a282fa5c21bf0545d180f8797. As revisões foram feitas com base em
comprometer-se 8c9f3c021f0a3366e9f8cfc3fd74163f31b57b40.

Os contratos auditados são:

● contratos/airdrop/Airdrop.sol
● contratos/airdrop/AirdropAVAX.sol
● contratos/airdrop/AirdropSale.sol
● contratos/farming/DevToken.sol
● contratos/agricultura/AgriculturaXava.sol
● contratos/interfaces/IAdmin.sol
● contratos/interfaces/IAllocationStaking.sol
● contratos/interfaces/IAvalaunchSale.sol
● contratos/interfaces/ICollateral.sol
● contratos/interfaces/IDexalotPortfolio.sol
● contratos/interfaces/IERC20Metadata.sol
● contratos/interfaces/ISalesFactory.sol
● contratos/vendas/AvalaunchSale.sol
● contratos/vendas/SalesFactory.sol
● contratos/utils/Context.sol
● contratos/Admin.sol
● contratos/AlocaçãoStaking.sol
● contratos/AvalaunchColateral.sol
● contratos/IERC20.sol
● contratos/XavaToken.sol

O escopo da auditoria é limitado a esses arquivos. Nenhum outro arquivo neste repositório foi
auditado. Supõe-se que suas dependências funcionem de acordo com sua documentação.
Além disso, nenhum teste foi revisado para esta auditoria.

Análises

Sem se limitar a eles, o processo de auditoria incluiu as seguintes análises:

● Erros aritméticos
● Versão desatualizada do compilador Solidity
● Condições de corrida
● Ataques de reentrada
● Uso indevido de carimbos de data/hora de bloqueio
● Ataques de negação de serviço
● Uso excessivo de gás
● Qualificadores de função ausentes ou mal utilizados
● Código desnecessariamente complexo e interações de contrato
● Tratamento de erros deficiente ou inexistente
● Validação insuficiente dos parâmetros de entrada
● Tratamento incorreto de assinaturas criptográficas
● Centralização e capacidade de atualização

Resumo das Constatações

Encontramos um problema crítico e quatro problemas menores. Além disso, algumas melhorias foram
proposto.

Problemas de segurança

Funções privilegiadas

A auditoria abrange 20 contratos, incluindo interfaces e bibliotecas. Contratos
como AllocationStaking e FarmingXava são de propriedade. O proprietário é responsável por
definir parâmetros de venda no primeiro caso e adicionar pools, definir pontos de alocação
no segundo caso.
Outros contratos, como AllocationStaking, AvalaunchBadgeFactory,
AvalaunchCollateral, os contratos de lançamento aéreo (Airdrop, AirdropAVAX, AirdropSale),
AvalaunchSale e SaleFactory fazem uso da interface Admin, definindo um
administrador na construção.
O novo contato da AvalaunchCollateral introduz ainda mais o papel do moderador
quem é responsável por aprovar as vendas para ter garantias de acordo com este contrato.

Problemas de segurança encontrados

Classificação de gravidade

Os riscos de segurança são classificados da seguinte forma:

● Crítico: Estas são questões que conseguimos explorar. Eles comprometem a
sistema a sério. Eles devem ser corrigidos imediatamente.
● Médio: Esses são problemas potencialmente exploráveis. Mesmo que não tivéssemos
conseguem explorá-los ou seu impacto não é claro, eles podem representar um
risco de segurança em um futuro próximo. Sugerimos corrigi-los o mais rápido possível.
● Menor: Esses problemas representam problemas relativamente pequenos ou difíceis
aproveitar, mas pode ser explorado em combinação com outras questões.
Esses tipos de problemas não bloqueiam implantações em ambientes de produção.
Eles devem ser levados em consideração e corrigidos sempre que possível.

Status dos problemas

Um problema detectado por esta auditoria pode ter quatro status distintos:

● Não resolvido: O problema não foi resolvido.
● Reconhecido: o problema permanece no código, mas é resultado de uma ação intencional
decisão.
● Resolvido: Implementação ajustada do programa para eliminar o risco.
● Parcialmente resolvido: Implementação ajustada do programa para eliminar parte do
risco. A outra parte permanece no código, mas é resultado de uma ação intencional
decisão.
● Mitigado: Ações implementadas para minimizar o impacto ou a probabilidade do
risco.

Problemas críticos de gravidade

CR-01 Licenças ilimitadas emitidas para administrador

Localização:

● contracts/AvalaunchCollateral.sol:135-176,
● contracts/AvalaunchCollateral.sol:192-226

O administrador pode chamar autoParticipate() ou boostParticipation() no contrato
AvalaunchCollateral e agir em nome de um usuário, pagando com
garantia. O usuário só permite a venda (endereço), mas não pode limitar valores,

Recomendação

Inclua um valor (ou valor máximo) que o usuário permite que o administrador use.

Status

Resolvido. Os desenvolvedores nos informaram que este é o uso esperado. Os usuários devem
portanto, confie que o administrador selecionará o valor com segurança em seus interesses.

Problemas de gravidade média

Nenhum problema encontrado.

Problemas de gravidade menores

MI-01 Nenhuma rodada de reforço é possível

Dentro AvalaunchSale.setSalesParams() definimos o boosterRoundId como

boosterRoundId = _stakingRoundId.add(1);

após a seguinte verificação

require(_stakingRoundId > 0, "Invalid staking round id.");

No entanto, como stakingRoundId pode ser igual a roundIds.length-1 e
boosterRoundId poderia apontar para uma rodada inexistente, tornando o booster
rodada indisponível para todos os propósitos práticos.

Recomendação

Valide isso _stakingRoundId não é o último índice. Alternativamente, revisite o pedido em
quais parâmetros são definidos para evitar inconsistências entre o número de rodadas,
e rodadas específicas.

Status

Reconhecido. Os desenvolvedores explicaram que este é um comportamento esperado e o
rodada de reforço é opcional.

Pragma Flutuante MI-02

Localização:

● contracts/AvalaunchCollateral.sol:2
● contracts//DevToken.sol:2

● contracts/interfaces/IAvalaunchSale.sol:2
● contracts/interfaces/IDexalotPortfolio.sol:2
● contracts/interfaces/ICollateral.sol:2
● contracts/interfaces/IERC20Metadata.sol:3
● contracts/utils/Context.sol:3

Os contratos devem ser implantados com a mesma versão do compilador em que foram
testado com. Bloquear o pragma ajuda a garantir que os contratos não
ser implantado usando, por exemplo, uma versão desatualizada do compilador que pode introduzir
bugs que afetam negativamente o sistema de contrato.

Recomendação

Bloqueie a versão pragma, substituindo a solidez pragma ^0.8.0; com um patch específico,
preferindo a versão mais atualizada. Por exemplo, a solidez do pragma 0.8.14;.

Status

Reconhecido.

Parâmetros inconsistentes MI-03 em AvalaunchSale e SalesFactory

Há um problema se o parâmetro de garantia definido em SalesFactory for diferente daquele
definido em AvalaunchSales.

Recomendação

Defina o parâmetro em apenas um contrato.

Status

Reconhecido.

MI-04 Prefere importar bibliotecas do NPM

Biblioteca IERC20Metadata.sol é armazenado localmente e importado, em vez de usar o NPM
para importá-lo do repositório do openzeppelin. Isso pode levar a erros na cópia ou
perder uma atualização.

Recomendação

Importe todo o código gerado externamente por meio do NPM.

Status

Reconhecido.

Melhorias

Esses itens não representam um risco de segurança. São as melhores práticas que nós
sugerir implementação.

Tabela

Detalhes

EN-01 Versão desatualizada do compilador Solidity

Os contratos auditados utilizam a versão desatualizada do solidity v0.6.12 (SWC-102).

Recomendação

Considere atualizar o código para compilar com a versão mais recente.

Status

Não implementado.

EN-02 Biblioteca achatada não utilizada

Versão antiga achatada do TransparentUpgradeableProxy do OpenZeppelin. Se não estiver usando
a versão mais recente, os desenvolvedores devem especificar qual versão estão usando para que possamos verificar
para problemas relatados.

Recomendação

Documente o uso dessa variável e permita modificações.

Status

Não implementado.

EN-03 tokenPriceInUSD não é usado e enganoso

A variável tokenPriceInUSD em AvalauncSale.sol é enganoso, uma vez que não é usado
por nenhuma das funções de venda nem precisa ter qualquer relação com
tokenPriceInAVAX. Também tokenIpriceInAVAX pode ser alterado, mas isso não pode.

Recomendação

Documente o uso dessa variável e permita modificações.

Status

Não implementado.

EN-04 dexalotPortfolio pode ser definido antes da venda ser criada

Certifique-se de que a venda seja criada em setAndSupportDexalotPortfolio()

EN-05 admin Array não verificado quanto a repetições durante a construção

Localização:

● Admin.sol:18-24.

No construtor de Admin.sol pode acontecer que um endereço se repita no
matriz de entrada _addresses. Se isso acontecer, o mesmo endereço seria empurrado mais
de uma vez para os administradores do array e pode criar inconsistências, por exemplo, ao chamar
removeAdmin(). Recomendamos que você verifique isAdmin[_admins[i]] = falso
antes de transformá-lo em verdade.

EN-06 Substituir Inteiros por Constantes

Dentro FarmingXava.sol substituir ocorrências de 1e18 e 1e36 por uma chamada ou uma constante
(por exemplo, IERC20Metadata(address(token)).decimals() como é feito no
AvalaunchSale.sol contrato).

EN-07 Duas bibliotecas safeMath

Alguns contratos importam a biblioteca safeMath do OpenZeppelin e outros usam um
biblioteca safeMath (math/safeMath.sol) que é uma cópia do safeMath do OpenZeppelin
com algumas modificações. Além disso, observe que alguns contratos, como AirdropSale.sol, estão
importando safeMath mas não usando. Nesse caso, considere remover e economizar gás.

EN-08 Documentação

Use o formato NatSpec do Solidity para documentação (link), removendo “todo”s e outros
comentários de desenvolvimento.

Registro de alterações

● 22/03/2022 – Relatório inicial baseado em confirmação
fd9b97ccd963819a282fa5c21bf0545d180f8797.
● 05-04-2022 – Revisão baseada em confirmação
8c9f3c021f0a3366e9f8cfc3fd74163f31b57b40.

Isenção de responsabilidade: Este relatório de auditoria não é uma garantia de segurança, conselho de investimento ou
aprovação do projeto Avalaunch XAVA Protocol uma vez que a CoinFabrik não
revisou sua plataforma. Além disso, não fornece um código de contrato inteligente
garantia de infalibilidade.





[ad_2]

Fonte da Notícia: blog.coinfabrik.com

Isenção de responsabilidade

Todas as informações contidas em nosso site são publicadas de boa fé e apenas para fins de informação geral. Qualquer ação que o leitor tome com base nas informações contidas em nosso site é por sua própria conta e risco.