Décembre, 2021 - Lucky Block
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
10. Décembre, 2021
Avis de non-responsabilité 3 Description 5 Participation au projet 5 Logo 5 Lien avec le contrat 5 Méthodologie 7 Code utilisé issu d'autres Frameworks/Smart Contracts (importations directes) 8 Fichiers de contrat testés 9 Lignes sources 10 Niveau de risque 10 Capacités 11 Portée du programme 13 Graphique de cohérence 13 Vérifier les réclamations 14 Modificateurs 20 CallGraph 22 Unités sources dans la gamme des travaux 23 Problèmes critiques 24 Problèmes importants 24 Problèmes moyens 24 Enjeux faibles 24 Questions d'information 25 Existence de codes commentés 25 Commentaires d'audit 25 Attaques de CFC 26 2
Déclaration de non-responsabilité Les rapports de SolidProof.io ne sont pas, et ne doivent pas être considérés comme une " validation " ou une " non validation " d'un projet ou d'une équipe en particulier. Ces rapports ne sont pas, et ne doivent pas être considérés comme une indication de la valeur économique ou de la qualité de tout "produit" ou "actif" créé par une équipe. SolidProof.io ne couvre pas le test ou l'audit de l'intégration avec un contrat ou des services externes (tels que Unicrypt, Uniswap, PancakeSwap etc'...) Les audits de SolidProof.io ne fournissent aucune garantie concernant l'absence absolue de bugs dans la technologie analysée, et ne fournissent aucune indication sur les propriétaires de la technologie. Les audits SolidProof ne doivent en aucun cas être utilisés pour prendre des décisions d'investissement ou d'implication dans un projet particulier. Ces rapports ne fournissent en aucun cas des conseils d'investissement, et ne doivent pas être utilisés dans ce cadre. Les rapports SolidProof.io représentent un processus d'audit approfondi visant à aider nos clients à améliorer la qualité de leur code tout en réduisant le niveau de risque élevé présenté par les jetons cryptographiques et la technologie blockchain. La technologie blockchain et les actifs cryptographiques présentent un niveau élevé et permanent de risque. La position de SolidProof est que chaque entreprise et chaque individu doivent être responsables de leur propre vigilance et de leur sécurité. SolidProof ne revendique en aucun cas une garantie de sécurité ou de fonctionnalité de la technologie que nous acceptons d'analyser. Version Date Description 1.0 10 décembre 2021 - Projet de mise en page - Test de sécurité automatisé/manuel - Résumé 3
Network Binance Smart Chain (BEP20) Website http://www.luckyblock.io/ Telegram https://telegram.me/Brugusoftwaresolutions Twitter https://twitter.com/bruguLimited Facebook https://www.facebook.com/brugu-Software-Solutions-Private- Limited-633020260535362/ LinkedIn https://www.linkedin.com/company/brugu-software-solutions Pinterest https://in.pinterest.com/brugusoftwaresolutions/ Tumblr https://bruguhyderabad.tumblr.com/ Skype https://brugu.io/Skype:live:.cid.b79cb4ad18ef5536 Whatsapp https://api.whatsapp.com/send?l=en&text=Hi! %20I%27m%20interested%20in%20one%20of%20your%20products%20at %20BRUGU%20SOFTWARE%20SOLUTIONS&phone=919003444928 4
Description Nous aidons les entrepreneurs, les startups et les entreprises à concrétiser leurs idées commerciales grâce à des technologies de pointe. Engagement envers le projet Le 29 novembre 2021, l'équipe de Brugu a engagé Solidproof.io pour auditer les contrats intelligents qu'elle a conçus. La mission était de nature technique et visait à identifier les failles de sécurité dans la conception et la mise en œuvre des contrats. Ils ont fourni à Solidproof.io un accès à leur dépôt de code et à leur livre blanc. Logo Lien avec le contrat v1.0 • https://bscscan.com/address/ 0x2cd96e8c3ff6b5e01169f6e3b61d28204e7810bb#code 5
Vulnérabilité et niveau de risqué Le risque représente la probabilité qu'une certaine source-menace exploite la vulnérabilité, et l'impact de cet événement sur l'organisation ou le système. Le niveau de risque est calculé sur la base de la version 3.0 du CVSS. Nive Valeur Vulnérabilité Risque au (Action requise) Une vulnérabilité qui peut perturber le fonctionnement du Action immediate Critique 9 - 10 contrat dans un pour réduire le certain nombre de niveau de risque. cas, ou qui crée un risque de rupture du contrat Une vulnérabilité affectant le résultats attendu lors de Mise en œuvre des Élevé 7 – 8.9 l'utilisation d'un actions correctives contrat, ou offrant la dans les meilleurs possibilité d'utiliser délais. un contrat de manière non intentionnelle. Une vulnérabilité pouvant affecter le Mise en œuvre des résultat escompté Moyen 4 – 6.9 par l'exécution du actions correctives dans un certain délai. contrat dans un scénario spécifique. Une vulnérabilité qui n'a pas d'impact Mise en œuvre de significatif sur les certaines actions Bas 2 – 3.9 scénarios possibles correctives ou pour l'utilisation du d’acceptation du contrat et qui est risque éventuellement subjective. Une vulnérabilité qui a un caractère Une constatation qui A titre 0 – 1.9 informatif mais ne détermine pas un n’affectant pas le niveau de risque informatif code. 6
Stratégie et techniques d'audit utilisées. Tout au long du processus de révision, nous avons pris soin d'évaluer le référentiel pour les problèmes liés à la sécurité, la qualité du code et le respect des spécifications et des meilleures pratiques. Pour ce faire, notre équipe d'experts pentestres et de développeurs de contrats intelligents a examiné le code ligne par ligne, en répertoriant tous les problèmes au fur et à mesure qu'ils étaient découverts. Methodologie Le processus d'audit suit une série d'étapes de base : 1. Examen du code qui comprend les éléments suivants : i) Examen des spécifications, des sources et des instructions fournies à SolidProof pour s'assurer que nous saisissons la taille, la portée et la fonctionnalité du contrat intelligent. ii) Examen manuel du code, qui consiste à lire le code-source ligne par ligne afin d'identifier les vulnérabilités potentielles. iii) Comparaison avec les spécifications, qui consiste à vérifier si le code fait ce que décrivent les spécifications, les sources et les instructions fournies à SolidProof. 2. Les tests et l'analyse automatisée qui comprennent les éléments suivants : i) L'analyse de la portée des tests, qui est le processus consistant à déterminer si les cas testés couvrent réellement le code et quelle quantité de code est utilisée. ii) L'exécution symbolique, qui consiste à analyser un programme pour déterminer quelles entrées provoquent l'exécution de chaque partie du programme. 3. L'examen des meilleures pratiques, qui est un examen des contrats intelligents pour améliorer l'efficience, l'efficacité, la clarté, la maintenabilité, la sécurité et le contrôle sur la base des pratiques, des recommandations et des recherches établies par l'industrie et le monde universitaire. 4. Des recommandations spécifiques, détaillées et concrètes pour vous aider à prendre des mesures sécurisant vos contrats intelligents. 7
Code utilisé à partir d’autres Frameworks/Smart Contracts (imports directs) Package importés: 8
Fichiers de contrats testés Cet audit a porté sur les fichiers énumérés ci-dessous avec un Hash SHA-1. Un fichier dont le hachage est différent a été modifié, intentionnellement ou non, après l'examen de sécurité. Un Hash différent pourrait être (mais pas nécessairement) une indication d'une modification de la situation ou d'une vulnérabilité potentielle qui n'entrait pas dans le cadre de cet examen. v1.0 9
Metrics Source Lines v1.0 Niveau de risques v1.0 10
Capacités Composants Version Contracts Libraries Interfaces Abstract 1.0 1 3 5 2 Fonctionnalités exposées Cette section répertorie les fonctions qui sont expressément déclarées publiques ou payantes. Veuillez noter que les méthodes getter pour les stateVars publiques ne sont pas incluses.. Version Public Payable 1.0 58 3 Version External Internal Private Pure View 1.0 39 90 7 23 19 Variables d’état Version Total Public 1.0 43 27 Capacités Has Versions Caractér Possibilité Assembl Destroya Version observée istiques de ée des ble s de expérim recevoir Utilisate Contract Solidity entales des fonds urs s 1.0 oui ^0.8.0 oui (2 asm blocks) 11
Uses New/ Transf Low- Delega Hash ECRec Create/ Version ers Level teCall Functi over Create ETH Calls ons 2 1.0 12
Champ d'application du programme de travail L'équipe ci-dessus nous a fourni les fichiers qui doivent être testés (Github, Bscscan, Etherscan, fichiers, etc.). La portée de l'audit concerne le contrat principal (qui porte habituellement le même nom que l'équipe, suivi de .sol). Nous vérifierons les affirmations suivantes : 1. Mise en œuvre correcte de la norme Token 2. Le distributeur ne peut pas frapper de nouveaux jetons. 3. Le distributeur ne peut pas brûler ou bloquer les fonds des utilisateurs 4. Le distributeur ne peut pas mettre le contrat en pause 5. Contrôle global (Sécurité des contrats intelligents) Graphique des hierarchies v1.0 13
Vérifier les reclamations Mise en œuvre correcte de la norme Token Testé Verifié ✓ ✓ Fonction Description Exist Testé Verifié e fournit des informations sur l'offre TotalSupply totale de jetons ✓ ✓ ✓ indique le solde du compte du BalanceOf propriétaire ✓ ✓ ✓ exécute les transferts d'un nombre Transfer précis de jetons à une adresse donnée. ✓ ✓ ✓ exécute les transferts d'un nombre TransferFrom précis de jetons à partir d'une adresse spécifique. ✓ ✓ ✓ permettre à un usager de retirer Approve un nombre déterminé de jetons d'un compte spécifique. ✓ ✓ ✓ renvoie un nombre déterminé de Allowance jetons d'un débiteur à son ✓ ✓ ✓ propriétaire. 14
Rédiger les fonctions du contrat 15
Le distributeur ne peut pas frapper de nouveaux jetons. Name Exist Tested Verified Le distributeur ne peut pas ''frapper'' sa - - - propre monnaie Provision maximale / totale: 100.000.000.000 16
Le distributeur ne peut pas ‘’brûler’’ ou verrouiller les fonds des utilisateurs Name Exist Tested Verified Le distributeur ne peut pas ✓ ✓ ✘ vérouiller Le distributeur ne peut pas ✓ ✓ ✓ ‘’brûler’’ Commentaires: v1.0 - Les frais sont calculés par la fonction collectFee. - Le distributeur peut mettre une adresse sur liste noire - Le distributeur peut bloquer les fonds de l'utilisateur en fixant le temps de ''rafraîchissement'' et le montant. - Le distributeur peut mettre sur liste noire les adresses achetant des jetons dont l'horodatage est inférieur à listedAt + 3 minutes. 17
Le distributeur ne peut pas mettre le contrat en pause Name Exist Tested Verified Le distributeur ne peut pas - - - mettre en pause 18
Bilan global (Smart Contract Security) Testé Verifié ✓ ✓ Legende Attribut Symbol Vérifié ✓ Vérifié partiellement ⚑ Non vérifié ✘ Non disponible - 19
Modificateurs Commentaires - Le distributeur peut activer - isFeeActive - swapAndLiquifyEnabled - sellCooldownEnabled 20
- Le distributeur peut configurer les variables suivantes sans aucune restriction - TaxFee - LiquifyFee - LotteryPoolFee - nftRoyalPoolFee - burnFee - maxTxAmountPourcentage - La variable n'a pas d'effet sur maxTxAmount après la modification de - minTokensBeforeSwap - sellCooldownTime - sellCooldownAmount 21
Graphique d'appel (CallGraph) 22
Unités de source dans le champ d'application v1.0 Legende Attribut Description Lines nombre total de lignes de l'unité source lignes normalisées de l'unité source (par exemple, nLines normalisation des fonctions couvrant plusieurs lignes) lignes de code source normalisées (uniquement les lignes nSLOC de code source ; pas de commentaires, pas de lignes laissées vides) Comment Lines les lignes contenant des commentaires simples ou en série. un indice de complexité spécifique dérivé des instructions de Complexity Score code connues pour introduire de la complexité dans le code (branches, boucles, appels, interfaces externes, ...). 23
Résultats de l'audit AUDIT RÉUSSI Problèmes majeurs - aucun - Problèmes importants - aucun - Problèmes d’importance moyenne - aucun - Probl Fichie Type Lign Description ème r e #1 Principal Vulnérabilités de 1024 Appliquer le [motif `check- réentrée (Reentrancy) effects- interactions`](http:// solidity.readthedocs.io/fr/ v0.4.21/security- considerations.html#re- entrancy).ou le modificateur non Reentrant d'OpenZeppelin Problèmes d’importance faible Probl Fichie Type Lign Description ème r e #1 Principal Le contrat n'importe - Nous recommandons pas les paquets npm d'importer tous les paquets depuis la source de npm directement sans (comme écraser le contrat. Les OpenZeppelin etc.) fonctions pourraient être modifiées ou être sujettes à des vulnérabilités. #2 Principal Un pragma ("floating 8 La consigne pragma Solidity pragma") est défini actuelle est ""^0.8.0"". #3 Principal Validation de 1402, 1365, Vérifiez que l'adresse n'est l'adresse du zéro 1346, 1354, pas égale à zéro manquant (missing- 1350, 1343 zero-check) 24
#4 Principal La visibilité de la 767, 768, La meilleure pratique consiste variable d'état n'est 790, à définir de façon explicite la pas définie visibilité des variables d'état. 25
Problèmes indiqués à titre d'information Probl Fichie Type Lign Description ème r e #1 Principal Variables d'état qui 757, 755, Ajouter les attributs pourraient être 756, 764, `constant` aux variables déclarées constantes 790, 773 d'état qui ne changent (constable- states) jamais #2 Principal Valeurs de retour 1272 Veillez à ce que toutes les inutiles valeurs de retour des appels de fonction soient utilisées et prenez en charge les cas de réussite et d'échec si la logique métier l'exige. Existence de codes commentés Il y a quelques cas de code commenté dans les fichiers suivants qui devraient être supprimés : Line Comment 837 // IPancakeswapV2Router02 _pancakeswapV2Router = IPancakeswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Uniswap Router For Ethereum 1327-1329 // function setSellFee(uint256 fee) external onlyOwnerAndAdmin { // sellFee = fee; // } Recommendation Supprimez le code commenté, ou traitez-les comme il convient. Commentaires concernant l’Audit 10. Décembre 2021: - Lire le rapport complet pour plus d'informations 26
SWC Attacks ID Titre Relations État SW Données CWE-767: Access to Critical C-13 privées non Private Variable via Public APPROUV 6 cryptées On- Method É Chain SW Code sans C-13 CWE-1164: Irrelevant Code APPROUV effets É 5 SW Appel de message avec CWE-655: Improper C-13 APPROUV une quantité Initialization É 4 de gaz codée en dur Collisions de SW hachage avec CWE-294: Authentication C-13 des arguments APPROUV Bypass by Capture-replay É 3 multiples de longueur variable SW Solde d'éther C-13 CWE-667: Improper Locking APPROUV inattendu É 2 SW Présence de C-13 variables CWE-1164: Irrelevant Code APPROUV 1 inutilisées É Caractère de SW contrôle CWE-451: User Interface (UI) C-13 d'annulation Misrepresentation of Critical APPROUV 0 de droite à Information É gauche (U+202E) SW Erreur CWE-480: Use of Incorrect C-12 APPROUV typographique Operator É 9 27
SW DoS avec limite CWE-400: Uncontrolled C-12 APPROUV de gaz de Resource Consumption É 8 blocage 28
SW Saut arbitraire CWE-695: Use of Low-Level C-12 avec une APPROUVÉ Functionality 7 variable de type fonction SW Ordre CWE-696: Incorrect Behavior C-12 d'héritage APPROUVÉ Order 5 incorrect SW Écriture dans un CWE-123: Write-what-where C-12 APPROUVÉ emplace Condition 4 ment de stockage arbitrair e SW Violation des CWE-573: Improper Following C-12 APPROUVÉ exigences of Specification by Caller 3 SW Absence de CWE-345: Insufficient C-12 vérification Verification of Data APPROUVÉ 2 correcte de la Authenticity signature Absence de SW protection CWE-347: Improper Verification C-12 contre les APPROUVÉ of Cryptographic Signature 1 attaques par relecture de signature SW Faibles sources d'aléa des CWE-330: Use of Insufficiently C-12 APPROUVÉ attributs de la Random Values 0 chaîne SW Variables CWE-710: Improper Adherence C-11 APPROUVÉ d'état cachées to Coding Standards 9 SW Nom de CWE-665: Improper C-11 constructeur APPROUVÉ Initialization 8 incorrect 29
SW Malléabilité CWE-347: Improper Verification C-11 APPROUVÉ de la of Cryptographic Signature 7 signature 30
SW Dépendance CWE-829: Inclusion of C-11 Functionality from Untrusted APPROUVÉ vis-à-vis de 6 l'horodatage Control Sphere SW Autorisation CWE-477: Use of Obsolete C-11 par tx.origin APPROUVÉ Function 5 CWE-362: Concurrent SW Dépendance Execution using Shared C-11 de l'ordre de Resource with Improper APPROUVÉ 4 transaction Synchronization ('Race Condition') SW DoS avec échec CWE-703: Improper Check or C-11 Handling of Exceptional APPROUVÉ de l'appel 3 Conditions SW Appel par CWE-829: Inclusion of C-11 délégation à un Functionality from Untrusted APPROUVÉ 2 destinataire Control Sphere non fiable Utilisation SW de CWE-477: Use of Obsolete APPROUVÉ C-111 fonctions Function Solidity obsolètes SW CWE-670: Always-Incorrect C-11 Violation de APPROUVÉ Control Flow Implementation 0 l'assertion SW Pointeur de CWE-824: Access of C-10 APPROUVÉ stockage non Uninitialized Pointer 9 initialisé SW Visibilité par CWE-710: Improper Adherence C-10 défaut d'une NON to Coding Standards APPROUVÉ 8 variable d'état SW CWE-841: Improper C-10 Réentraînement Enforcement of Behavioral NON 7 Workflow APPROUVÉ 31
SW SELFDESTRUC CWE-284: Improper Access C-10 non protégé APPROUVÉ Control 6 T Instruction 32
SW Retrait CWE-284: Improper Access C-10 d'éther non APPROUVÉ Control 5 protégé SW Valeur de CWE-252: Unchecked Return C-10 NON retour d'appel Value APPROUVÉ 4 non vérifiée SW Pragme CWE-664: Improper Control of C-10 a Resource Through its NON flottant APPROUVÉ 3 Lifetime SW Version CWE-937: Using Components C-10 obsolète APPROUVÉ with Known Vulnerabilities 2 du compilat eur SW Débordement C-10 et sous- CWE-682: Incorrect Calculation APPROUVÉ 1 exécution de nombres entiers SW Visibilité de CWE-710: Improper Adherence C-10 la fonction APPROUVÉ to Coding Standards 0 par défaut 33
30
Vous pouvez aussi lire