This repository is forked from the Solidity Compiler.
The purpose is to extend the Solidity Compiler solc
with additional static analysis capabilities.
The list of currently supported checks could be find at: https://github.com/sec-bit/vscode-secbit-ssae#currently-supported-checks
Please follow the same instruction for building Solidity compiler to build the SECBIT-extended solc
.
The basic command line to invoke all checks is:
$ solc --secbit-warnings output-file -o output-dir --overwrite input-file.sol
...where input-file.sol
is the Solidity source file, and output-dir/output-file
is the the JSON output. For example,
{
"secbit-warnings" :
[
{
"desc" : "This ERC20 function returns false, which may not be correctly handled by the caller.",
"endcolumn" : 3,
"endline" : 59,
"file" : "test.sol",
"startcolumn" : 2,
"startline" : 57,
"tag" : "erc20-return-false"
},
{
"desc" : "Missing check on 'msg.data.length' could lead to short-address attack in this ERC20 transfer function.",
"endcolumn" : 3,
"endline" : 59,
"file" : "test.sol",
"startcolumn" : 2,
"startline" : 57,
"tag" : "short-addr"
}
]
}
To turn off the experimental SMT-based checks, --no-smt
should be used.
$ solc --secbit-warnings output-file -o output-dir --overwrite --no-smt input-file
To only run specific checks, one or more --secbit-tag
could be used.
$ solc --secbit-warnings output-file -o output-dir --overwrite --secbit-tag bad-name input-file
$ solc --secbit-warnings output-file -o output-dir --overwrite --secbit-tag bad-name --secbit-tag erc20-no-return input-file
If the active checks do not contain SMT-related checks (reentrance
and unchecked-math
),
SMT solver will be turned off.
To reduce false positive warnings from unrelated contracts, the ERC20-specific checks only run on contracts satisfying the following conditions:
- not a library, and
- no unimplemented function, and
- contract name or base contract names containing
erc20
oreip20
(case insensitive)
To only run ERC20-specific checks and treat more contracts as ERC20 contracts, --erc20
should be used.
$ solc --secbit-warnings output-file -o output-dir --overwrite --erc20 input-file
...this option has two effects:
- turns on all ERC20-specific checks (same as a list of
--secbit-tag
options) - relaxes the ERC20 filter condition to:
- not a library, and
- no unimplemented function, and
- contract name or base contract names containing
erc20
,eip20
,token
, orcoin
(case insensitive), or - containing
transfer
,transferFrom
, andapprove
APIs
SECBIT Labs also provides an Visual Studio Code Extension for running SECBIT Solidity Static Analysis over Solidity source code in the IDE.
The extension could be find at: https://github.com/sec-bit/vscode-secbit-ssae
Source code modifications from SECBIT are enclosed in #ifdef SECBIT
directives.
The two new files added are:
libsolidity/analysis/SECBITChecker.h
libsolidity/analysis/SECBITChecker.cpp
SECBIT Labs retains copyright to all above mentioned source code modifications. And the modifications are licensed under the same license as Solidity.