From d6ab81c0f293551fe586e25752ba27295d9b902f Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Wed, 30 Jul 2025 11:51:46 +0530 Subject: [PATCH 01/31] Add manual-review.md in security-testing --- .../images/structural-diagram.png | Bin 0 -> 101253 bytes src/security-testing/manual-review.md | 198 ++++++++++++++++++ 2 files changed, 198 insertions(+) create mode 100644 src/security-testing/images/structural-diagram.png create mode 100644 src/security-testing/manual-review.md diff --git a/src/security-testing/images/structural-diagram.png b/src/security-testing/images/structural-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..9e09a6db3ab12db20ae840bc51da94ef85b99698 GIT binary patch literal 101253 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%0Dl#F}i7h6)3BN4CyUWqCmqI)d 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 this section focuses more on manual approach, automated testing approaches like fuzzing and F.V can be useful here for checking possible invariant violations across multiple paths. + + As can be seen below everything boil downs to each path. even the ternary expression is a path eventually. + + + ``` + // It may lack a general meaning, but it aims to demonstrate the code with multiple execution paths. + function withdraw(uint256 amount, bool emergency) public { + require(amount > 0, "Withdraw amount must be greater than 0"); + uint256 balance = balances[msg.sender]; + bool success; + + if (emergency) { + success = (address(this).balance >= amount) ? payable(msg.sender).send(amount) : false; + } else { + if (balance >= amount) { + balances[msg.sender] -= amount; + totalBalance -= amount; + success = payable(msg.sender).send(amount); + } else { + success = false; + } + } + + if (!success) { + // call other contract to handle failed withdrawal + } + emit Withdrawn(msg.sender, amount, success); + } + ``` + + In next example, because every value (`_amount`, `minRequired`) can go above and below, the results can vary. If the result is used for some operations like decreasing the `drivingScore` in `burnFuelAndReduce()` for example. + + E.g depending on the amounts are same (as they were while filling the fuel) or increased or decreased, the value of `fuelReduction` will change and while subtracting it from the `drivingScore[msg.sender]` it needs to be handled accordingly. which also creates different paths. + + ``` + function fillFuelAndCalculate(uint256 _amount) public { + require(_amount > minRequired, "ERR"); + fuelTank[msg.sender] += _amount; + drivingScore[msg.sender] += (_amount * multiplier) / minRequired; + } + + function burnFuelAndReduce(uint256 _amount) public { + fuelTank[msg.sender] -= _amount; + uint256 fuelReduction = (_amount * multiplier) / minRequired; + drivingScore[msg.sender] = drivingScore[msg.sender] > fuelReduction ? drivingScore[msg.sender] - fuelReduction : 0; + } + ``` +7. **Write down notes, doubts and edge cases:** +One reason for writing down doubts, ideas, possible issues is, when you start going through these issues as you encounter new path you can see more doubts, possible issues in your mind. so sometimes it becomes a loop where you will keep thinking about new ideas while exploring previous/current one. + - Take notes for understanding or for further checking. + - Doubts: Research on it, Ask applicable doubts to developers. + - Edge cases: for later testing. E.g: [test] Possible reentrancy in unstake() function. + - Try to break business logic while going through every code block. ( again note down the thing that needs to be tested) + - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the Fixed code review. + - The minimal markdown file for taking notes might look like this: + + ``` + # Project Name + ## Scope: + GH link: + Commit hash: + + ## Flow: + 1. Manual review + 2. Functional testing: + - Unit testing + - Edge case testing + 3. Automated testing: + - ... + 4. ... + + ## Resources: + 1. Specification doc: + 2. Whitepaper: + 3. Any other documentation and links. + + ## ToDo: + *Things to do/ remaining things.* + 1. High level things about audit + 2. Developer project walk-through. + 3. ... + + ## Common/Doubts/Research: + 1. Relearn about specific cross chain service/protocol that's getting used. + + ## ContractName.sol + *This contains doubts/points/research/potential bugs regarding the ContractName.sol* + 1. Confirmed issue 1. + 2. Confirmed issue 2. + ### Doubts/Research: + 1. Checking specific formulas. + 2. Checking specific doubt. + 3. Check the subtraction on L453 can be a problem. + 4. [revisit] Revisit something based on the suggestion given. + * Testcases: + 1. [test] User should be able to stake. + 2. [test] Multiple users should be able to stake. + 3. [test] ... + + ## ContractName2.sol + *This contains doubts/points/research/potential bugs regarding the ContractName2.sol* + ... + + --- + ## Questions for developers: + 1. Explanation for formulas. + 2. Questions about intended logic. + 3. ... + ``` +## Functional testing: +1. Check any missing test cases that should be covered. +2. Write and test edge cases from notes taken while manually reviewing contracts. + +## Automated review: +1. [static analysis](security-testing/static-analysis.md) +2. [Fuzz Testing](security-testing/fuzz-testing.md) +3. [formal verification](security-testing/formal-verification.md) + +## Report writing +1. Discussing doubts and found issues with audit team to come on conclusion. +2. Discussing and conveying issues to developers. +3. Report writing: + While structure of the issue/bug to write in the report can vary, These are some of the things that are helpful to include: + - Issues can contains detailed description, recommendation, severity, status, fixed in commit, acknowledgment from developers. + - References to correct functions and line numbers while writing issues. + - Example and POC, helpful for critical bugs. + - Checking the grammar/style for better readability. + +## Fixed code review +1. **Code comparison** helps in identifying updates and detecting any deviations from expected changes. +2. **Reviewing updated code** to check unexpected changes. +3. **Running all the tests** on updated code. +4. **Write new tests for the updated code** if required. +5. **Go through checklists again** for updated functionality (depending on what is updated). +6. **Check things/notes that needs to be revisited** from Manual review: + Sometimes you can have some things noted E.g: adding this fix to the code can create this problem. +8. **Update the report**, issue's status based on the updated code. + - Change status. + - Add 'fixed in' commit link/hash. + - Add comments from audit team (when required). + - Add comments from the project team (when required). + +## Final thoughts: +Having multiple teams/members review each contract individually leads to better results, as it ensures more sets of eyes are examining the code. + +## References +[Auditing mental model by Caliber](https://www.calibersec.com/smart-contract-auditing-mental-model/) From 9636c760ef7ba508d85b19f1b90237de6b2a428d Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Wed, 30 Jul 2025 12:04:30 +0530 Subject: [PATCH 02/31] Fix manual-review.md links in security-testing --- src/security-testing/manual-review.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/security-testing/manual-review.md b/src/security-testing/manual-review.md index 5f6040eb..fc252f57 100644 --- a/src/security-testing/manual-review.md +++ b/src/security-testing/manual-review.md @@ -31,7 +31,7 @@ The approach to manual review can vary from person to person or team to team. Th ![structural diagram](images/structural-diagram.png) ## Manual review: -1. **Understand the flow** from [unit tests](security-testing/unit-testing.md): +1. **Understand the flow** from [unit tests](unit-testing.md): Test cases are important. It gives you understanding of how the setup is, what state needs to be in place for the users to start using entry point of the system. also it gives you time to test more offensive scenarios (after verifying unit tests) instead of using most of the time in testing general scenarios. - When math formulas are involved or complex interconnected calls are involved, debugging the values of variables helps sometime to see how the state changes are happening e.g what is the value of variable x/totalStakedEth before the specific internal/external call. or what it becomes after that call. - Debugging can be done in many ways. depending on which framework you are using. Some examples are. @@ -163,9 +163,9 @@ One reason for writing down doubts, ideas, possible issues is, when you start go 2. Write and test edge cases from notes taken while manually reviewing contracts. ## Automated review: -1. [static analysis](security-testing/static-analysis.md) -2. [Fuzz Testing](security-testing/fuzz-testing.md) -3. [formal verification](security-testing/formal-verification.md) +1. [static analysis](static-analysis.md) +2. [Fuzz Testing](fuzz-testing.md) +3. [formal verification](formal-verification.md) ## Report writing 1. Discussing doubts and found issues with audit team to come on conclusion. From e4fc1ebd2a838a6c17a7025dd249fdd052cd6d22 Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Sun, 3 Aug 2025 18:25:51 +0530 Subject: [PATCH 03/31] Fix format & move manual-review.md to external-security-reviews --- .../images/structural-diagram.png | Bin .../smart-contracts}/manual-review.md | 82 ++++++++++-------- 2 files changed, 48 insertions(+), 34 deletions(-) rename src/{security-testing => external-security-reviews/smart-contracts}/images/structural-diagram.png (100%) rename src/{security-testing => external-security-reviews/smart-contracts}/manual-review.md (81%) diff --git a/src/security-testing/images/structural-diagram.png b/src/external-security-reviews/smart-contracts/images/structural-diagram.png similarity index 100% rename from src/security-testing/images/structural-diagram.png rename to src/external-security-reviews/smart-contracts/images/structural-diagram.png diff --git a/src/security-testing/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md similarity index 81% rename from src/security-testing/manual-review.md rename to src/external-security-reviews/smart-contracts/manual-review.md index fc252f57..7a701d2a 100644 --- a/src/security-testing/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -8,43 +8,50 @@ contributors: users: [the-caliber] --- -# Manual Review: +# Manual Review + Manual review of a smart contract is the process where a security engineer carefully reads through the source code to identify potential vulnerabilities, logic errors, and design flaws. The approach to manual review can vary from person to person or team to team. This document outlines some of the possible things the process can comprise. -## Gather resources: +## Gather resources + 1. Scope. 2. commit hash. 3. Documentation and specification links. 4. Invariant list, if present already. -## Smart contract higher overview: +## Smart contract higher overview + 1. **Documentation and whitepaper walkthrough**. 2. **Simplified math formulas:** Get simplified math formulas if the protocol has any any custom/fancy formulas implemented. 3. Get a **high level idea** behind the project: Through diagrams, developer walkthrough. 4. Get a **structural overview** of the project: Check how integration of contracts and functions is happening throughout the protocol. -5. **Create a diagram:** Based on the structual and functional understanding the high level diagram can be created if required. - - The digram can be modified over a time as you get more understanding. +5. **Create a diagram:** Based on the structural and functional understanding the high level diagram can be created if required. + + - The diagram can be modified over a time as you get more understanding. - The diagram can grow more complex and detailed depending on the time. - - There are many tools that can be used like Excalidraw, Miro, Lucidchart etc. - - High level structural example of staking diagram: - ![structural diagram](images/structural-diagram.png) - -## Manual review: -1. **Understand the flow** from [unit tests](unit-testing.md): - Test cases are important. It gives you understanding of how the setup is, what state needs to be in place for the users to start using entry point of the system. also it gives you time to test more offensive scenarios (after verifying unit tests) instead of using most of the time in testing general scenarios. - - When math formulas are involved or complex interconnected calls are involved, debugging the values of variables helps sometime to see how the state changes are happening e.g what is the value of variable x/totalStakedEth before the specific internal/external call. or what it becomes after that call. - - Debugging can be done in many ways. depending on which framework you are using. Some examples are. - - Foundry - native debugger, console logs in the contracts, Tenderly debugger, simbolik. - - Hardhat - console logs in the contracts, debuggers like Hardhat-tracer, Tenderly debugger. -2. **Choose least dependent contract to review one by one:** - This can be done by looking into a diagram and current understanding of the smart contract functionality. For example in this case it's a Token contracts that is least dependent ( in fact the functionality from that contract is getting used in other contracts so other smart contracts are dependent on it). + - There are many tools that can be used like Excalidraw, Miro, Lucidchart etc. + - High level structural example of staking diagram: + ![structural diagram](images/structural-diagram.png) + +## Manual review + +1. **Understand the flow** from [unit tests](../../security-testing/unit-testing.md): + Test cases are important. It gives you understanding of how the setup is, what state needs to be in place for the users to start using entry point of the system. also it gives you time to test more offensive scenarios (after verifying unit tests) instead of using most of the time in testing general scenarios. + + - When math formulas are involved or complex interconnected calls are involved, debugging the values of variables helps sometime to see how the state changes are happening e.g what is the value of variable x/totalStakedEth before the specific internal/external call. or what it becomes after that call. + - Debugging can be done in many ways. depending on which framework you are using. Some examples are. + - Foundry - native debugger, console logs in the contracts, Tenderly debugger, simbolik. + - Hardhat - console logs in the contracts, debuggers like Hardhat-tracer, Tenderly debugger. + +2. **Choose least dependent contract to review one by one:** + This can be done by looking into a diagram and current understanding of the smart contract functionality. For example in this case it's a Token contracts that is least dependent ( in fact the functionality from that contract is getting used in other contracts so other smart contracts are dependent on it). 3. **Checklist reviews:** - Known smart contracts vulnerabilities. - Smart Contract Weakness Classification (SWC) - Project specific checklists (e.g When dealing with bridges it's also important to check bridge specific checklists). 4. **Maintain list of invariants** for every functions (Can be useful later for other tests/fuzzing/F.V). -5. **Offensively analyse the code** to check logical issues and also out of the box issues. +5. **Offensively analyze the code** to check logical issues and also out of the box issues. 6. **Visit all paths:** Visiting all paths in a smart contract is crucial from a security perspective. For example, in the below withdraw() function, every path has its own potential security implications and behavior that needs to be verified. Sometimes these unexpected paths lead us to potential bugs. @@ -52,8 +59,7 @@ The approach to manual review can vary from person to person or team to team. Th As can be seen below everything boil downs to each path. even the ternary expression is a path eventually. - - ``` + ```solidity // It may lack a general meaning, but it aims to demonstrate the code with multiple execution paths. function withdraw(uint256 amount, bool emergency) public { require(amount > 0, "Withdraw amount must be greater than 0"); @@ -83,7 +89,7 @@ The approach to manual review can vary from person to person or team to team. Th E.g depending on the amounts are same (as they were while filling the fuel) or increased or decreased, the value of `fuelReduction` will change and while subtracting it from the `drivingScore[msg.sender]` it needs to be handled accordingly. which also creates different paths. - ``` + ```solidity function fillFuelAndCalculate(uint256 _amount) public { require(_amount > minRequired, "ERR"); fuelTank[msg.sender] += _amount; @@ -96,6 +102,7 @@ The approach to manual review can vary from person to person or team to team. Th drivingScore[msg.sender] = drivingScore[msg.sender] > fuelReduction ? drivingScore[msg.sender] - fuelReduction : 0; } ``` + 7. **Write down notes, doubts and edge cases:** One reason for writing down doubts, ideas, possible issues is, when you start going through these issues as you encounter new path you can see more doubts, possible issues in your mind. so sometimes it becomes a loop where you will keep thinking about new ideas while exploring previous/current one. - Take notes for understanding or for further checking. @@ -105,7 +112,7 @@ One reason for writing down doubts, ideas, possible issues is, when you start go - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the Fixed code review. - The minimal markdown file for taking notes might look like this: - ``` + ```markdown # Project Name ## Scope: GH link: @@ -158,26 +165,31 @@ One reason for writing down doubts, ideas, possible issues is, when you start go 2. Questions about intended logic. 3. ... ``` -## Functional testing: + +## Functional testing + 1. Check any missing test cases that should be covered. 2. Write and test edge cases from notes taken while manually reviewing contracts. -## Automated review: -1. [static analysis](static-analysis.md) -2. [Fuzz Testing](fuzz-testing.md) -3. [formal verification](formal-verification.md) +## Automated review + +1. [static analysis](../../security-testing/static-analysis.md) +2. [Fuzz Testing](../../security-testing/fuzz-testing.md) +3. [formal verification](../../security-testing/formal-verification.md) + +## Report writing -## Report writing 1. Discussing doubts and found issues with audit team to come on conclusion. 2. Discussing and conveying issues to developers. -3. Report writing: +3. Report writing: While structure of the issue/bug to write in the report can vary, These are some of the things that are helpful to include: - Issues can contains detailed description, recommendation, severity, status, fixed in commit, acknowledgment from developers. - References to correct functions and line numbers while writing issues. - Example and POC, helpful for critical bugs. - Checking the grammar/style for better readability. -## Fixed code review +## Fixed code review + 1. **Code comparison** helps in identifying updates and detecting any deviations from expected changes. 2. **Reviewing updated code** to check unexpected changes. 3. **Running all the tests** on updated code. @@ -185,14 +197,16 @@ One reason for writing down doubts, ideas, possible issues is, when you start go 5. **Go through checklists again** for updated functionality (depending on what is updated). 6. **Check things/notes that needs to be revisited** from Manual review: Sometimes you can have some things noted E.g: adding this fix to the code can create this problem. -8. **Update the report**, issue's status based on the updated code. +7. **Update the report**, issue's status based on the updated code. - Change status. - Add 'fixed in' commit link/hash. - Add comments from audit team (when required). - Add comments from the project team (when required). -## Final thoughts: +## Final thoughts + Having multiple teams/members review each contract individually leads to better results, as it ensures more sets of eyes are examining the code. -## References +## References + [Auditing mental model by Caliber](https://www.calibersec.com/smart-contract-auditing-mental-model/) From 6995c59b78e9d9a910f0521187c2b710c149d1ea Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Sun, 3 Aug 2025 18:33:23 +0530 Subject: [PATCH 04/31] Add ref link to manual-review.md --- src/external-security-reviews/smart-contracts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/README.md b/src/external-security-reviews/smart-contracts/README.md index d3b6f206..c87f3a54 100644 --- a/src/external-security-reviews/smart-contracts/README.md +++ b/src/external-security-reviews/smart-contracts/README.md @@ -37,7 +37,7 @@ A security review engagement is typically divided into four phases: - **Static Analysis**: Automated code scanning for known vulnerability patterns - **Dynamic Analysis**: Runtime testing and fuzzing -- **Manual Review**: Expert analysis of business logic and complex vulnerabilities +- [**Manual Review**](manual-review.md): Expert analysis of business logic and complex vulnerabilities - **Formal Verification**: Mathematical proofs of contract correctness (where applicable) ## Types of Smart Contract Audits From f0e36cc10be552f4946b38ec9de591a15733309b Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Sun, 3 Aug 2025 19:20:58 +0530 Subject: [PATCH 05/31] Fix summary.md.develop --- src/config/SUMMARY.md.develop | 1 + src/external-security-reviews/smart-contracts/manual-review.md | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/config/SUMMARY.md.develop b/src/config/SUMMARY.md.develop index cdba912c..15f57bc2 100644 --- a/src/config/SUMMARY.md.develop +++ b/src/config/SUMMARY.md.develop @@ -51,6 +51,7 @@ - [External Security Reviews](./external-security-reviews/README.md) - [Smart Contract Audits](./external-security-reviews/smart-contracts/README.md) - [Expectations](./external-security-reviews/smart-contracts/expectation.md) + - [Manual Review](./external-security-reviews/smart-contracts/manual-review.md) - [Preparation Guide](./external-security-reviews/smart-contracts/preparation.md) - [Vendor Selection](./external-security-reviews/smart-contracts/vendor-selection.md) - [Security Policies and Procedures](./external-security-reviews/security-policies-procedures.md) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 7a701d2a..980dc83a 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -58,7 +58,6 @@ The approach to manual review can vary from person to person or team to team. Th >While this section focuses more on manual approach, automated testing approaches like fuzzing and F.V can be useful here for checking possible invariant violations across multiple paths. As can be seen below everything boil downs to each path. even the ternary expression is a path eventually. - ```solidity // It may lack a general meaning, but it aims to demonstrate the code with multiple execution paths. function withdraw(uint256 amount, bool emergency) public { @@ -88,7 +87,6 @@ The approach to manual review can vary from person to person or team to team. Th In next example, because every value (`_amount`, `minRequired`) can go above and below, the results can vary. If the result is used for some operations like decreasing the `drivingScore` in `burnFuelAndReduce()` for example. E.g depending on the amounts are same (as they were while filling the fuel) or increased or decreased, the value of `fuelReduction` will change and while subtracting it from the `drivingScore[msg.sender]` it needs to be handled accordingly. which also creates different paths. - ```solidity function fillFuelAndCalculate(uint256 _amount) public { require(_amount > minRequired, "ERR"); @@ -111,7 +109,6 @@ One reason for writing down doubts, ideas, possible issues is, when you start go - Try to break business logic while going through every code block. ( again note down the thing that needs to be tested) - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the Fixed code review. - The minimal markdown file for taking notes might look like this: - ```markdown # Project Name ## Scope: From ad49585140b1a4f4300c41b4668fbc61cc48ed3a Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Tue, 5 Aug 2025 22:32:03 +0530 Subject: [PATCH 06/31] Update outline and manual-review.md --- src/SUMMARY.md | 1 + src/config/SUMMARY.md.develop | 2 +- .../smart-contracts/manual-review.md | 61 +++++++++++++------ 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index bb8b8433..6d2be12b 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -50,6 +50,7 @@ - [Tools & Resources](./wallet-security/tools-&-resources.md) - [External Security Reviews](./external-security-reviews/README.md) - [Smart Contract Audits](./external-security-reviews/smart-contracts/README.md) + - [Manual Review](./external-security-reviews/smart-contracts/manual-review.md) - [Expectations](./external-security-reviews/smart-contracts/expectation.md) - [Preparation Guide](./external-security-reviews/smart-contracts/preparation.md) - [Vendor Selection](./external-security-reviews/smart-contracts/vendor-selection.md) diff --git a/src/config/SUMMARY.md.develop b/src/config/SUMMARY.md.develop index 15f57bc2..c2ba8064 100644 --- a/src/config/SUMMARY.md.develop +++ b/src/config/SUMMARY.md.develop @@ -50,8 +50,8 @@ - [Tools & Resources](./wallet-security/tools-&-resources.md) - [External Security Reviews](./external-security-reviews/README.md) - [Smart Contract Audits](./external-security-reviews/smart-contracts/README.md) + - [Manual Review](./external-security-reviews/smart-contracts/manual-review.md) - [Expectations](./external-security-reviews/smart-contracts/expectation.md) - - [Manual Review](./external-security-reviews/smart-contracts/manual-review.md) - [Preparation Guide](./external-security-reviews/smart-contracts/preparation.md) - [Vendor Selection](./external-security-reviews/smart-contracts/vendor-selection.md) - [Security Policies and Procedures](./external-security-reviews/security-policies-procedures.md) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 980dc83a..b4010848 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -16,18 +16,24 @@ The approach to manual review can vary from person to person or team to team. Th ## Gather resources 1. Scope. + 2. commit hash. + 3. Documentation and specification links. + 4. Invariant list, if present already. ## Smart contract higher overview -1. **Documentation and whitepaper walkthrough**. +1. **Documentation and whitepaper walkthrough**. + 2. **Simplified math formulas:** Get simplified math formulas if the protocol has any any custom/fancy formulas implemented. + 3. Get a **high level idea** behind the project: Through diagrams, developer walkthrough. + 4. Get a **structural overview** of the project: Check how integration of contracts and functions is happening throughout the protocol. -5. **Create a diagram:** Based on the structural and functional understanding the high level diagram can be created if required. +5. **Create a diagram:** Based on the structural and functional understanding the high level diagram can be created if required. - The diagram can be modified over a time as you get more understanding. - The diagram can grow more complex and detailed depending on the time. - There are many tools that can be used like Excalidraw, Miro, Lucidchart etc. @@ -46,18 +52,23 @@ The approach to manual review can vary from person to person or team to team. Th 2. **Choose least dependent contract to review one by one:** This can be done by looking into a diagram and current understanding of the smart contract functionality. For example in this case it's a Token contracts that is least dependent ( in fact the functionality from that contract is getting used in other contracts so other smart contracts are dependent on it). + 3. **Checklist reviews:** - Known smart contracts vulnerabilities. - Smart Contract Weakness Classification (SWC) - Project specific checklists (e.g When dealing with bridges it's also important to check bridge specific checklists). + 4. **Maintain list of invariants** for every functions (Can be useful later for other tests/fuzzing/F.V). + 5. **Offensively analyze the code** to check logical issues and also out of the box issues. + 6. **Visit all paths:** Visiting all paths in a smart contract is crucial from a security perspective. For example, in the below withdraw() function, every path has its own potential security implications and behavior that needs to be verified. Sometimes these unexpected paths lead us to potential bugs. >While this section focuses more on manual approach, automated testing approaches like fuzzing and F.V can be useful here for checking possible invariant violations across multiple paths. As can be seen below everything boil downs to each path. even the ternary expression is a path eventually. + ```solidity // It may lack a general meaning, but it aims to demonstrate the code with multiple execution paths. function withdraw(uint256 amount, bool emergency) public { @@ -87,6 +98,7 @@ The approach to manual review can vary from person to person or team to team. Th In next example, because every value (`_amount`, `minRequired`) can go above and below, the results can vary. If the result is used for some operations like decreasing the `drivingScore` in `burnFuelAndReduce()` for example. E.g depending on the amounts are same (as they were while filling the fuel) or increased or decreased, the value of `fuelReduction` will change and while subtracting it from the `drivingScore[msg.sender]` it needs to be handled accordingly. which also creates different paths. + ```solidity function fillFuelAndCalculate(uint256 _amount) public { require(_amount > minRequired, "ERR"); @@ -107,8 +119,9 @@ One reason for writing down doubts, ideas, possible issues is, when you start go - Doubts: Research on it, Ask applicable doubts to developers. - Edge cases: for later testing. E.g: [test] Possible reentrancy in unstake() function. - Try to break business logic while going through every code block. ( again note down the thing that needs to be tested) - - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the Fixed code review. + - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the **Fixed code review**. - The minimal markdown file for taking notes might look like this: + ```markdown # Project Name ## Scope: @@ -165,36 +178,48 @@ One reason for writing down doubts, ideas, possible issues is, when you start go ## Functional testing -1. Check any missing test cases that should be covered. -2. Write and test edge cases from notes taken while manually reviewing contracts. +1. Check any missing test cases that should be covered. + +2. Write and test edge cases from notes taken while manually reviewing contracts. ## Automated review -1. [static analysis](../../security-testing/static-analysis.md) -2. [Fuzz Testing](../../security-testing/fuzz-testing.md) -3. [formal verification](../../security-testing/formal-verification.md) +1. [static analysis](../../security-testing/static-analysis.md) + +2. [Fuzz Testing](../../security-testing/fuzz-testing.md) + +3. [formal verification](../../security-testing/formal-verification.md) ## Report writing -1. Discussing doubts and found issues with audit team to come on conclusion. -2. Discussing and conveying issues to developers. +1. Discussing doubts and found issues with audit team to come on conclusion. + +2. Discussing and conveying issues to developers. + 3. Report writing: While structure of the issue/bug to write in the report can vary, These are some of the things that are helpful to include: - - Issues can contains detailed description, recommendation, severity, status, fixed in commit, acknowledgment from developers. + - Issues can contain detailed description, recommendation, severity, status, fixed in commit, acknowledgment from developers. - References to correct functions and line numbers while writing issues. - Example and POC, helpful for critical bugs. - Checking the grammar/style for better readability. ## Fixed code review -1. **Code comparison** helps in identifying updates and detecting any deviations from expected changes. -2. **Reviewing updated code** to check unexpected changes. -3. **Running all the tests** on updated code. -4. **Write new tests for the updated code** if required. -5. **Go through checklists again** for updated functionality (depending on what is updated). -6. **Check things/notes that needs to be revisited** from Manual review: - Sometimes you can have some things noted E.g: adding this fix to the code can create this problem. +1. **Code comparison** helps in identifying updates and detecting any deviations from expected changes. + +2. **Reviewing updated code** to check unexpected changes. + +3. **Running all the tests** on updated code. + +4. **Write new tests for the updated code** if required. + +5. **Go through checklists again** for updated functionality (depending on what is updated). + +6. **Check things/notes that needs to be revisited** from **Manual review**: + Sometimes you can have some things noted E.g: adding this fix to the code can create this problem. + 7. **Update the report**, issue's status based on the updated code. + - Change status. - Add 'fixed in' commit link/hash. - Add comments from audit team (when required). From a626c7a8f5179836dbe6c4f02c97656af98630f9 Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Tue, 19 Aug 2025 22:30:33 +0530 Subject: [PATCH 07/31] Update manual-review.md --- .../smart-contracts/manual-review.md | 148 ++++++++++++------ 1 file changed, 101 insertions(+), 47 deletions(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index b4010848..45d63e9b 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -10,64 +10,107 @@ contributors: # Manual Review -Manual review of a smart contract is the process where a security engineer carefully reads through the source code to identify potential vulnerabilities, logic errors, and design flaws. +Manual review of a smart contract is the process of carefully examining the source code to identify potential vulnerabilities, logic errors, and design flaws. The approach to manual review can vary from person to person or team to team. This document outlines some of the possible things the process can comprise. ## Gather resources -1. Scope. +1. **Scope:** +This can be a link to the code repository. e.g. Github, Gitlab link which consist of all the smart contracts required to be reviewed. -2. commit hash. +2. **commit hash:** +Agree on a specific commit hash from the repository and freeze the previously defined scope. Avoid continuous modifications to the codebase. Any changes should be communicated, and the commit hash should be updated for the code under review. -3. Documentation and specification links. +3. **Documentation and specification:** + - Documentation describes how the code works, how to use it, and its expected functionality. + - Specification defines the exact requirements, constraints, and behaviors the system must meet, including invariants that must always hold true. + - Invariant is the property of the system that should always hold. Invariants can be useful for checking the expected behavior of the system when the certain actions or a transaction flow is executed. Invariants are useful in many testing approaches, including manual reviews, where a reviewer checks whether a specific property can be violated for a function under any sequence of function calls. + - Get simplified math formulas if the protocol has any custom/fancy formulas implemented. -4. Invariant list, if present already. +4. **Tests:** +Tests are important for understanding the expected behavior and ensuring that the system works as intended. The following types of tests can be useful for understanding and verifying the code: + - [unit tests](../../security-testing/unit-testing.md): Unit tests ensure that individual functions behave correctly under expected conditions. + - [Integration Tests](../../security-testing/integration-testing.md): Integration tests verify that your smart contracts work correctly with real external systems. ## Smart contract higher overview -1. **Documentation and whitepaper walkthrough**. +1. **Documentation and whitepaper walkthrough:** +Go through the whitepaper and documentation to gain a better understanding of the project and to see how the proposed business logic is structured. What are the involved components. -2. **Simplified math formulas:** Get simplified math formulas if the protocol has any any custom/fancy formulas implemented. +2. **High level idea:** +Get a high level idea behind the project: Through diagrams, developer walkthrough. -3. Get a **high level idea** behind the project: Through diagrams, developer walkthrough. +3. **Structural overview:** +Get a structural overview of the project: Check how integration of contracts and functions is happening throughout the protocol. -4. Get a **structural overview** of the project: Check how integration of contracts and functions is happening throughout the protocol. - -5. **Create a diagram:** Based on the structural and functional understanding the high level diagram can be created if required. +4. **Create a diagram::** +Based on the structural and functional understanding the high level diagram can be created if required. - The diagram can be modified over a time as you get more understanding. - The diagram can grow more complex and detailed depending on the time. - - There are many tools that can be used like Excalidraw, Miro, Lucidchart etc. + - There are many tools that can be used like Excalidraw, Miro, Lucidchart, Mermaid etc. - High level structural example of staking diagram: - ![structural diagram](images/structural-diagram.png) + + ```mermaid + classDiagram + direction LR + class Token { + +mint() + +burn() + +transfer() + +transferFrom() + } + class Staking { + +constructor() + +stake() + +unstake() + +getStakedAmount() + +getTotalStaked() + } + class Rewards { + +calculateRewards() + +claimRewards() + +initialize() + } + class Bridge { + +transferToChain() + +transferFromChain() + } + Token --> Staking: used in + Staking --> Token + Staking --> Rewards + Staking --> Bridge : bridges token + ``` ## Manual review -1. **Understand the flow** from [unit tests](../../security-testing/unit-testing.md): - Test cases are important. It gives you understanding of how the setup is, what state needs to be in place for the users to start using entry point of the system. also it gives you time to test more offensive scenarios (after verifying unit tests) instead of using most of the time in testing general scenarios. +1. **Understand the flow:** +Understand the flow from [unit](../../security-testing/unit-testing.md) and [Integration](../../security-testing/integration-testing.md) tests. Test cases are important. They give you an understanding of how the setup works and what state needs to be in place for users to start using the system’s entry points. They also give you time to test more offensive or edge-case scenarios (after verifying unit tests) instead of spending most of your time testing general scenarios. - - When math formulas are involved or complex interconnected calls are involved, debugging the values of variables helps sometime to see how the state changes are happening e.g what is the value of variable x/totalStakedEth before the specific internal/external call. or what it becomes after that call. + - When math formulas or complex interconnected calls are involved, debugging the values of variables helps sometime to see how the state changes are happening e.g. what is the value of variable `x/totalStakedEth` before the specific internal/external call. or what it becomes after that call. - Debugging can be done in many ways. depending on which framework you are using. Some examples are. - Foundry - native debugger, console logs in the contracts, Tenderly debugger, simbolik. - Hardhat - console logs in the contracts, debuggers like Hardhat-tracer, Tenderly debugger. 2. **Choose least dependent contract to review one by one:** - This can be done by looking into a diagram and current understanding of the smart contract functionality. For example in this case it's a Token contracts that is least dependent ( in fact the functionality from that contract is getting used in other contracts so other smart contracts are dependent on it). + This can be done by looking into a diagram and current understanding of the smart contract functionality. For example in this case it's a Token contract that is least dependent ( in fact the functionality from that contract is getting used in other contracts so other smart contracts are dependent on it). -3. **Checklist reviews:** +3. **Checklist reviews:** - Known smart contracts vulnerabilities. - - Smart Contract Weakness Classification (SWC) - - Project specific checklists (e.g When dealing with bridges it's also important to check bridge specific checklists). + - Smart Contract Weakness Classification (SWC). + - Project specific checklists (e.g. When dealing with bridges it's also important to check bridge specific checklists). -4. **Maintain list of invariants** for every functions (Can be useful later for other tests/fuzzing/F.V). +4. **Maintain a list of invariants:** +Maintain a list of invariants for every functions (Can be useful later for other tests/fuzzing/F.V). -5. **Offensively analyze the code** to check logical issues and also out of the box issues. +5. **Offensively analyze the code:** +Offensively analyze the code to identify logical issues, edge cases, and any conditions that could break invariants. -6. **Visit all paths:** - Visiting all paths in a smart contract is crucial from a security perspective. For example, in the below withdraw() function, every path has its own potential security implications and behavior that needs to be verified. Sometimes these unexpected paths lead us to potential bugs. +6. **Visit all paths:** + Visiting all paths in a smart contract is crucial from a security perspective. For example, in the below `withdraw()` function, every path has its own potential security implications and behavior that needs to be verified. Sometimes these unexpected paths lead us to potential bugs. - >While this section focuses more on manual approach, automated testing approaches like fuzzing and F.V can be useful here for checking possible invariant violations across multiple paths. + > While this section focuses more on manual approach, automated testing approaches like fuzzing and F.V can be useful here for checking possible invariant violations across multiple paths. - As can be seen below everything boil downs to each path. even the ternary expression is a path eventually. + As can be seen below, everything boils down to each path. Even the ternary expression is ultimately a path. ```solidity // It may lack a general meaning, but it aims to demonstrate the code with multiple execution paths. @@ -97,7 +140,7 @@ The approach to manual review can vary from person to person or team to team. Th In next example, because every value (`_amount`, `minRequired`) can go above and below, the results can vary. If the result is used for some operations like decreasing the `drivingScore` in `burnFuelAndReduce()` for example. - E.g depending on the amounts are same (as they were while filling the fuel) or increased or decreased, the value of `fuelReduction` will change and while subtracting it from the `drivingScore[msg.sender]` it needs to be handled accordingly. which also creates different paths. + E.g. depending on the amounts are same (as they were while filling the fuel) or increased or decreased, the value of `fuelReduction` will change and while subtracting it from the `drivingScore[msg.sender]` it needs to be handled accordingly. which also creates different paths. ```solidity function fillFuelAndCalculate(uint256 _amount) public { @@ -184,46 +227,57 @@ One reason for writing down doubts, ideas, possible issues is, when you start go ## Automated review -1. [static analysis](../../security-testing/static-analysis.md) - -2. [Fuzz Testing](../../security-testing/fuzz-testing.md) +While automated review can be classified as a different approach from manual review, it is useful to use techniques such as [static analysis](../../security-testing/static-analysis.md) to identify low-hanging bugs by triaging warnings from tools like [Slither](https://github.com/crytic/slither), [Wake](https://github.com/Ackee-Blockchain/wake), [aderyn](https://github.com/Cyfrin/aderyn) etc. -3. [formal verification](../../security-testing/formal-verification.md) +> There are other types of automated testing approaches, such as [Fuzz Testing](../../security-testing/fuzz-testing.md) and [formal verification](../../security-testing/formal-verification.md), can also be helpful at different stages of the audit life-cycle, though they are less directly related to manual review. ## Report writing -1. Discussing doubts and found issues with audit team to come on conclusion. +1. **Doubts and issue discussion with internal team:** +Discuss any doubts and identified issues with the internal team or, if applicable, with the team of reviewers working in parallel on the project. This will help you reach a conclusion. -2. Discussing and conveying issues to developers. +2. **Doubts and issue discussion with the developers or project team:** +Discuss and convey issues to the developers or project teams, as applicable. The goal is the technical dev. members of team should get issues so they can try to fix them. It can save time in large projects once the report is delivered. -3. Report writing: - While structure of the issue/bug to write in the report can vary, These are some of the things that are helpful to include: - - Issues can contain detailed description, recommendation, severity, status, fixed in commit, acknowledgment from developers. +3. **Report writing:** + While the structure of a report and the issues/bugs it documents may vary, the following elements are helpful to include: + - Public link to the code repository. + - The commit hash pointing to the recently reviewed commit. + - Issues can include a detailed description, recommendations, severity, status, the commit where the issue was fixed, and acknowledgments from developers. - References to correct functions and line numbers while writing issues. - Example and POC, helpful for critical bugs. - Checking the grammar/style for better readability. ## Fixed code review -1. **Code comparison** helps in identifying updates and detecting any deviations from expected changes. +For checking fixed code, it may be necessary to repeat previously performed actions, depending on what has changed. Some actions can include: -2. **Reviewing updated code** to check unexpected changes. +1. **Code comparison:** +This helps in identifying updates and detecting deviations from expected changes. For example, on a visual level, changes may be observed in functions that were not expected to change. -3. **Running all the tests** on updated code. +2. **Reviewing updated code:** +Review the updated code to check expected and unexpected changes. -4. **Write new tests for the updated code** if required. +3. **Run all the tests:** +Run all available tests on the updated code to ensure the newly updated code does not break any invariant. -5. **Go through checklists again** for updated functionality (depending on what is updated). +4. **Write new tests for the updated code:** +If the updated code creates any new control flow paths it's necessary to write tests to visit those paths and to ensure it yields the expected output. -6. **Check things/notes that needs to be revisited** from **Manual review**: - Sometimes you can have some things noted E.g: adding this fix to the code can create this problem. +5. **Go through checklists again:** +For the updated functionality (depending on what has been changed), review the checklists to ensure that no vulnerabilities remain or have been introduced. -7. **Update the report**, issue's status based on the updated code. +6. **Check things/notes that needs to be revisited:** +Check items or notes that need to be revisited from the manual review. Sometimes you may have observations noted, e.g., Adding this fix to the code can create this problem. - - Change status. - - Add 'fixed in' commit link/hash. - - Add comments from audit team (when required). +7. **Update the report:** +Update the report and issue status based on the updated code. + - Change the status. + - Add/update most recently reviewed commit link/hash. + - Add comments from the audit team (when required). + - These may include, for example, the reason why an issue remains open, any unresolved security concerns, or even new issues created by the fixes, but are not limited to these. - Add comments from the project team (when required). + - These may include the reasons why an issue is acknowledged, or mitigations that will not be implemented at the smart contract level, but are not limited to these. ## Final thoughts From 0f3769cc1d7351cbb722fa6602e74cb0145ebda2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:22:16 -0300 Subject: [PATCH 08/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 45d63e9b..90e85c7a 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -18,7 +18,7 @@ The approach to manual review can vary from person to person or team to team. Th 1. **Scope:** This can be a link to the code repository. e.g. Github, Gitlab link which consist of all the smart contracts required to be reviewed. -2. **commit hash:** +2. **Commit hash:** Agree on a specific commit hash from the repository and freeze the previously defined scope. Avoid continuous modifications to the codebase. Any changes should be communicated, and the commit hash should be updated for the code under review. 3. **Documentation and specification:** From 1c864d91b5bd810f612c2e5632e231386dd26e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:22:25 -0300 Subject: [PATCH 09/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 90e85c7a..3b24a3ac 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -87,7 +87,7 @@ Based on the structural and functional understanding the high level diagram can Understand the flow from [unit](../../security-testing/unit-testing.md) and [Integration](../../security-testing/integration-testing.md) tests. Test cases are important. They give you an understanding of how the setup works and what state needs to be in place for users to start using the system’s entry points. They also give you time to test more offensive or edge-case scenarios (after verifying unit tests) instead of spending most of your time testing general scenarios. - When math formulas or complex interconnected calls are involved, debugging the values of variables helps sometime to see how the state changes are happening e.g. what is the value of variable `x/totalStakedEth` before the specific internal/external call. or what it becomes after that call. - - Debugging can be done in many ways. depending on which framework you are using. Some examples are. + - Debugging can be done in many ways, depending on which framework you are using. Some examples are. - Foundry - native debugger, console logs in the contracts, Tenderly debugger, simbolik. - Hardhat - console logs in the contracts, debuggers like Hardhat-tracer, Tenderly debugger. From 12ef4da6f1957bb3c00cfdc938dc66c68e08a2ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:22:33 -0300 Subject: [PATCH 10/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 3b24a3ac..b0fea9fd 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -43,7 +43,7 @@ Get a high level idea behind the project: Through diagrams, developer walkthroug 3. **Structural overview:** Get a structural overview of the project: Check how integration of contracts and functions is happening throughout the protocol. -4. **Create a diagram::** +4. **Create a diagram:** Based on the structural and functional understanding the high level diagram can be created if required. - The diagram can be modified over a time as you get more understanding. - The diagram can grow more complex and detailed depending on the time. From 05b03b3f08a0e6703fd1b9c12670a6c9b9a66236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:24:16 -0300 Subject: [PATCH 11/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index b0fea9fd..25d9acb2 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -24,7 +24,7 @@ Agree on a specific commit hash from the repository and freeze the previously de 3. **Documentation and specification:** - Documentation describes how the code works, how to use it, and its expected functionality. - Specification defines the exact requirements, constraints, and behaviors the system must meet, including invariants that must always hold true. - - Invariant is the property of the system that should always hold. Invariants can be useful for checking the expected behavior of the system when the certain actions or a transaction flow is executed. Invariants are useful in many testing approaches, including manual reviews, where a reviewer checks whether a specific property can be violated for a function under any sequence of function calls. + - Invariants are the properties of the system that should always hold. Invariants can be useful for checking the expected behavior of the system when the certain actions or a transaction flow is executed. Invariants are useful in many testing approaches, including manual reviews, where a reviewer checks whether a specific property can be violated for a function under any sequence of function calls. - Get simplified math formulas if the protocol has any custom/fancy formulas implemented. 4. **Tests:** From 45fb8e646c1d2d09f1fc7c437c14bd5b4e630a1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:24:24 -0300 Subject: [PATCH 12/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 25d9acb2..177f53e9 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -250,7 +250,7 @@ Discuss and convey issues to the developers or project teams, as applicable. The ## Fixed code review -For checking fixed code, it may be necessary to repeat previously performed actions, depending on what has changed. Some actions can include: +For checking fixed code, it may be necessary to repeat previously performed actions, depending on what has changed. To avoid repeating work, you can: 1. **Code comparison:** This helps in identifying updates and detecting deviations from expected changes. For example, on a visual level, changes may be observed in functions that were not expected to change. From 2599d55243105736238812066e0ead04d8bfaf01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:24:45 -0300 Subject: [PATCH 13/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 177f53e9..4f8abd47 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -92,7 +92,7 @@ Understand the flow from [unit](../../security-testing/unit-testing.md) and [Int - Hardhat - console logs in the contracts, debuggers like Hardhat-tracer, Tenderly debugger. 2. **Choose least dependent contract to review one by one:** - This can be done by looking into a diagram and current understanding of the smart contract functionality. For example in this case it's a Token contract that is least dependent ( in fact the functionality from that contract is getting used in other contracts so other smart contracts are dependent on it). + This can be done by looking into a diagram and current understanding of the smart contract functionality. For example in this case it's a Token contract that is least dependent (in fact the functionality from that contract is getting used in other contracts so other smart contracts are dependent on it). 3. **Checklist reviews:** - Known smart contracts vulnerabilities. From 6255be61617736d103b29a2c33e9868dabb797bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:32:28 -0300 Subject: [PATCH 14/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 4f8abd47..9a208bac 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -100,7 +100,7 @@ Understand the flow from [unit](../../security-testing/unit-testing.md) and [Int - Project specific checklists (e.g. When dealing with bridges it's also important to check bridge specific checklists). 4. **Maintain a list of invariants:** -Maintain a list of invariants for every functions (Can be useful later for other tests/fuzzing/F.V). +Maintain a list of invariants for every functions (Can be useful later for other tests/fuzzing/format verification). 5. **Offensively analyze the code:** Offensively analyze the code to identify logical issues, edge cases, and any conditions that could break invariants. From 95415fb95ea07065027f501d8d9da7de2c59558c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:32:42 -0300 Subject: [PATCH 15/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 9a208bac..f959cc4a 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -253,7 +253,7 @@ Discuss and convey issues to the developers or project teams, as applicable. The For checking fixed code, it may be necessary to repeat previously performed actions, depending on what has changed. To avoid repeating work, you can: 1. **Code comparison:** -This helps in identifying updates and detecting deviations from expected changes. For example, on a visual level, changes may be observed in functions that were not expected to change. +This helps in identifying updates and detecting deviations from expected changes. For example, a git diff may reveal changes in functions that should not have been changed. 2. **Reviewing updated code:** Review the updated code to check expected and unexpected changes. From 6d38d7db3bd3072dd0cbabe32524923738c9bbf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:32:57 -0300 Subject: [PATCH 16/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index f959cc4a..8287d1b9 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -108,7 +108,7 @@ Offensively analyze the code to identify logical issues, edge cases, and any con 6. **Visit all paths:** Visiting all paths in a smart contract is crucial from a security perspective. For example, in the below `withdraw()` function, every path has its own potential security implications and behavior that needs to be verified. Sometimes these unexpected paths lead us to potential bugs. - > While this section focuses more on manual approach, automated testing approaches like fuzzing and F.V can be useful here for checking possible invariant violations across multiple paths. + > While this section focuses more on manual approach, automated testing approaches like fuzzing and formal verification can be useful here for checking possible invariant violations across multiple paths. As can be seen below, everything boils down to each path. Even the ternary expression is ultimately a path. From 9aac59d7d89add286b966775319acf04f93ac88f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:41:09 -0300 Subject: [PATCH 17/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 8287d1b9..4f274cf3 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -106,7 +106,7 @@ Maintain a list of invariants for every functions (Can be useful later for other Offensively analyze the code to identify logical issues, edge cases, and any conditions that could break invariants. 6. **Visit all paths:** - Visiting all paths in a smart contract is crucial from a security perspective. For example, in the below `withdraw()` function, every path has its own potential security implications and behavior that needs to be verified. Sometimes these unexpected paths lead us to potential bugs. + Visiting all paths in a smart contract is crucial from a security perspective. For example, in the below `withdraw()` function, every path has its own potential security implications and behavior that needs to be verified. Sometimes these unexpected paths lead us to potential bugs. Generally frameworks provide tools to check test coverage, like the [forge coverage](https://getfoundry.sh/forge/reference/coverage/) command which can be used to generate code coverage reports for tests. > While this section focuses more on manual approach, automated testing approaches like fuzzing and formal verification can be useful here for checking possible invariant violations across multiple paths. From c7ef3602d3d186fc2e7b5d59edb2c420d63552e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:41:31 -0300 Subject: [PATCH 18/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 4f274cf3..7d5ed058 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -113,7 +113,6 @@ Offensively analyze the code to identify logical issues, edge cases, and any con As can be seen below, everything boils down to each path. Even the ternary expression is ultimately a path. ```solidity - // It may lack a general meaning, but it aims to demonstrate the code with multiple execution paths. function withdraw(uint256 amount, bool emergency) public { require(amount > 0, "Withdraw amount must be greater than 0"); uint256 balance = balances[msg.sender]; From 5e5b788dfaa020222f40e84f5aef3a204977195b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:41:47 -0300 Subject: [PATCH 19/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 7d5ed058..e4fce0b8 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -156,7 +156,7 @@ Offensively analyze the code to identify logical issues, edge cases, and any con ``` 7. **Write down notes, doubts and edge cases:** -One reason for writing down doubts, ideas, possible issues is, when you start going through these issues as you encounter new path you can see more doubts, possible issues in your mind. so sometimes it becomes a loop where you will keep thinking about new ideas while exploring previous/current one. +One reason for writing down questions, ideas, possible issues is, when you start going through these issues as you encounter new path you can see more doubts, possible issues in your mind. So sometimes it becomes a loop where you will keep thinking about new ideas while exploring previous/current one. - Take notes for understanding or for further checking. - Doubts: Research on it, Ask applicable doubts to developers. - Edge cases: for later testing. E.g: [test] Possible reentrancy in unstake() function. From 35f4549b52caaff3905fd4d353c186f5e86b1d85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:46:03 -0300 Subject: [PATCH 20/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index e4fce0b8..28de809c 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -157,7 +157,7 @@ Offensively analyze the code to identify logical issues, edge cases, and any con 7. **Write down notes, doubts and edge cases:** One reason for writing down questions, ideas, possible issues is, when you start going through these issues as you encounter new path you can see more doubts, possible issues in your mind. So sometimes it becomes a loop where you will keep thinking about new ideas while exploring previous/current one. - - Take notes for understanding or for further checking. + - Take notes to check your understanding. - Doubts: Research on it, Ask applicable doubts to developers. - Edge cases: for later testing. E.g: [test] Possible reentrancy in unstake() function. - Try to break business logic while going through every code block. ( again note down the thing that needs to be tested) From f283a3aea7895ad96f53c86d40aae9076589fc3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:46:25 -0300 Subject: [PATCH 21/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 28de809c..062d8274 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -158,7 +158,7 @@ Offensively analyze the code to identify logical issues, edge cases, and any con 7. **Write down notes, doubts and edge cases:** One reason for writing down questions, ideas, possible issues is, when you start going through these issues as you encounter new path you can see more doubts, possible issues in your mind. So sometimes it becomes a loop where you will keep thinking about new ideas while exploring previous/current one. - Take notes to check your understanding. - - Doubts: Research on it, Ask applicable doubts to developers. + - Questions: Ask developers for clarity. - Edge cases: for later testing. E.g: [test] Possible reentrancy in unstake() function. - Try to break business logic while going through every code block. ( again note down the thing that needs to be tested) - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the **Fixed code review**. From 8363e5ff02b71cbee245d6fac10f0195784e50d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:48:01 -0300 Subject: [PATCH 22/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 062d8274..e4d19fa8 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -160,7 +160,7 @@ One reason for writing down questions, ideas, possible issues is, when you start - Take notes to check your understanding. - Questions: Ask developers for clarity. - Edge cases: for later testing. E.g: [test] Possible reentrancy in unstake() function. - - Try to break business logic while going through every code block. ( again note down the thing that needs to be tested) + - Try to break down the business logic while going through every code block. (again note down the thing that needs to be tested) - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the **Fixed code review**. - The minimal markdown file for taking notes might look like this: From cb7ec6bcc6fa2c7dac6404921d26c71c73ca9308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:48:30 -0300 Subject: [PATCH 23/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index e4d19fa8..0bf2b55e 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -226,7 +226,7 @@ One reason for writing down questions, ideas, possible issues is, when you start ## Automated review -While automated review can be classified as a different approach from manual review, it is useful to use techniques such as [static analysis](../../security-testing/static-analysis.md) to identify low-hanging bugs by triaging warnings from tools like [Slither](https://github.com/crytic/slither), [Wake](https://github.com/Ackee-Blockchain/wake), [aderyn](https://github.com/Cyfrin/aderyn) etc. +While automated review can be classified as a different approach from manual review, it is useful to use techniques such as [static analysis](../../security-testing/static-analysis.md) to identify low-hanging bugs by triaging warnings from tools like [Slither](https://github.com/crytic/slither), [Wake](https://github.com/Ackee-Blockchain/wake), [Aderyn](https://github.com/Cyfrin/aderyn) etc. > There are other types of automated testing approaches, such as [Fuzz Testing](../../security-testing/fuzz-testing.md) and [formal verification](../../security-testing/formal-verification.md), can also be helpful at different stages of the audit life-cycle, though they are less directly related to manual review. From 5d156de26d7a36d1c9991e782fef88b2bf0a8f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:49:05 -0300 Subject: [PATCH 24/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 0bf2b55e..c8600ce1 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -162,7 +162,8 @@ One reason for writing down questions, ideas, possible issues is, when you start - Edge cases: for later testing. E.g: [test] Possible reentrancy in unstake() function. - Try to break down the business logic while going through every code block. (again note down the thing that needs to be tested) - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the **Fixed code review**. - - The minimal markdown file for taking notes might look like this: + +The minimal markdown file for taking notes might look like this: ```markdown # Project Name From 4ab914d6753dfd10e8498004d8eb473b23697e0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:49:25 -0300 Subject: [PATCH 25/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index c8600ce1..33ff414a 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -234,7 +234,7 @@ While automated review can be classified as a different approach from manual rev ## Report writing 1. **Doubts and issue discussion with internal team:** -Discuss any doubts and identified issues with the internal team or, if applicable, with the team of reviewers working in parallel on the project. This will help you reach a conclusion. +Discuss any questions and identified issues with the internal team or, if applicable, with the team of reviewers working in parallel on the project. This will help you reach a conclusion. 2. **Doubts and issue discussion with the developers or project team:** Discuss and convey issues to the developers or project teams, as applicable. The goal is the technical dev. members of team should get issues so they can try to fix them. It can save time in large projects once the report is delivered. From 4dfb55f913a15ca2c9f98f36763e48fa48c303b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:49:46 -0300 Subject: [PATCH 26/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 33ff414a..b938925d 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -233,7 +233,7 @@ While automated review can be classified as a different approach from manual rev ## Report writing -1. **Doubts and issue discussion with internal team:** +1. **Questions and issue discussion with internal team:** Discuss any questions and identified issues with the internal team or, if applicable, with the team of reviewers working in parallel on the project. This will help you reach a conclusion. 2. **Doubts and issue discussion with the developers or project team:** From 3d977a26cd212e93715702ca59461c55f05c3a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Aereal=20Ae=C3=B3n?= <388605+mattaereal@users.noreply.github.com> Date: Wed, 20 Aug 2025 13:50:15 -0300 Subject: [PATCH 27/31] Update src/external-security-reviews/smart-contracts/manual-review.md Co-authored-by: Robert MacWha --- src/external-security-reviews/smart-contracts/manual-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index b938925d..b0447100 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -236,7 +236,7 @@ While automated review can be classified as a different approach from manual rev 1. **Questions and issue discussion with internal team:** Discuss any questions and identified issues with the internal team or, if applicable, with the team of reviewers working in parallel on the project. This will help you reach a conclusion. -2. **Doubts and issue discussion with the developers or project team:** +2. **Questions and issue discussion with the developers or project team:** Discuss and convey issues to the developers or project teams, as applicable. The goal is the technical dev. members of team should get issues so they can try to fix them. It can save time in large projects once the report is delivered. 3. **Report writing:** From 5684db76ab53f9412a7120449a57560e0552d73d Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Sun, 24 Aug 2025 23:00:20 +0530 Subject: [PATCH 28/31] Update manual-review.md & outline --- src/config/SUMMARY.md.develop | 7 ++++--- src/config/SUMMARY.md.main | 8 +++++--- .../smart-contracts/manual-review.md | 14 ++++++++------ 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/config/SUMMARY.md.develop b/src/config/SUMMARY.md.develop index c2ba8064..e7c4c0c0 100644 --- a/src/config/SUMMARY.md.develop +++ b/src/config/SUMMARY.md.develop @@ -56,10 +56,11 @@ - [Vendor Selection](./external-security-reviews/smart-contracts/vendor-selection.md) - [Security Policies and Procedures](./external-security-reviews/security-policies-procedures.md) - [Security Testing](./security-testing/README.md) - - [Dynamic Application Security Testing](./security-testing/dynamic-application-security-testing.md) + - [Unit Testing](./security-testing/unit-testing.md) + - [Integration Testing](./security-testing/integration-testing.md) - [Fuzz Testing](./security-testing/fuzz-testing.md) - - [Security Regression Testing](./security-testing/security-regression-testing.md) - - [Static Application Security Testing](./security-testing/static-application-security-testing.md) + - [Static Analysis](./security-testing/static-analysis.md) + - [Formal Verification](./security-testing/formal-verification.md) - [ENS](./ens/README.md) - [Data Integrity & Verification](./ens/data-integrity-verification.md) - [Cross-Chain Compatibility](./ens/cross-chain-compatibility.md) diff --git a/src/config/SUMMARY.md.main b/src/config/SUMMARY.md.main index 8951c947..bd8c45f9 100644 --- a/src/config/SUMMARY.md.main +++ b/src/config/SUMMARY.md.main @@ -32,15 +32,17 @@ - [Tools & Resources](./wallet-security/tools-&-resources.md) - [External Security Reviews](./external-security-reviews/README.md) - [Smart Contract Audits](./external-security-reviews/smart-contracts/README.md) + - [Manual Review](./external-security-reviews/smart-contracts/manual-review.md) - [Expectations](./external-security-reviews/smart-contracts/expectation.md) - [Preparation Guide](./external-security-reviews/smart-contracts/preparation.md) - [Vendor Selection](./external-security-reviews/smart-contracts/vendor-selection.md) - [Security Policies and Procedures](./external-security-reviews/security-policies-procedures.md) - [Security Testing](./security-testing/README.md) - - [Dynamic Application Security Testing](./security-testing/dynamic-application-security-testing.md) + - [Unit Testing](./security-testing/unit-testing.md) + - [Integration Testing](./security-testing/integration-testing.md) - [Fuzz Testing](./security-testing/fuzz-testing.md) - - [Security Regression Testing](./security-testing/security-regression-testing.md) - - [Static Application Security Testing](./security-testing/static-application-security-testing.md) + - [Static Analysis](./security-testing/static-analysis.md) + - [Formal Verification](./security-testing/formal-verification.md) - [ENS](./ens/README.md) - [Data Integrity & Verification](./ens/data-integrity-verification.md) - [Cross-Chain Compatibility](./ens/cross-chain-compatibility.md) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index b0447100..0ef702e6 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -96,8 +96,10 @@ Understand the flow from [unit](../../security-testing/unit-testing.md) and [Int 3. **Checklist reviews:** - Known smart contracts vulnerabilities. - - Smart Contract Weakness Classification (SWC). - Project specific checklists (e.g. When dealing with bridges it's also important to check bridge specific checklists). + - Checklists may vary over time and can become outdated. Below are some examples for reference: + - [Smart Contract Security Field Guide](https://scsfg.io/hackers/) + - [Smart Contract Security Verification Standard](https://github.com/ComposableSecurity/SCSVS?tab=readme-ov-file#table-of-contents) 4. **Maintain a list of invariants:** Maintain a list of invariants for every functions (Can be useful later for other tests/fuzzing/format verification). @@ -137,7 +139,7 @@ Offensively analyze the code to identify logical issues, edge cases, and any con } ``` - In next example, because every value (`_amount`, `minRequired`) can go above and below, the results can vary. If the result is used for some operations like decreasing the `drivingScore` in `burnFuelAndReduce()` for example. + In next example, because every value (`_amount`, `minRequired`) can go increase or decrease, the results can vary. If the result is used for some operations like decreasing the `drivingScore` in `burnFuelAndReduce()` for example. E.g. depending on the amounts are same (as they were while filling the fuel) or increased or decreased, the value of `fuelReduction` will change and while subtracting it from the `drivingScore[msg.sender]` it needs to be handled accordingly. which also creates different paths. @@ -158,10 +160,10 @@ Offensively analyze the code to identify logical issues, edge cases, and any con 7. **Write down notes, doubts and edge cases:** One reason for writing down questions, ideas, possible issues is, when you start going through these issues as you encounter new path you can see more doubts, possible issues in your mind. So sometimes it becomes a loop where you will keep thinking about new ideas while exploring previous/current one. - Take notes to check your understanding. - - Questions: Ask developers for clarity. - - Edge cases: for later testing. E.g: [test] Possible reentrancy in unstake() function. - - Try to break down the business logic while going through every code block. (again note down the thing that needs to be tested) - - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the **Fixed code review**. + - Write down any questions to ask developers when you need clarification. + - Note down edge cases for later testing. E.g: [test] Possible reentrancy in unstake() function. + - Try to break down the business logic while going through every code block. (again note down the thing that needs to be tested) + - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the **Fixed code review**. The minimal markdown file for taking notes might look like this: From b5c568222b824a9dedf26d9430310a23bd64f9be Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Mon, 25 Aug 2025 00:16:48 +0530 Subject: [PATCH 29/31] Delete unused images/ --- .../images/structural-diagram.png | Bin 101253 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/external-security-reviews/smart-contracts/images/structural-diagram.png diff --git a/src/external-security-reviews/smart-contracts/images/structural-diagram.png b/src/external-security-reviews/smart-contracts/images/structural-diagram.png deleted file mode 100644 index 9e09a6db3ab12db20ae840bc51da94ef85b99698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101253 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%0Dl#F}i7h6)3BN4CyUWqCmqI)d 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 Date: Mon, 25 Aug 2025 22:01:51 +0530 Subject: [PATCH 30/31] Update SUMMARY.md.main --- src/config/SUMMARY.md.main | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config/SUMMARY.md.main b/src/config/SUMMARY.md.main index bd8c45f9..296212b7 100644 --- a/src/config/SUMMARY.md.main +++ b/src/config/SUMMARY.md.main @@ -43,6 +43,7 @@ - [Fuzz Testing](./security-testing/fuzz-testing.md) - [Static Analysis](./security-testing/static-analysis.md) - [Formal Verification](./security-testing/formal-verification.md) + - [Mutation Testing](./security-testing/mutation-testing.md) - [ENS](./ens/README.md) - [Data Integrity & Verification](./ens/data-integrity-verification.md) - [Cross-Chain Compatibility](./ens/cross-chain-compatibility.md) From 702b00e4f665b95bd4f123ca688ccf215b9c01a1 Mon Sep 17 00:00:00 2001 From: the-caliber <132760011+the-caliber@users.noreply.github.com> Date: Thu, 28 Aug 2025 19:50:58 +0530 Subject: [PATCH 31/31] Update manual-review.md --- .../smart-contracts/manual-review.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/external-security-reviews/smart-contracts/manual-review.md b/src/external-security-reviews/smart-contracts/manual-review.md index 0ef702e6..6f6a9ffb 100644 --- a/src/external-security-reviews/smart-contracts/manual-review.md +++ b/src/external-security-reviews/smart-contracts/manual-review.md @@ -95,7 +95,7 @@ Understand the flow from [unit](../../security-testing/unit-testing.md) and [Int This can be done by looking into a diagram and current understanding of the smart contract functionality. For example in this case it's a Token contract that is least dependent (in fact the functionality from that contract is getting used in other contracts so other smart contracts are dependent on it). 3. **Checklist reviews:** - - Known smart contracts vulnerabilities. + - Known smart contract vulnerabilities checklist. - Project specific checklists (e.g. When dealing with bridges it's also important to check bridge specific checklists). - Checklists may vary over time and can become outdated. Below are some examples for reference: - [Smart Contract Security Field Guide](https://scsfg.io/hackers/) @@ -164,8 +164,7 @@ One reason for writing down questions, ideas, possible issues is, when you start - Note down edge cases for later testing. E.g: [test] Possible reentrancy in unstake() function. - Try to break down the business logic while going through every code block. (again note down the thing that needs to be tested) - Write down things to revisit after the code is fixed. E.g: In the review you noticed that if specific functionality would be added based on doubts asked or based on the suggested fixes etc, there are chances of something to go wrong for example. Note it down and check in the **Fixed code review**. - -The minimal markdown file for taking notes might look like this: + - The minimal markdown file for taking notes might look like this: ```markdown # Project Name @@ -250,7 +249,7 @@ Discuss and convey issues to the developers or project teams, as applicable. The - Example and POC, helpful for critical bugs. - Checking the grammar/style for better readability. -## Fixed code review +## Updated code review For checking fixed code, it may be necessary to repeat previously performed actions, depending on what has changed. To avoid repeating work, you can: