People often ask me "How did you learn how to hack?" The answer: by reading. This page is a collection of the blog posts and other articles that I have accumulated over the years of my journey. Enjoy!
MsgExec allows for a layer of misdirection where the message is valid, but wraps other messages. This can be used to circumvent checks, if you're not careful.MsgModifyLimitSwap is explicitly missing from the whitelist of allowed messages. This is because it's intended to be an internal message. By wrapping a MsgModifyLimitSwap within a MsgExec, the whitelist is effectively skipped. The handlers donateToPoll() function then credits arbitrary amounts to pool balances, even though the funds don't exist. This attack can be used to drain all funds from all pools at once.targetModule based on the memo type. This defaults to Asgard.TxReferenceReadMemo resolve the reference and reparse the memo.TxReferenceReadMemo is handled after the transfer. The funds sit in Asgard, even though the balance is thought to have been transferred to the correct module. This breaks the module-balance vs. protocol-state correspondence invariant.