USG - Tangent — disclosed vulnerability reports and payouts
Every publicly disclosed and closed bug bounty report we hold for USG - Tangent, with our own summary of each finding and a link to the original disclosure.
- Reports indexed
- 9
- Total paid
- $0
- Critical
- 0
- Largest payout
- $0
This page collects the 9 closed, publicly disclosed USG - Tangent reports indexed on CoinBuggie. Nothing here is active or unpatched — every entry was published by the programme or the researcher after remediation.
The findings concentrate in Logic error, across EVM-Solidity. Reading a single protocol end to end is the fastest way to see which assumptions its codebase repeatedly gets wrong, which is usually a better predictor of where the next finding lives than the category alone.
Use the vulnerability class links below to compare these findings against the same bug class in other protocols.
What reviewers look for
- Logic error findings disclosed against USG - Tangent
Curated highlights
The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.
USG - Tangent: Users can steal accumulated rewards when `totalCollateral` becomes zero due to incomplete state updates
In the USG Tangent lending protocol's RewardAccumulator, the `_updateReward()` function gates all reward accounting on `totalCollateral != 0`. When total collateral across a market drops to zero, the function returns early and fails to sync a depositor's `userRewardPerTokenPaid` to the current `rewardPerTokenStored`. An attacker who deposits a single wei after this state, withdraws, and later claims can receive rewards that were earned by prior users, draining the reward pool at the expense of legitimate claimants. The protocol team fixed the defect by always syncing `userRewardPerTokenPaid` even when total collateral is zero.
USG - Tangent: No slippage check for liquidators when they burn USG from their account without Swapping first.
The USG Tangent lending protocol lets liquidators settle undercollateralized positions either by selling seized collateral through a ZappingProxy (ZAP path) or by paying from their own USG balance. The ZAP path enforces a minimum USG output after the collateral swap, but the balance path burns USG from the liquidator unconditionally with no equivalent slippage guard. Because the USG amount to burn is computed from a live oracle valuation at execution time, a liquidator who sizes a position against an earlier price can be forced to burn more USG than the seized collateral is currently worth, taking a loss when prices move adversely. The protocol's fix in PR #117 adds a maximum-USG-to-burn slippage parameter for the non-ZAP path, mirroring the ZAP protection.
USG - Tangent: `ZappingProxy` cannot receive ETH refunds resulting in failed zaps
USG Tangent's ZappingProxy lets users zap between tokens by forwarding msg.value to external routers when the input is the native chain coin. Because the proxy contract has no payable receive() or fallback() function, routers that refund unspent ETH to the caller (the proxy) trigger a native transfer whose value transfer reverts, and that revert propagates up to abort the entire zap transaction. The net effect is a denial-of-service on all ETH-in zap paths where the router returns change, rather than any theft of user funds. The protocol acknowledged the flaw and fixed it by adding a payable ETH-acceptance path in pull request 116.
USG - Tangent: Lack of USDT support due to use of transfer
The ZappingProxy contract in the USG Tangent protocol routes user tokens through zapping market actions and sends any leftover input-token balance to the protocol treasury using a raw ERC20 `transfer` call. USDT's transfer does not return a boolean, so this call reverts whenever a nonzero USDT remainder exists, producing a consistent denial of service for users zapping with USDT. Because the entire transaction unwinds on revert, no funds are moved, but the affected market action can never complete. The protocol team acknowledged the finding and fixed it by switching to `safeTransfer` from OpenZeppelin's SafeERC20 library in pull request 114.
USG - Tangent: Edge-case USG prices will force reverts for functions relying on IRCalculator
The USG-Tangent interest-rate module computes `quotientFixedPoint` by performing an integer division on `((pMax*E12) - USGPrice) / (pMax - pMin)` before scaling into 64.64 fixed point. When the USG oracle price sits extremely close to but strictly below `pMax*E12`, that quotient truncates to zero and is fed into `_pow()`, which calls `log_2(0)` and reverts on the `require(x > 0)` guard in ABDKMath64x64. The revert propagates through `_computeIR()` and blocks any user action that depends on interest-rate calculation, including withdraw, borrow, repay, liquidate, migrateFrom and migrateTo. The finding was validated with a forge test and the protocol team confirmed and fixed it in pull request 119.
USG - Tangent: Delayed Reward Cut Parameter Updates (Two-Cycle Enforcement Lag)
In USG/Tangent's RewardAccumulator, the owner-only updateRCParams() commits new reward-cut parameters only after calling processRewards(), so the staged parameters are not used in the current cycle's reward-cut computation. Because lastRewardCuts is computed from the old rcParams during that processing call and the new parameters only feed the subsequent computation, a parameter change takes two full processing cycles before it influences reward distribution. This delays administrative reactions — for example cutting rewards during a stablecoin depeg — by a cycle more than intended. The protocol fixed the issue by reordering the statements in a pull request.