Skip to content

Commit

Permalink
Add 21-incorrect-exponentiation.md documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasavola committed May 6, 2024
1 parent ff67856 commit 931b614
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions docs/docs/detectors/21-incorrect-exponentiation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Zero or test address

### What it does
Checks whether the zero address is being inputed to a function without validation.

### Why is this bad?
Because the private key for the zero address is known, anyone could take ownership of the contract.

### Example

```rust
pub fn set(e: Env, admin: Address, data: i32) -> Result<(), Error> {
if !ZeroAddressContract::ensure_is_admin(&e, admin)? {
return Err(Error::NotAdmin);
}
e.storage().persistent().set(&DataKey::Data, &data);
Ok(())
}
```


Use instead:
```rust
pub fn set(e: Env, admin: Address, data: i32) -> Result<(), Error> {
if admin
== Address::from_string(&String::from_bytes(
&e,
b"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",
))
{
return Err(Error::InvalidNewAdmin);
}
if !ZeroAddressContract::ensure_is_admin(&e, admin)? {
return Err(Error::NotAdmin);
}
e.storage().persistent().set(&DataKey::Data, &data);
Ok(())
}
```

### Implementation

The detector's implementation can be found at [this link](https://github.com/CoinFabrik/scout-soroban/tree/main/detectors/zero-or-test-address).

0 comments on commit 931b614

Please sign in to comment.