MEDIUM: manual_extend_ttl missing caller authentication — maintenance fund drain
Function Affected
manual_extend_ttl (L6163) — public, zero require_auth() on caller
Root Cause
manual_extend_ttl deducts 1 XLM (1,000,000 stroops) from the maintenance fund and extends meter TTL. No caller authentication. Anyone can repeatedly call this to drain the maintenance fund.
Attack
- Attacker calls
manual_extend_ttl(meter_id) on any meter with a maintenance fund balance
- 1 XLM is deducted from maintenance fund each call
- Attacker repeats until maintenance fund is empty
- Meter TTL can no longer be extended — meter data eventually expires from storage
Impact
- Fund drain: Maintenance fund depleted by unauthenticated calls
- Meter expiry: Without maintenance funds, meters cannot extend TTL and expire from Soroban storage
- Service disruption: Expired meters stop billing/claiming operations
Severity
MEDIUM — per SECURITY.md section 4.1, Medium = $1K-$5K bounty.
Fix
Add require_admin_auth(&env) or meter.provider.require_auth() before deducting from maintenance fund.
MEDIUM: manual_extend_ttl missing caller authentication — maintenance fund drain
Function Affected
manual_extend_ttl(L6163) — public, zerorequire_auth()on callerRoot Cause
manual_extend_ttldeducts 1 XLM (1,000,000 stroops) from the maintenance fund and extends meter TTL. No caller authentication. Anyone can repeatedly call this to drain the maintenance fund.Attack
manual_extend_ttl(meter_id)on any meter with a maintenance fund balanceImpact
Severity
MEDIUM — per SECURITY.md section 4.1, Medium = $1K-$5K bounty.
Fix
Add
require_admin_auth(&env)ormeter.provider.require_auth()before deducting from maintenance fund.