mirror of https://github.com/ConsenSys/mythril
parent
d6cddb0f2d
commit
d6f4ddec56
@ -1,85 +0,0 @@ |
|||||||
"""This module contains the detection code for deprecated op codes.""" |
|
||||||
|
|
||||||
from mythril.analysis.report import Issue |
|
||||||
from mythril.analysis.swc_data import DEPRECATED_FUNCTIONS_USAGE |
|
||||||
from mythril.analysis.module.base import DetectionModule, EntryPoint |
|
||||||
from mythril.laser.ethereum.state.global_state import GlobalState |
|
||||||
import logging |
|
||||||
|
|
||||||
log = logging.getLogger(__name__) |
|
||||||
|
|
||||||
DESCRIPTION = """ |
|
||||||
Check for usage of deprecated opcodes |
|
||||||
""" |
|
||||||
|
|
||||||
|
|
||||||
class DeprecatedOperations(DetectionModule): |
|
||||||
"""This module checks for the usage of deprecated op codes.""" |
|
||||||
|
|
||||||
name = "Usage of deprecated instructions" |
|
||||||
swc_id = DEPRECATED_FUNCTIONS_USAGE |
|
||||||
description = DESCRIPTION |
|
||||||
entry_point = EntryPoint.CALLBACK |
|
||||||
pre_hooks = ["ORIGIN", "CALLCODE"] |
|
||||||
|
|
||||||
def _execute(self, state: GlobalState) -> None: |
|
||||||
""" |
|
||||||
|
|
||||||
:param state: |
|
||||||
:return: |
|
||||||
""" |
|
||||||
if state.get_current_instruction()["address"] in self.cache: |
|
||||||
return |
|
||||||
issues = self._analyze_state(state) |
|
||||||
|
|
||||||
self.issues.extend(issues) |
|
||||||
|
|
||||||
def _analyze_state(self, state): |
|
||||||
""" |
|
||||||
|
|
||||||
:param state: |
|
||||||
:return: |
|
||||||
""" |
|
||||||
node = state.node |
|
||||||
instruction = state.get_current_instruction() |
|
||||||
|
|
||||||
if instruction["opcode"] == "ORIGIN": |
|
||||||
log.debug("ORIGIN in function " + node.function_name) |
|
||||||
title = "Use of tx.origin" |
|
||||||
description_head = "Use of the keyword tx.origin is deprecated." |
|
||||||
description_tail = ( |
|
||||||
"The smart contract retrieves the transaction origin (tx.origin) using msg.origin. " |
|
||||||
"Use of msg.origin is deprecated and the instruction may be removed in the future. " |
|
||||||
"Use msg.sender instead.\nSee also: " |
|
||||||
"https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin" |
|
||||||
) |
|
||||||
swc_id = DEPRECATED_FUNCTIONS_USAGE |
|
||||||
|
|
||||||
elif instruction["opcode"] == "CALLCODE": |
|
||||||
log.debug("CALLCODE in function " + state.environment.active_function_name) |
|
||||||
title = "Use of callcode" |
|
||||||
description_head = "Use of callcode is deprecated." |
|
||||||
description_tail = ( |
|
||||||
"The callcode method executes code of another contract in the context of the caller account. " |
|
||||||
"Due to a bug in the implementation it does not persist sender and value over the call. It was " |
|
||||||
"therefore deprecated and may be removed in the future. Use the delegatecall method instead." |
|
||||||
) |
|
||||||
swc_id = DEPRECATED_FUNCTIONS_USAGE |
|
||||||
else: |
|
||||||
return [] |
|
||||||
|
|
||||||
issue = Issue( |
|
||||||
contract=state.environment.active_account.contract_name, |
|
||||||
function_name=state.environment.active_function_name, |
|
||||||
address=instruction["address"], |
|
||||||
title=title, |
|
||||||
bytecode=state.environment.code.bytecode, |
|
||||||
swc_id=swc_id, |
|
||||||
severity="Medium", |
|
||||||
description_head=description_head, |
|
||||||
description_tail=description_tail, |
|
||||||
) |
|
||||||
return [issue] |
|
||||||
|
|
||||||
|
|
||||||
detector = DeprecatedOperations() |
|
Loading…
Reference in new issue