Voltar às atualizações
New releaseJul 29, 2026

slither v0.11.6

Analisador Estático para Solidity e Vyper

Compartilhar

Slither, o analisador estático de contratos inteligentes

Slither Static Analysis Framework Logo

Build Status PyPI Slither - Read the Docs Slither - Wiki

Junte-se ao Slack do Empire Hacking

Slack Status

- Discussões e Suporte

Slither é um framework de análise estática para Solidity e Vyper escrito em Python3. Ele executa um conjunto de detectores de vulnerabilidades, exibe informações visuais sobre detalhes dos contratos e fornece uma API para escrever análises personalizadas facilmente. Slither permite que desenvolvedores encontrem vulnerabilidades, melhorem sua compreensão do código e criem protótipos rapidamente de análises personalizadas.

Funcionalidades

  • Detecta código Solidity vulnerável com baixas taxas de falsos positivos (veja a lista de troféus)
  • Identifica onde a condição de erro ocorre no código-fonte
  • Integra-se facilmente em integração contínua e builds Hardhat/Foundry
  • Os 'printers' integrados relatam rapidamente informações cruciais do contrato
  • API de detectores para escrever análises personalizadas em Python
  • Capacidade de analisar contratos escritos com Solidity >= 0.4
  • Representação intermediária (SlithIR) possibilita análises simples e de alta precisão
  • Analisa corretamente 99.9% de todo o código Solidity público
  • Tempo médio de execução de menos de 1 segundo por contrato
  • Integra-se com a varredura de código do Github em CI
  • Suporte para contratos inteligentes Vyper

Uso

Execute o Slither em uma aplicação Hardhat/Foundry/Dapp/Brownie:```console slither .

Esta é a opção preferida se o seu projeto possui dependências, já que o Slither depende da estrutura de compilação subjacente para compilar o código-fonte.

No entanto, você pode executar o Slither em um único arquivo que não importa dependências:```console
slither tests/uninitialized.sol

Como instalar

Nota O Slither requer Python 3.10+. Se você não for usar um dos frameworks de compilação suportados, precisará do solc, o compilador Solidity; recomendamos usar o solc-select para alternar convenientemente entre versões do solc.

Usando uv (Recomendado)

O uv é um gerenciador de pacotes Python rápido, 10 a 100 vezes mais rápido que o pip.```console

Install uv if you haven't already

curl -LsSf https://astral.sh/uv/install.sh | sh

Install slither as a tool

uv tool install slither-analyzer

Or run slither without installation

uvx --from slither-analyzer slither

Para atualizar:```console
uv tool upgrade slither-analyzer

Usando Pip```console

python3 -m pip install slither-analyzer

Para atualizar:```console
python3 -m pip install --upgrade slither-analyzer

Usando Brew```console

brew install slither-analyzer

### Usando Git (Desenvolvimento)```bash
git clone https://github.com/crytic/slither.git && cd slither

# Install as editable for development
uv tool install -e .

# Or use uv run for testing without installation
uv run slither <target>

A flag -e instala em modo editável, o que significa que as alterações no código-fonte são refletidas imediatamente sem necessidade de reinstalação.

Usando Docker

Use a imagem docker eth-security-toolbox. Ela inclui todas as nossas ferramentas de segurança e todas as principais versões do Solidity em uma única imagem. /home/share será montado em /share no contêiner.```bash docker pull trailofbits/eth-security-toolbox

Para compartilhar um diretório no contêiner:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox

Integração

  • Para integração com GitHub action, use slither-action.
  • Para integração com pre-commit, use (substitua $GIT_TAG pela tag real) ```YAML
  • Para gerar um relatório Markdown, use slither [target] --checklist.
  • Para gerar um Markdown com realce de código fonte do GitHub, use slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/ (substitua ORG, REPO, COMMIT)

Detectores

