# InsertBulkReputerPayload can be DoS

InsertBulkReputerPayload lacks msg.sender validation, letting an attacker replay a single valid bundle from the mempool to fulfill the reputer nonce and invalidate the original transaction.

- Payout: Contest reward
- Severity: high
- Program: Allora
- Credited: LZ_security
- Disclosed: 2024-06-24
- Write-up quality: 7/10
- Original: https://github.com/sherlock-audit/2024-06-allora-judging/issues/88
- Library page: https://bugbountylibrary.com/r/sherlock%3A2024-06-allora%3AH-11
- Tags: domain:web3 impact:dos impact:integrity kind:contest platform:sherlock sev:high tech:go technique:source-review vuln:access-control vuln:dos vuln:signature-replay

**Target:** Cosmos SDK msg server InsertBulkReputerPayload / ReputerValueBundle
**Root cause:** InsertBulkReputerPayload does not verify msg.sender and only validates per-bundle signatures, so any caller can submit a subset of valid bundles to consume the reputer nonce.
**Steps:**
1. Monitor mempool for a pending `InsertBulkReputerPayload` tx.
2. Extract one valid `ReputerValueBundle` (pubkey, signature, ValueBundle) from `msg.ReputerValueBundles`.
3. Construct a new `MsgInsertBulkReputerPayload` with only that single bundle and submit with higher priority.
4. Attacker tx executes first: `FulfillReputerNonce` marks the reputer nonce fulfilled and `SetTopicRewardNonce` is set.
5. Original tx reverts because `IsReputerNonceUnfulfilled` is now false, discarding the remaining bundles.
**How found:** Code review of InsertBulkReputerPayload noticed no msg.sender check and that nonce fulfillment happens after per-bundle signature validation, enabling mempool replay of a single valid bundle.
**Exploitation:** Attacker front-runs the legitimate reputer submission in the mempool with a trimmed copy containing one valid signed bundle, consuming the nonce so the full submission fails and most reputer data is dropped.
**Insight:** In Cosmos modules, when a handler fulfills a nonce/epoch after validating only per-item signatures, check whether msg.sender is authenticated; a mempool observer can replay one valid signed item to consume the nonce and grief the full batch.
