The function approveMint is vulnerable to the classic ERC20 approve race condition, where the spender front-runs the owner, while resetting to a new allowance. Spending both allowances.
Vulnerability Details
The function is vulnerable to the classic ERC20 approve race condition.
When Bob approves Alice 200 tokens and then decides to approve to a new value, let's say 300.
Alice may see this tx of 300 approval in the mempool, she could front-run Bob, spending her 200 tokens allowance and then she receives again 300 tokens allowance.
Bob intended to approve Alice only 200 tokens, but Alice ends up with 500 tokens total.
Code snippet:
Impact Details
The impact is loss of funds for the owner..
It is a security best practice to increase/decrease allowance instead of setting straight to a new allowance.