NumDetectorO que DetectaImpactoConfiança
1abiencoderv2-arrayArray abiencoderv2 de armazenamentoAltoAlta
2arbitrary-send-erc20transferFrom usa from arbitrárioAltoAlta
3array-by-referenceModificando array de armazenamento por valorAltoAlta
4encode-packed-collisionColisão de ABI encodePackedAltoAlta
5incorrect-shiftA ordem dos parâmetros em uma instrução de shift está incorreta.AltoAlta
6multiple-constructorsEsquemas de múltiplos construtoresAltoAlta
7name-reusedNome de contrato reutilizadoAltoAlta
8protected-varsVariáveis não protegidas detectadasAltoAlta
9public-mappings-nestedMapeamentos públicos com variáveis aninhadasAltoAlta
10rtloCaractere de controle Right-To-Left-Override é usadoAltoAlta
11shadowing-stateSombra de variáveis de estadoAltoAlta
12suicidalFunções que permitem a qualquer um destruir o contratoAltoAlta
13uninitialized-stateVariáveis de estado não inicializadasAltoAlta
14uninitialized-storageVariáveis de armazenamento não inicializadasAltoAlta
15unprotected-upgradeContrato atualizável não protegidoAltoAlta
16arbitrary-send-erc20-permittransferFrom usa from arbitrário com permitAltoMédia
17arbitrary-send-ethFunções que enviam Ether para destinos arbitráriosAltoMédia
18controlled-array-lengthAtribuição de comprimento de array contaminadoAltoMédia
19controlled-delegatecallDestino de delegatecall controladoAltoMédia
20delegatecall-loopFunções pagáveis que usam delegatecall dentro de um loopAltoMédia
21incorrect-expExponenciação incorretaAltoMédia
22incorrect-returnSe um return for usado incorretamente no modo assembly.AltoMédia
23msg-value-loopmsg.value dentro de um loopAltoMédia
24reentrancy-ethVulnerabilidades de reentrância (roubo de ethers)AltoMédia
25reentrancy-balanceVulnerabilidades de reentrância que levam a verificações de saldo desatualizadasAltoMédia
26return-leaveSe um return é usado em vez de um leave.AltoMédia
27storage-arrayBug do compilador de array de inteiros com sinal em armazenamentoAltoMédia
28unchecked-transferTransferência de tokens não verificadaAltoMédia
29weak-prngPRNG fracoAltoMédia
30domain-separator-collisionDetecta tokens ERC20 que possuem uma função cuja assinatura colide com DOMAIN_SEPARATOR() do EIP-2612MédioAlta
31enum-conversionDetecta conversão perigosa de enumMédioAlta
32erc20-interfaceInterfaces ERC20 incorretasMédioAlta
33erc721-interfaceInterfaces ERC721 incorretasMédioAlta
34incorrect-equalityIgualdades estritas perigosasMédioAlta
35locked-etherContratos que bloqueiam etherMédioAlta
36mapping-deletionExclusão em mapeamento contendo uma estruturaMédioAlta
37pyth-deprecated-functionsDetecta funções obsoletas do PythMédioAlta
38pyth-unchecked-confidenceDetecta quando o nível de confiança de um preço Pyth não é verificadoMédioAlta
39pyth-unchecked-publishtimeDetecta quando o publishTime de um preço Pyth não é verificadoMédioAlta
40shadowing-abstractSombra de variáveis de estado de contratos abstratosMédioAlta
41tautological-compareComparar uma variável consigo mesma sempre retorna true ou false, dependendo da comparaçãoMédioAlta
42tautologyTautologia ou contradiçãoMédioAlta
43write-after-writeEscrita não utilizadaMédioAlta
44boolean-cstUso incorreto de constante booleanaMédioMédia
45chronicle-unchecked-priceDetecta quando o preço Chronicle não é verificado.MédioMédia
46constant-function-asmFunções constantes usando código assemblyMédioMédia
47constant-function-stateFunções constantes alterando o estadoMédioMédia
48divide-before-multiplyOrdem imprecisa de operações aritméticasMédioMédia
49gelato-unprotected-randomnessChamada para _requestRandomness dentro de uma função não protegidaMédioMédia
50out-of-order-retryableTransações retryable fora de ordemMédioMédia
51reentrancy-no-ethVulnerabilidades de reentrância (sem roubo de ethers)MédioMédia
52reused-constructorConstrutor base reutilizadoMédioMédia
53tx-originUso perigoso de tx.originMédioMédia
54unchecked-lowlevelChamadas de baixo nível não verificadasMédioMédia
55unchecked-sendSend não verificadoMédioMédia
56uninitialized-localVariáveis locais não inicializadasMédioMédia
57unused-returnValores de retorno não utilizadosMédioMédia
58chainlink-feed-registryDetecta quando o registro de feed do Chainlink é usadoBaixoAlta
59incorrect-modifierModificadores que podem retornar o valor padrãoBaixoAlta
60optimism-deprecationDetecta quando um predeploy ou função obsoleta do Optimism é usado.BaixoAlta
61shadowing-builtinSombra de símbolo embutidoBaixoAlta
62shadowing-localSombra de variáveis locaisBaixoAlta
63uninitialized-fptr-cstChamadas de ponteiro de função não inicializadas em construtoresBaixoAlta
64variable-scopeVariáveis locais usadas antes de sua declaraçãoBaixoAlta
65void-cstConstrutor chamado não implementadoBaixoAlta
66calls-loopMúltiplas chamadas em um loopBaixoMédia
67events-accessEventos de controle de acesso ausentesBaixoMédia
68events-mathsEventos aritméticos ausentesBaixoMédia
69incorrect-unaryExpressões unárias perigosasBaixoMédia
70missing-zero-checkValidação de endereço zero ausenteBaixoMédia
71reentrancy-benignVulnerabilidades de reentrância benignasBaixoMédia
72reentrancy-eventsVulnerabilidades de reentrância que levam a Eventos fora de ordemBaixoMédia
73return-bombUma função chamada de baixo nível pode consumir todo o gas do chamador inesperadamente.BaixoMédia
74timestampUso perigoso de block.timestampBaixoMédia
75assemblyUso de assemblyInformativoAlta
76assert-state-changeMudança de estado em assertInformativoAlta
77boolean-equalComparação com constante booleanaInformativoAlta
78cyclomatic-complexityDetecta funções com complexidade ciclomática alta (> 11)InformativoAlta
79deprecated-standardsPadrões Solidity obsoletosInformativoAlta
80erc20-indexedParâmetros de evento ERC20 não indexadosInformativoAlta
81function-init-stateFunção inicializando variáveis de estadoInformativoAlta
82incorrect-using-forDetecta uso de using-for quando nenhuma função de uma biblioteca corresponde a um tipoInformativoAlta
83low-level-callsChamadas de baixo nívelInformativoAlta
84missing-inheritanceHerança ausenteInformativoAlta
85naming-conventionConformidade com convenções de nomenclatura SolidityInformativoAlta
86pragmaSe diferentes diretivas pragma são usadasInformativoAlta
87redundant-statementsDeclarações redundantesInformativoAlta
88solc-versionVersão Solidity incorretaInformativoAlta
89unimplemented-functionsFunções não implementadasInformativoAlta
90unindexed-event-addressEventos com parâmetros de endereço, mas nenhum parâmetro indexadoInformativoAlta
91unused-stateVariáveis de estado não utilizadasInformativoAlta
92costly-loopOperações custosas em um loopInformativoMédia
93dead-codeFunções que não são usadasInformativoMédia
94reentrancy-unlimited-gasVulnerabilidades de reentrância através de send e transferInformativoMédia
95too-many-digitsConformidade com boas práticas de notação numéricaInformativoMédia
96cache-array-lengthDetecta loops for que usam o membro length de algum array de armazenamento em sua condição de loop e não o modificam.OtimizaçãoAlta
97constable-statesVariáveis de estado que poderiam ser declaradas constantesOtimizaçãoAlta
98external-functionFunção pública que poderia ser declarada externaOtimizaçãoAlta
99immutable-statesVariáveis de estado que poderiam ser declaradas imutáveisOtimizaçãoAlta
100var-read-using-thisContrato lê sua própria variável usando thisOtimizaçãoAlta

