Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

crytic/slither

Slither Static Analysis Framework Logo

Build StatusPyPISlither - Read the DocsSlither - Wiki

Join the Empire Hacking Slack

Slack Status

- Discussions and Support

Slither is a Solidity & Vyper static analysis framework written in Python3. It runs a suite of vulnerability detectors, prints visual information about contract details, and provides an API to easily write custom analyses. Slither enables developers to find vulnerabilities, enhance their code comprehension, and quickly prototype custom analyses.

Features

  • Detects vulnerable Solidity code with low false positives (see the list oftrophies)
  • Identifies where the error condition occurs in the source code
  • Easily integrates into continuous integration and Hardhat/Foundry builds
  • Built-in 'printers' quickly report crucial contract information
  • Detector API to write custom analyses in Python
  • Ability to analyze contracts written with Solidity >= 0.4
  • Intermediate representation (SlithIR) enables simple, high-precision analyses
  • Correctly parses 99.9% of all public Solidity code
  • Average execution time of less than 1 second per contract
  • Integrates with Github's code scanning inCI
  • Support for Vyper smart contracts

Usage

Run Slither on a Hardhat/Foundry/Dapp/Brownie application:

slither .

This is the preferred option if your project has dependencies as Slither relies on the underlying compilation framework to compile source code.

However, you can run Slither on a single file that does not import dependencies:

slither tests/uninitialized.sol

How to install

Note
Slither requires Python 3.8+.If you'renot going to use one of thesupported compilation frameworks, you needsolc, the Solidity compiler; we recommend usingsolc-select to conveniently switch between solc versions.

Using Pip

python3 -m pip install slither-analyzer

How to upgrade

python3 -m pip install --upgrade slither-analyzer

Using Brew

brew install slither-analyzer

Using Git

git clone https://github.com/crytic/slither.git&&cd slitherpython3 -m pip install.

We recommend using a Python virtual environment, as detailed in theDeveloper Installation Instructions, if you prefer to install Slither via git.

Using Docker

Use theeth-security-toolbox docker image. It includes all of our security tools and every major version of Solidity in a single image./home/share will be mounted to/share in the container.

docker pull trailofbits/eth-security-toolbox

To share a directory in the container:

docker run -it -v /home/share:/share trailofbits/eth-security-toolbox

Integration

  • For GitHub action integration, useslither-action.
  • For pre-commit integration, use (replace$GIT_TAG with real tag)
    -repo:https://github.com/crytic/slitherrev:$GIT_TAGhooks:    -id:slither
  • To generate a Markdown report, useslither [target] --checklist.
  • To generate a Markdown with GitHub source code highlighting, useslither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/ (replaceORG,REPO,COMMIT)

Detectors

