Reproduced Exploit
Kinetiq — Exchange rate calculation is incorrect
1. Multiple StakingManagers share one ValidatorManager (global rewards/slashing) and one kHYPE. 2. Each manager stores local totalStaked / totalClaimed. 3. getExchangeRatio = (localStaked + globalRewards - localClaimed - globalSlash) / globalSupply. 4. With SM1=50, SM2=150, rewards=20, supply=200:…
Chain
Other
Category
untagged
Date
Feb 2025
Source
AuditVault
EVM Playground
Source-level debugger — step opcodes and Solidity in sync
The attack is replayed in an in-browser EVM preloaded with the exact dumped fork state. The execution tree shows every call; step by Solidity line or by opcode across all depths — source, Stack, Memory, Storage, Balances (native / ERC-20 / NFT), Transient storage and Return value stay in sync. Click a tree node, opcode, or source line to jump. No backend, no live RPC.
Source & credit. Reproduction of a public audit finding curated by AuditVault — the original finding: 58616-h-08-exchange-rate-calculation-is-incorrect-pashov-audit-gro. Standalone Foundry PoC and full write-up: 58616-h-08-exchange-rate-calculation-is-incorrect-pashov-audit-gro_exp in the
evm-hack-registrymirror.
Vulnerability classes: vuln/reward-accounting · reward-calculation · fix-arithmetic
Reproduction: a self-contained Foundry PoC that compiles & runs in an isolated project with only
forge-std— no fork, no RPC, noanvil_state. Full trace: output.txt. PoC: test/58616-h-08-exchange-rate-calculation-is-incorrect-pashov-audit-gro_exp.sol.
AuditVault taxonomy: severity/high · sector/staking · reward-accounting · reward-calculation · variant · math-is-safe · fix-arithmetic
Key info#
| Impact | HIGH — multi-manager setup mixes local stake with global PnL → wrong, divergent rates and mispriced redemptions |
| Protocol | Kinetiq — StakingManager + ValidatorManager |
| Vulnerable code | getExchangeRatio local totalStaked + global rewards / global supply |
| Bug class | Cross-instance accounting inconsistency |
| Finding | Pashov Audit Group · Kinetiq 2025-02-26 · #58616 · H-08 |
| Report | Kinetiq-security-review_2025-02-26 |
| Source | AuditVault |
| Status | Audit finding. Reproduced as a standalone local PoC. |
| Compiler | ^0.8.24 (PoC) |
TL;DR#
- Multiple
StakingManagers share oneValidatorManager(global rewards/slashing) and one kHYPE. - Each manager stores local
totalStaked/totalClaimed. getExchangeRatio = (localStaked + globalRewards - localClaimed - globalSlash) / globalSupply.- With SM1=50, SM2=150, rewards=20, supply=200: SM1→0.35, SM2→0.85, true→1.1.
- Redeeming via SM1 shortchanges users (50 kHYPE → 17.5 vs fair 55). Fix: global stake/claim totals.
The vulnerable code#
uint256 totalHYPE = totalStaked + totalRewards - totalClaimed - totalSlashing; // @> VULN
// totalStaked/totalClaimed LOCAL; rewards/slashing GLOBAL; supply GLOBAL
return (totalHYPE * 1e18) / kHYPESupply;
Root cause#
PnL is protocol-global but stake/claim counters are per-manager. Dividing a hybrid numerator by global supply yields a rate that is neither the manager's local NAV nor the protocol NAV — and differs across managers whenever local stakes differ.
Preconditions#
- ≥2 StakingManagers sharing ValidatorManager + kHYPE.
- Global rewards or slashing non-zero.
- Local stakes unequal (divergence) or even equal (both wrong vs true global).
Attack walkthrough#
- UserA stakes 50 on SM1; UserB stakes 150 on SM2.
- ValidatorManager reports 20 rewards.
- SM1 ratio 0.35e18, SM2 0.85e18, correct 1.1e18.
kHYPEToHYPE(50)on SM1 = 17.5 vs fair 55 → 37.5 shortfall.
Diagrams#
Impact#
Incorrect kHYPE valuation per manager, arbitrage between managers, and systematic under/over-payment on redemptions relative to true protocol NAV. Shared rewards are double-counted or under-attributed depending on local stake share.
Sources#
- AuditVault finding #58616
- Pashov Kinetiq review 2025-02-26
- Reduced source: kinetiq-research/lst @ c83aa17 —
StakingManager.getExchangeRatio
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 58616-h-08-exchange-rate-calculation-is-incorrect-pashov-audit-gro_exp (evm-hack-registry mirror).
- AuditVault finding: 58616-h-08-exchange-rate-calculation-is-incorrect-pashov-audit-gro.
Alerts & third-party analyses
These dashboards index community alerts tweets, post-mortems, and independent write-ups. Reach them through the protocol name above to cross-check this reproduction against other analyses.