Para mais informações, veja

Impressoras

Impressoras de Revisão Rápida

Impressoras de Revisão Detalhada* call-graph: Exportar o grafo de chamadas dos contratos para um arquivo dot

Para executar um printer, use --print e uma lista separada por vírgulas de printers.

Consulte a Documentação do Printer para obter as listas completas.

Ferramentas

Consulte a Documentação de Ferramentas para ferramentas adicionais.

Entre em contato conosco para obter ajuda na construção de ferramentas personalizadas.

Documentação da API

A documentação sobre os detalhes internos do Slither está disponível aqui.

Obtendo Ajuda

Sinta-se à vontade para passar em nosso canal no Slack (#ethereum) para obter ajuda no uso ou na extensão do Slither.

Perguntas Frequentes

Como excluir mocks ou testes?

Como corrigir "arquivo desconhecido" ou problemas de compilação?

  • Como o slither requer a AST do solc, todas as dependências devem estar disponíveis. Se um contrato tiver dependências, slither contract.sol falhará. Em vez disso, use slither . no diretório pai de contracts/ (você deve ver contracts/ ao executar ls). Se você tiver uma pasta node_modules/, ela deve estar no mesmo diretório que contracts/. Para verificar se esse problema está relacionado ao slither, execute o comando de compilação do framework que você está usando, por exemplo, npx hardhat compile. Isso deve funcionar com sucesso; caso contrário, o motor de compilação do slither, crytic-compile, não conseguirá gerar a AST.

Licença

O Slither é licenciado e distribuído sob a licença AGPLv3. Entre em contato conosco se estiver procurando uma exceção aos termos.

Publicações

Publicação da Trail of Bits

Publicações externas

TítuloUsoAutoresEventoCódigo
ReJection: A AST-Based Reentrancy Vulnerability Detection MethodAnálise baseada em AST construída sobre o SlitherRui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia ChenCTCIS 19-
MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart ContractAproveitar a dependência de dados através do SlitherWilliam Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay GaneshISSRE 2019MPro
ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart ContractsAproveitar a dependência de dados através do SlitherQingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi MaSANER 20-
Verification of Ethereum Smart Contracts: A Model Checking ApproachExecução simbólica construída sobre o CFG do SlitherTam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho QuanIJMLC 20-
Smart Contract RepairUtilizar os detectores de vulnerabilidades do SlitherXiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik RoychoudhuryTOSEM 20SCRepair
Demystifying Loops in Smart ContractsAproveitar a dependência de dados através do SlitherBen Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil DilligASE 20-
Trace-Based Dynamic Gas Estimation of Loops in Smart ContractsUsar o CFG do Slither para detectar loopsChunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang HuIEEE Open J. Comput. Soc. 1 (2020)-
SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in SecondsUtilizar o SlithIR para construir um gráfico de dependência de armazenamentoPriyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni VignaS&P 22Sailfish
SolType: Refinement Types for Arithmetic Overflow in SolidityUsar o Slither como frontend para construir um sistema de tipos de refinamentoBryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu FengPOPL 22-
Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam DetectionUsar o Slither para extrair características dos tokens (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 VulnerabilitiesUsar o Slither para extrair o CFG e o grafo de chamadasHoang 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 ContractsUsar o Slither para extrair o CFG e dependências de dadosSidi 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 ContractsEstender as dependências de dados do SlitherJan-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 FusionUsar o Slither para extrair o 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 ReuseUsar o Slither para extrair as características do código (CFG, função, tipos de parâmetros, ..)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 AccessesUsar o Slither para construir gráficos de acesso a estadoXiaodong Qi, Jiao Jiao, Yi LiInternational Conference on Distributed Computing Systems (ICDCS), 2023-
Bad Apples: Understanding the Centralized Security Risks in Decentralized EcosystemsImplementar uma análise interna sobre o SlitherKailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing GuoACM Web Conference April 2023-
Identifying Vulnerabilities in Smart Contracts using Interval AnalysisCriar 4 detectores sobre o SlitherŞtefan-Claudiu Susan, Andrei ArusoaieFROM 2023-
Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (sem PDF em acesso aberto)Utilizar o CFG e a AST do SlitherMaha Ayub , Tania Saleem , Muhammad Janjua , Talha AhmadTOSEM 2023SmartMuv

Se você estiver usando o Slither em um trabalho acadêmico, considere se candidatar ao Prêmio de Pesquisa Crytic de $10k.

Categorias