NumDetectorWhat it DetectsImpactConfidence
1abiencoderv2-arrayStorage abiencoderv2 arrayHighHigh
2arbitrary-send-erc20transferFrom uses arbitraryfromHighHigh
3array-by-referenceModifying storage array by valueHighHigh
4encode-packed-collisionABI encodePacked CollisionHighHigh
5incorrect-shiftThe order of parameters in a shift instruction is incorrect.HighHigh
6multiple-constructorsMultiple constructor schemesHighHigh
7name-reusedContract's name reusedHighHigh
8protected-varsDetected unprotected variablesHighHigh
9public-mappings-nestedPublic mappings with nested variablesHighHigh
10rtloRight-To-Left-Override control character is usedHighHigh
11shadowing-stateState variables shadowingHighHigh
12suicidalFunctions allowing anyone to destruct the contractHighHigh
13uninitialized-stateUninitialized state variablesHighHigh
14uninitialized-storageUninitialized storage variablesHighHigh
15unprotected-upgradeUnprotected upgradeable contractHighHigh
16codexUse Codex to find vulnerabilities.HighLow
17arbitrary-send-erc20-permittransferFrom uses arbitrary from with permitHighMedium
18arbitrary-send-ethFunctions that send Ether to arbitrary destinationsHighMedium
19controlled-array-lengthTainted array length assignmentHighMedium
20controlled-delegatecallControlled delegatecall destinationHighMedium
21delegatecall-loopPayable functions usingdelegatecall inside a loopHighMedium
22incorrect-expIncorrect exponentiationHighMedium
23incorrect-returnIf areturn is incorrectly used in assembly mode.HighMedium
24msg-value-loopmsg.value inside a loopHighMedium
25reentrancy-ethReentrancy vulnerabilities (theft of ethers)HighMedium
26return-leaveIf areturn is used instead of aleave.HighMedium
27storage-arraySigned storage integer array compiler bugHighMedium
28unchecked-transferUnchecked tokens transferHighMedium
29weak-prngWeak PRNGHighMedium
30domain-separator-collisionDetects ERC20 tokens that have a function whose signature collides with EIP-2612's DOMAIN_SEPARATOR()MediumHigh
31enum-conversionDetect dangerous enum conversionMediumHigh
32erc20-interfaceIncorrect ERC20 interfacesMediumHigh
33erc721-interfaceIncorrect ERC721 interfacesMediumHigh
34incorrect-equalityDangerous strict equalitiesMediumHigh
35locked-etherContracts that lock etherMediumHigh
36mapping-deletionDeletion on mapping containing a structureMediumHigh
37pyth-deprecated-functionsDetect Pyth deprecated functionsMediumHigh
38pyth-unchecked-confidenceDetect when the confidence level of a Pyth price is not checkedMediumHigh
39pyth-unchecked-publishtimeDetect when the publishTime of a Pyth price is not checkedMediumHigh
40shadowing-abstractState variables shadowing from abstract contractsMediumHigh
41tautological-compareComparing a variable to itself always returns true or false, depending on comparisonMediumHigh
42tautologyTautology or contradictionMediumHigh
43write-after-writeUnused writeMediumHigh
44boolean-cstMisuse of Boolean constantMediumMedium
45chronicle-unchecked-priceDetect when Chronicle price is not checked.MediumMedium
46constant-function-asmConstant functions using assembly codeMediumMedium
47constant-function-stateConstant functions changing the stateMediumMedium
48divide-before-multiplyImprecise arithmetic operations orderMediumMedium
49gelato-unprotected-randomnessCall to_requestRandomness within an unprotected functionMediumMedium
50out-of-order-retryableOut-of-order retryable transactionsMediumMedium
51reentrancy-no-ethReentrancy vulnerabilities (no theft of ethers)MediumMedium
52reused-constructorReused base constructorMediumMedium
53tx-originDangerous usage oftx.originMediumMedium
54unchecked-lowlevelUnchecked low-level callsMediumMedium
55unchecked-sendUnchecked sendMediumMedium
56uninitialized-localUninitialized local variablesMediumMedium
57unused-returnUnused return valuesMediumMedium
58chainlink-feed-registryDetect when chainlink feed registry is usedLowHigh
59incorrect-modifierModifiers that can return the default valueLowHigh
60optimism-deprecationDetect when deprecated Optimism predeploy or function is used.LowHigh
61shadowing-builtinBuilt-in symbol shadowingLowHigh
62shadowing-localLocal variables shadowingLowHigh
63uninitialized-fptr-cstUninitialized function pointer calls in constructorsLowHigh
64variable-scopeLocal variables used prior their declarationLowHigh
65void-cstConstructor called not implementedLowHigh
66calls-loopMultiple calls in a loopLowMedium
67events-accessMissing Events Access ControlLowMedium
68events-mathsMissing Events ArithmeticLowMedium
69incorrect-unaryDangerous unary expressionsLowMedium
70missing-zero-checkMissing Zero Address ValidationLowMedium
71reentrancy-benignBenign reentrancy vulnerabilitiesLowMedium
72reentrancy-eventsReentrancy vulnerabilities leading to out-of-order EventsLowMedium
73return-bombA low level callee may consume all callers gas unexpectedly.LowMedium
74timestampDangerous usage ofblock.timestampLowMedium
75assemblyAssembly usageInformationalHigh
76assert-state-changeAssert state changeInformationalHigh
77boolean-equalComparison to boolean constantInformationalHigh
78cyclomatic-complexityDetects functions with high (> 11) cyclomatic complexityInformationalHigh
79deprecated-standardsDeprecated Solidity StandardsInformationalHigh
80erc20-indexedUn-indexed ERC20 event parametersInformationalHigh
81function-init-stateFunction initializing state variablesInformationalHigh
82incorrect-using-forDetects using-for statement usage when no function from a given library matches a given typeInformationalHigh
83low-level-callsLow level callsInformationalHigh
84missing-inheritanceMissing inheritanceInformationalHigh
85naming-conventionConformity to Solidity naming conventionsInformationalHigh
86pragmaIf different pragma directives are usedInformationalHigh
87redundant-statementsRedundant statementsInformationalHigh
88solc-versionIncorrect Solidity versionInformationalHigh
89unimplemented-functionsUnimplemented functionsInformationalHigh
90unused-stateUnused state variablesInformationalHigh
91costly-loopCostly operations in a loopInformationalMedium
92dead-codeFunctions that are not usedInformationalMedium
93reentrancy-unlimited-gasReentrancy vulnerabilities through send and transferInformationalMedium
94too-many-digitsConformance to numeric notation best practicesInformationalMedium
95cache-array-lengthDetectsfor loops that uselength member of some storage array in their loop condition and don't modify it.OptimizationHigh
96constable-statesState variables that could be declared constantOptimizationHigh
97external-functionPublic function that could be declared externalOptimizationHigh
98immutable-statesState variables that could be declared immutableOptimizationHigh
99var-read-using-thisContract reads its own variable usingthisOptimizationHigh

For more information, see

Printers

Quick Review Printers

In-Depth Review Printers

To run a printer, use--print and a comma-separated list of printers.

See thePrinter documentation for the complete lists.

