The statement in the article is that we are vulnerable to attack two:
Concern A : Check 1 ensures that the coin exists, but NOT that it is unspent. This insight immediately leads to the vulnerability we discuss next.
Concern B : Even if we’re validating a block on a fork of the main chain, the coinstake transaction is validated against the TxDB for the main chain itself.
Response of some of our team:
This is a valid concern. The node has a structure in memory holding all seen stake, setStakeSeen and setStakeSeenOrphans, but that structure does not persist between runs of program and only knows about coinstake it seen this session.
The simplest solution would be to store setStakeSeen structure in db.