Cyfrin

List of Supported Detectors

Complete list of Aderyn's 90+ security detectors

List of Supported Detectors

Aderyn CLI and Aderyn VS Code extension share the same list of supported detectors.

High-severity detectors

NameDescription
hash-collision-due-to-abi-encode-packedabi.encodePacked() should not be used with dynamic types when passing the result to a hash function such as keccak256()
arbitrary-transfer-fromArbitrary from passed to transferFrom (or safeTransferFrom)
unprotected-initializerUnprotected initializer
unsafe-casting-detectorUnsafe Casting
enumerable-loop-removalEnumerableSet.remove in loop corrupts the set order
experimental-encoderExperimental ABI Encoder
incorrect-shift-orderIncorrect Assembly Shift Parameter Order
storage-array-edit-with-memoryStorage Array Edited with Memory
multiple-constructorsContract Has Multiple Constructors
reused-contract-nameContract Name Reused in Different Files
nested-struct-in-mappingNested Structs in Mappings pre-0.5.0
selfdestruct-identifierDeprecated EVM Instruction for selfdestruct should not be used
dynamic-array-length-assignmentArray length value has a direct assignment
incorrect-caret-operatorIncorrect use of caret operator on a non hexadecimal constant
yul-returnShadowed State Variables in Inheritance Hierarchy
state-variable-shadowingShadowed State Variables in Inheritance Hierarchy
unchecked-sendUnchecked bool success value for send call
misused-booleanMisused boolean with logical operators
sends-ether-away-without-checking-addressFunctions send eth away from contract but performs no checks on any address
delegate-call-on-unchecked-addressDelegatecall made by the function without checks on any address
tautological-compareTautological comparison
rtloRTLO character detected in file
dangerous-unary-operatorDangerous unary operator found in assignment
tautology-or-contradictionTautology or Contradiction in comparison
strict-equality-check-on-contract-balanceDangerous strict equality checks on contract balances
signed-storage-arraySigned array in storage detected for compiler version <0.5.10
weak-randomnessWeak Randomness
pre-declared-local-variable-usageUsage of variable before declaration
delete-nested-mappingDeletion from a nested mapping
tx-origin-used-for-authPotential use of tx.origin for authentication
msg-value-in-loopLoop contains msg.value
contract-locks-etherContract locks Ether without a withdraw function
incorrect-erc721-interfaceIncorrect ERC721 interface
incorrect-erc20-interfaceIncorrect ERC20 interface
out-of-order-retryableOut of order retryable transactions
constant-function-changing-stateConstant functions changing state
function-selector-collisionFunction selector collides with other functions
unchecked-low-level-callUnchecked Low level calls

Low-severity detectors

NameDescription
delegate-call-in-loopUsing delegatecall in loop may consume excessive gas
centralization-riskCentralization Risk for trusted owners
solmate-safe-transfer-libSolmate's SafeTransferLib does not check for token contract's existence
raw-ecrecoverecrecover is susceptible to signature malleability
deprecated-oz-functionsDeprecated OpenZeppelin functions should not be used
unsafe-erc20-functionsUnsafe ERC20 Operations should not be used
unspecific-solidity-pragmaSolidity pragma should be specific, not wide
no-zero-address-checkMissing checks for address(0) when assigning values to address state variables
useless-public-functionpublic functions not used internally could be marked external
literal-instead-of-constantDefine and use constant variables instead of using literals
require-without-stringEmpty require() / revert() statements
non-reentrant-is-not-before-othersThe nonReentrant modifier should occur before all other modifiers
block-timestamp-is-weak-deadlineUsing block.timestamp for swap deadline offers no protection
unsafe-oz-erc721-mintUsing ERC721::_mint() can be dangerous
push-zero-opcodePUSH0 is not supported by all chains
useless-modifierModifiers invoked only once can be shoe-horned into the function
empty-blockEmpty Block
large-numeric-literalLarge literal values multiples of 10000 can be replaced with scientific notation
useless-internal-functionInternal functions called only once can be inlined
contract-with-todosContract still has TODOs
inconsistent-type-namesInconsistency in declaring uint256/uint (or) int256/int variables within a contract. Use explicit size declarations (uint256 or int256)
useless-errorUnused Custom Error
reverts-and-requires-in-loopsLoop contains require/revert statements
division-before-multiplicationIncorrect Order of Division and Multiplication
redundant-statementsRedundant statements have no effect
public-variable-read-in-external-contextPublic variables of a contract read in an external context (using this)
unused-state-variablePotentially unused private / internal state variables found
constant-functions-assemblyFunctions declared pure / view but contains assembly
redundant-boolean-equalityBoolean equality is not required
local-variable-shadowingLocal variable shadows state variables in the contract hierarchy
uninitialized-local-variableUninitialized local variables
return-bombReturn Bomb
function-initializing-stateFunction initializing state
dead-codeDead Code
array-length-not-cachedLoop condition contains state_variable.length that could be cached outside
state-change-in-assertIncorrect use of assert()
costly-operations-inside-loopsCostly operations inside loops
builtin-symbol-shadowBuiltin Symbol Shadowing
void-constructorVoid constructor
missing-inheritancePotentially missing inheritance for contract
unused-importUnused Imports
function-pointer-in-constructorFunction pointers used in constructors
state-variable-could-be-constantState variable could be declared constant
state-variable-changes-without-eventsState variable changes but no event is emitted
state-variable-could-be-immutableState variable could be declared immutable
multiple-placeholdersModifier has multiple placeholders
unchecked-returnReturn value of the function call is not checked