Tools

See theTool documentation for additional tools.

Contact us to get help on building custom tools.

API Documentation

Documentation on Slither's internals is availablehere.

Getting Help

Feel free to stop by ourSlack channel (#ethereum) for help using or extending Slither.

FAQ

How do I exclude mocks or tests?

How do I fix "unknown file" or compilation issues?

  • Because slither requires the solc AST, it must have all dependencies available.If a contract has dependencies,slither contract.sol will fail.Instead, useslither . in the parent directory ofcontracts/ (you should seecontracts/ when you runls).If you have anode_modules/ folder, it must be in the same directory ascontracts/. To verify that this issue is related to slither,run the compilation command for the framework you are using e.gnpx hardhat compile. That must work successfully;otherwise, slither's compilation engine, crytic-compile, cannot generate the AST.

License

Slither is licensed and distributed under the AGPLv3 license.Contact us if you're looking for an exception to the terms.

Publications

Trail of Bits publication

External publications

TitleUsageAuthorsVenueCode
ReJection: A AST-Based Reentrancy Vulnerability Detection MethodAST-based analysis built on top of SlitherRui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia ChenCTCIS 19-
MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart ContractLeverage data dependency through SlitherWilliam Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay GaneshISSRE 2019MPro
ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart ContractsLeverage data dependency through SlitherQingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi MaSANER 20-
Verification of Ethereum Smart Contracts: A Model Checking ApproachSymbolic execution built on top of Slither’s CFGTam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho QuanIJMLC 20-
Smart Contract RepairRely on Slither’s vulnerabilities detectorsXiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik RoychoudhuryTOSEM 20SCRepair
Demystifying Loops in Smart ContractsLeverage data dependency through SlitherBen Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil DilligASE 20-
Trace-Based Dynamic Gas Estimation of Loops in Smart ContractsUse Slither’s CFG to detect loopsChunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang HuIEEE Open J. Comput. Soc. 1 (2020)-
SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in SecondsRely on SlithIR to build astorage dependency graphPriyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni VignaS&P 22Sailfish
SolType: Refinement Types for Arithmetic Overflow in SolidityUse Slither as frontend to build refinement type systemBryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu FengPOPL 22-
Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam DetectionUse Slither to extract tokens' features (mintable, pausable, ..)Mazorra, Bruno, Victor Adan, and Vanesa DazaMathematics 10.6 (2022)-
MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract VulnerabilitiesUse Slither to extract the CFG and call graphHoang Nguyen, Nhat-Minh Nguyen, Chunyao Xie, Zahra Ahmadi, Daniel Kudendo, Thanh-Nam Doan and Lingxiao JiangIEEE 9th International Conference on Data Science and Advanced Analytics (DSAA, 2022)ge-sc
Automated Auditing of Price Gouging TOD Vulnerabilities in Smart ContractsUse Slither to extract the CFG and data dependenciesSidi Mohamed Beillahi, Eric Keilty, Keerthi Nelaturu, Andreas Veneris, and Fan Long2022 IEEE International Conference on Blockchain and Cryptocurrency (ICBC)Smart-Contract-Repair
Modeling and Enforcing Access Control Policies for Smart ContractsExtend Slither's data dependenciesJan-Philipp Toberg, Jonas Schiffl, Frederik Reiche, Bernhard Beckert, Robert Heinrich, Ralf ReussnerIEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), 2022SolidityAccessControlEnforcement
Smart Contract Vulnerability Detection Based on Deep Learning and Multimodal Decision FusionUse Slither to extract the CFGWeichu Deng, Huanchun Wei, Teng Huang, Cong Cao, Yun Peng, and Xuan HuSensors 2023, 23, 7246-
Semantic-enriched Code Knowledge Graph to Reveal Unknowns in Smart Contract Code ReuseUse Slither to extract the code features (CFG, function, parameters types, ..)Qing Huang, Dianshu Liao, Zhenchang Xing, Zhengkang Zuo, Changjing Wang, Xin XiaACM Transactions on Software Engineering and Methodology, 2023-
Smart Contract Parallel Execution with Fine-Grained State AccessesUse Slither to build state access graphsXiaodong Qi, Jiao Jiao, Yi LiInternational Conference on Distributed Computing Systems (ICDCS), 2023-
Bad Apples: Understanding the Centralized Security Risks in Decentralized EcosystemsImplement an internal analysis on top of SlitherKailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing GuoACM Web Conference April 2023-
Identifying Vulnerabilities in Smart Contracts using Interval AnalysisCreate 4 detectors on top of SlitherŞtefan-Claudiu Susan, Andrei ArusoaieFROM 2023-
Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (no PDF in open access)Rely on Slither's CFG and ASTMaha Ayub , Tania Saleem , Muhammad Janjua , Talha AhmadTOSEM 2023SmartMuv

If you are using Slither on an academic work, consider applying to theCrytic $10k Research Prize.


[8]ページ先頭

©2009-2025 Movatter.jp