Coming Soon

DeepThreat Review

Catch what linters miss.

AI code review built for smart contract security. Understands cross-contract interactions, models economic attacks, and goes beyond pattern matching into semantic understanding.

⚠️

Traditional Linter

Pattern matching, syntax rules

VS
🛡️

DeepThreat Review

Semantic analysis, AI reasoning

Linter Output Vault.sol — 2 warnings
 1  pragma solidity ^0.8.19;
 2
 3  import "./IOracle.sol";
 4  import "./IFlashBorrower.sol";
 5
 6  contract Vault {
 7      mapping(address => uint256) public balances;
 8      address public oracle;
 9      address public owner;
10
11     function deposit() external payable {
12         balances[msg.sender] += msg.value;
13     }
14
15     function withdraw(uint256 amount) external {
16         require(balances[msg.sender] >= amount);
17         (bool success, ) = msg.sender.call{value: amount}("");
18         require(success);
19         balances[msg.sender] -= amount;
20     }
21
22     function setOracle(address _oracle) external {
23         oracle = _oracle;
24     }
25
26     function getPrice() public view returns (uint256) {
27         return IOracle(oracle).latestPrice();
28     }
29
30     function flashLoan(uint256 amount) external {
31         uint256 balBefore = address(this).balance;
32         IFlashBorrower(msg.sender).onFlashLoan(amount);
33         require(address(this).balance >= balBefore);
34     }
35 }
WARN Line 17: Avoid low-level .call — use transfer
STYLE Line 16: Custom error recommended over require
What the linter missed:
  • ❌ Reentrancy vulnerability
  • ❌ Missing access control on setOracle
  • ❌ Flash loan + oracle manipulation vector
  • ❌ Cross-contract interaction risks
  • ❌ Missing events for monitoring
DeepThreat Review Vault.sol — 5 findings
 1  pragma solidity ^0.8.19;
 2
 3  import "./IOracle.sol";
 4  import "./IFlashBorrower.sol";
 5
 6  contract Vault {
 7      mapping(address => uint256) public balances;
 8      address public oracle;
 9      address public owner;
10
11     function deposit() external payable {
12         balances[msg.sender] += msg.value;
13     }
14
15     function withdraw(uint256 amount) external {
16         require(balances[msg.sender] >= amount);
17         (bool success, ) = msg.sender.call{value: amount}("");
18         require(success);
19         balances[msg.sender] -= amount;
20     }
21
22     function setOracle(address _oracle) external {
23         oracle = _oracle;
24     }
25
26     function getPrice() public view returns (uint256) {
27         return IOracle(oracle).latestPrice();
28     }
29
30     function flashLoan(uint256 amount) external {
31         uint256 balBefore = address(this).balance;
32         IFlashBorrower(msg.sender).onFlashLoan(amount);
33         require(address(this).balance >= balBefore);
34     }
35 }
CRITICAL
Reentrancy in withdraw() — Lines 15-20
External call before state update. Attacker re-enters to drain funds. Fix: move balance update before the call, add nonReentrant guard.
HIGH
Missing access control on setOracle() — Lines 22-24
Anyone can change the oracle address, redirecting price feeds to a malicious contract. Fix: add onlyOwner modifier.
HIGH
Flash loan + oracle manipulation — Lines 30-34
Cross-contract risk: borrower can manipulate oracle during callback, then exploit getPrice()-dependent logic. Fix: snapshot prices, use TWAP.
MEDIUM
No zero-address check — setOracle()
Setting oracle to address(0) bricks getPrice(). Add require(_oracle != address(0)).
INFO
Missing events for state changes
No events on withdraw, setOracle, flashLoan. Emit events for off-chain monitoring.
More findings than linters
0
Configuration required
100%
Findings include fix suggestions

How it works

Install the GitHub App. Review happens automatically on every PR.

01

Install

One-click GitHub App installation. Select the repos you want monitored. No config files, no YAML, no pipeline changes.

02

Push Code

Open a pull request like you normally would. DeepThreat Review triggers automatically on every PR and commit push.

03

AI Review

9 analysis engines scan your changes. AI reasoning models cross-contract interactions, economic attack paths, and access control gaps that static tools miss.

04

Inline Comments

Findings appear as inline PR comments with severity, explanation, and fix suggestions. Your team reviews and resolves them like any other code review comment.

What Review catches

Beyond syntax. Beyond patterns. Actual exploitable vulnerabilities.

🔄

Reentrancy

Cross-function and cross-contract reentrancy, including read-only reentrancy through view functions.

🔮

Oracle Manipulation

Spot-price dependencies, TWAP window attacks, and stale oracle data that enables price manipulation.

Flash Loan Vectors

Multi-step attack paths combining flash loans with other vulnerabilities for maximum extractable value.

🔐

Access Control

Missing modifiers, privilege escalation paths, and unprotected admin functions.

🧮

Arithmetic Issues

Rounding errors in share calculations, precision loss in token conversions, and inflation attacks.

🌉

Integration Risks

Unsafe external calls, composability issues, and cross-protocol interaction vulnerabilities.

Stop shipping vulnerabilities.

DeepThreat Review is coming soon. Get notified when it launches.