EthereumCommonwealth / Auditing

Ethereum Commonwealth Security Department conducted over 400 security audits since 2018. Not even a single contract that we audited was hacked. You can access our audit reports in the ISSUES of this repo. We are accepting new audit requests.
https://audits.callisto.network/
GNU General Public License v3.0
131 stars 34 forks source link

aXpire (AXPR) Token #238

Closed yuriy77k closed 5 years ago

yuriy77k commented 5 years ago

Audit request

aXpire's smart contract was created to launch the token, and have some basic functions related to burning tokens.

Source code

https://etherscan.io/address/0xC39E626A04C5971D770e319760D7926502975e47#code

Disclosure policy

mm@axpire.com

Platform

ETH

Number of lines:

240

MrCrambo commented 5 years ago

Auditing time 1 day

yuriy77k commented 5 years ago

@MrCrambo assigned

danbogd commented 5 years ago

Auditing time: 2 days.

yuriy77k commented 5 years ago

@danbogd assigned

RideSolo commented 5 years ago

Estimated audit time: 1 day.

danbogd commented 5 years ago

My report is finished.

RideSolo commented 5 years ago

@yuriy77k I have commented this issue for audit.

yuriy77k commented 5 years ago

@RideSolo assigned

yuriy77k commented 5 years ago

aXpire Token Security Audit Report

1. Summary

aXpire Token smart contract security audit report performed by Callisto Security Audit Department

Symbol      : AXPR
Name        : aXpire
Total supply: 350,000,000
Decimals    : 18 
Standard    : ERC20

2. In scope

3. Findings

In total, 10 issues were reported including:

3.1. ERC-20 Compliance

Severity: medium

Description

Following EIP-20 specifications:

Code snippet

https://gist.github.com/RideSolo/65ca7446379c3d261ca9d2d2e1c7508a#file-axpire-sol-L155

https://gist.github.com/RideSolo/65ca7446379c3d261ca9d2d2e1c7508a#file-axpire-sol-L166

3.2. Owner Privileges

Severity: owner privileges

Description

Contract owner allow himself to:

  1. Burn from any address, making all users at a critical severity risk, such behavior cannot be accepted by the investors. Once tokens are allocated to and address it belongs only to that address to burn the tokens, check here.
  2. pause/unpause approval/transfer/transferFrom, check here.
  3. halt/unhalt token sale, check here.
  4. Ico can be ended by owner only, check here.
  5. Reset the sale exchange rate at any moment, check here.

3.3. Allowance Approval

Severity: low

Description

Following ERC20 standard, approve function "Allows _spender to withdraw from your account multiple times, up to the _value amount. If this function is called again it overwrites the current allowance with _value.", However the implemented function throw in case if allowed[msg.sender][_spender] is different than zero and _value different than zero. this partially solve double withdrawal attack but create incompatibility for some Dapps, and do not allow the user to directly reduce the allowance creating a race between user and spender.

Code snippet

https://gist.github.com/RideSolo/65ca7446379c3d261ca9d2d2e1c7508a#file-axpire-sol-L183

3.4. Transfer Event

Severity: low

Description

Following EIP-20 when "A token contract which creates new tokens SHOULD trigger a Transfer event with the _from address set to 0x0 when tokens are created".

This issue issue is related with both constructor and createTokens function since tokens are created and transfer event is not triggered.

Code snippet

https://gist.github.com/RideSolo/65ca7446379c3d261ca9d2d2e1c7508a#file-axpire-sol-L277

https://gist.github.com/RideSolo/65ca7446379c3d261ca9d2d2e1c7508a#file-axpire-sol-L317

3.5. Transfer to address(0)

Severity: low

Description

In both transfer and transferFrom transfers to address(0) are allowed.

Code snippet

https://gist.github.com/RideSolo/65ca7446379c3d261ca9d2d2e1c7508a#file-axpire-sol-L155

https://gist.github.com/RideSolo/65ca7446379c3d261ca9d2d2e1c7508a#file-axpire-sol-L166

3.6. Known vulnerabilities of ERC-20 token

Severity: low

Description

  1. It is possible to double withdrawal attack. More details here.

  2. Lack of transaction handling mechanism issue. WARNING! This is a very common issue and it already caused millions of dollars losses for lots of token users! More details here.

Recommendation

Add the following code to the transfer(_to address, ...) function:

require( _to != address(this) );

4. Conclusion

The audited smart contract has issues with ERC20 Compliance and cannot be used as ERC20 token. Reported issues must be fixed prior to the usage of this contract.

5. Revealing audit reports

https://gist.github.com/yuriy77k/d19fc5b0b1b91bd75b4a0d725ecf7c48

https://gist.github.com/yuriy77k/7fd07d4f6f1972916a6734f2c37b200c

https://gist.github.com/yuriy77k/d16d404a58342856e22fdd5e5976f776