# Anyone can steal pool shares from lender group if no-revert-on-failure tokens are used

Unchecked transferFrom return in Teller's addPrincipalToCommitmentGroup lets attackers mint pool shares with no-revert tokens like ZRX, then burn them to drain other lenders' principal.

- Payout: Contest reward
- Severity: high
- Program: Teller
- Credited: 0x73696d616f
- Disclosed: 2024-04-18
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2024-04-teller-finance-judging/issues/50
- Library page: https://bugbountylibrary.com/r/sherlock%3A2024-04-teller-finance%3AH-5
- Tags: domain:web3 impact:funds-loss impact:integrity kind:contest platform:sherlock sev:high tech:evm tech:solidity technique:source-review vuln:business-logic vuln:share-inflation

**Target:** LenderCommitmentGroup_Smart.sol addPrincipalToCommitmentGroup
**Root cause:** addPrincipalToCommitmentGroup calls principalToken.transferFrom without checking its bool return; no-revert-on-failure tokens (ZRX) return false instead of reverting, so share minting proceeds without funds moving.
**Steps:**
1. Deploy/identify a no-revert-on-failure principal token (e.g. ZRX) used by a LenderCommitmentGroup_Smart pool
2. Call `addPrincipalToCommitmentGroup(_amount, attacker)` with _amount exceeding attacker balance/allowance so transferFrom returns false
3. transferFrom returns false but does not revert; `_valueOfUnderlying` computes shares and `poolSharesToken.mint(attacker, sharesAmount_)` executes
4. Call `burnSharesToWithdrawEarnings(shares, attacker)` to redeem shares for principalToken.transfer to attacker
**How found:** Researcher read the README's token-support assumptions (Uniswap V3-compatible tokens) and identified ZRX as a supported token whose transferFrom returns false instead of reverting; traced the unchecked return in addPrincipalToCommitmentGroup to free share minting.
**Exploitation:** Attacker mints pool shares for free by passing an amount their balance cannot cover; since the token returns false rather than reverting, the mint still happens. Attacker then burns shares via burnSharesToWithdrawEarnings, receiving principal tokens escrowed from other lenders, and corrupts totalPrincipalTokensCommitted/Withdrawn accounting.
**Insight:** When a protocol claims broad token support, enumerate tokens with non-standard ERC20 semantics (no-revert-on-failure like ZRX/BNB, missing return values like USDT) and check every raw transfer/transferFrom/approve call site for unchecked returns—especially where the return gates share minting or accounting.
