Cosmos EVM-fout misbruikt nadat Cosmos Labs wist dat elke lopende blockchain kwetsbaar was

Cosmos Labs heeft gewaarschuwd dat een kritieke tekortkoming in de balansafhandeling in de gedeelde Cosmos EVM-module werd uitgebuit om tussen 20 augustus en 25 augustus 2026 geld uit zes blockchains af te tappen.

De kwetsbaarheid, aangewezen GHSA-7g4w-cg88-2cq2is door Cosmos Labs beoordeeld als Critical en is gepubliceerd zonder CVE-identifier, zwakteclassificatie of CVSS-score.

Betrokken versies zijn dat wel < 0.6.2 En >= 0.7.0 < 0.7.2en de oplossing is op 19 augustus in v0.6.2 en v0.7.2 uitgebracht. Ketenoperators krijgen te horen dat ze moeten upgraden naar een van die releases of later, een verandering die baanbrekend is en een gecoördineerde netwerkupgrade vereist.

Operators die niet onmiddellijk kunnen upgraden, krijgen te horen dat ze de keten moeten stopzetten in plaats van te proberen een gecoördineerde governance-upgrade uit te voeren.

In een post-mortem gepubliceerd op 28 augustus zei Cosmos Labs dat de fout op 25 april werd gemeld via zijn bugbounty-programma en destijds werd beoordeeld als geen risico voor fondsen op live netwerken.

“We konden de kwetsbaarheid niet reproduceren op 18-decimale netwerken en kwamen ten onrechte tot de conclusie dat het alleen niet-18-decimale netwerken trof”, zei Cosmos Labs in de post-mortem.

Het team bevestigde op 13 augustus dat alle Cosmos EVM-ketens getroffen waren, ongeacht de decimale configuratie. De oplossing werd vervolgens via hetzelfde openbare stille patchproces geleid dat het bedrijf reserveert voor problemen die geen fondsverlies in productieketens veroorzaken.

“Op dit punt gebruikte het team voor een kwetsbaarheid waarvan bekend is dat deze een bedreiging vormt voor gebruikersfondsen in productienetwerken doorgaans beveiligde kanalen om een ​​patch privé te distribueren naar de getroffen netwerken. Omdat de patch al publiekelijk beschikbaar was op de hoofdtak zonder bekende exploitatie, concludeerde het team dat het veilig zou zijn om door te gaan met het stille patchproces”, aldus Cosmos Labs.

Het eigen gepubliceerde stille patchbeleid van het bedrijf zet een andere koers uit voor een fout van die klasse.

“Wanneer een probleem een ​​onmiddellijk of netwerkrisico met zich meebrengt, zal Cosmos Labs noodoplossingen initiëren, particuliere oplossingen distribueren of gecoördineerde upgrades uitvoeren voordat er enige publieke bekendmaking plaatsvindt”, zei Cosmos Labs in zijn bugbounty-beleid, voor het laatst gesynchroniseerd op 27 juli.

De fout zit in de code die de status van Ethereum Virtual Machine (EVM) verzoent met de Cosmos SDK x/bank module. De EVM StateDB houdt alleen het besteedbare saldo van een account bij, terwijl onvoorwaardelijke accounts in de SDK-status zowel een besteedbaar als een vergrendeld saldo bevatten, en beide x/staking en de staking-precompile maakt het mogelijk dat het vergrendelde gedeelte wordt gedelegeerd.

Wanneer een onvoorwaardelijke rekening meer delegeert dan het besteedbare saldo, wordt bij de terugneming na de delegatie het volledige gedelegeerde bedrag afgetrokken van het kleinere besteedbare bedrag. De aftrekking is niet gecontroleerd en het saldo komt uit op ongeveer 2 ^ 256.

Verzoening richt zich dan op een positieve delta en brandt op een negatieve. De aanvaller kan een beperkt bedrag van de ingepakte rekening halen, of een slachtofferrekening 2^256 minus het saldo sturen, zodat verzoening de werkelijke bezittingen van het slachtoffer verbrandt.

Ketens op 0.6.x mint en branden op het ondersteunende SDK-grootboek, dus een grote munt veroorzaakt een aanbodoverloop die de keten stopt. Chains met versie 0.7.x stellen saldi rechtstreeks in x/bank en accepteer veranderingen die een conversie van uint256 naar int256 overleven.

Beide helften lopen binnen één transactie met een netto aanbodverandering van nul, van een contract dat wordt ingezet op een vooraf berekend adres dat eerst werd omgezet in een vestingrekening. Exploitatie vereist dat de keten het aanmaken van onvoorwaardelijke vesting-accounts zonder toestemming toestaat.

Operators die Cosmos EVM gebruiken, worden geadviseerd de volgende stappen te nemen:

  • Upgraden naar v0.6.2 of v0.7.2 of hoger, waarbij het wordt toegepast als een gecoördineerde netwerkupgrade omdat de wijziging baanbrekend is.
  • Stoppen in plaats van stemmen. Ketens die niet in één keer kunnen upgraden, krijgen te horen dat ze de blokproductie moeten stoppen in plaats van een gecoördineerde governance-upgrade uit te voeren. Het advies stelt dat er geen sprake is van enige beperking op de configuratie, en dat het uitschakelen van de staking-precompile het primaire triggerpad verwijdert, maar geen vervanging is voor de patch.
  • Sluit de voorwaarde. Afwijzen MsgCreateVestingAccount, MsgCreatePermanentLockedAccountEn MsgCreatePeriodicVestingAccount in de ante-handler. Vestingrekeningen zoals gedefinieerd in de genesis blijven onaangetast.
  • Controleer het live codepad op een vork. Een kers op de taart die alleen de geëxporteerde helper patcht, kan een gedupliceerde, niet-geëxporteerde kopie op zijn plaats laten terwijl elke test nog steeds slaagt.
  • Pas de twee oplossingen toe die in het advies worden weggelaten. De momentopname van het vergrendelde saldo en de module-accountbewaking zijn afzonderlijke wijzigingen, en de module-accountbewaking wijst moduleaccounts onvoorwaardelijk af, waardoor EVM-oproepen vanaf een moduleaccount worden verbroken.
  • Registreer een beveiligingscontact met Cosmos Labs, dat tijdens het incident kennis kreeg van elf Cosmos EVM-implementaties die nooit bij zijn beveiligingskanalen waren geregistreerd.

Het advies documenteert één stroomopwaartse verandering, de SubBalance onderstroombewaker samengevoegd tot main op 15 mei als pull request #1176 en gebackporteerd op 13 augustus. Twee andere balansfixes bevinden zich in dezelfde repository en worden nergens daarin genoemd.

Pull request #1187, samengevoegd op 20 mei, maakt een momentopname van het vergrendelde saldo van een rekening, zodat het banksaldo correct wordt gereconstrueerd nadat een precompile dit heeft gewijzigd. Backports van #1187 naar beide releaselijnen werden dezelfde dag geopend en binnen vierentwintig uur samengevoegd, terwijl de backport van #1176, een even baanbrekende verandering, ongeveer negentig dagen later volgde.

Verbinden 3524ebcgetiteld “Merge commit from fork”, verwerpt elke poging om het saldo van een moduleaccount in te stellen.

ZetaChain-bijdrager morde08 zei in een port van alle drie de fixes die op 21 augustus werd gepubliceerd dat de uitgekozen patch het live-pad van de fork ongepatcht liet, omdat de fork dubbele niet-geëxporteerde helpers droeg terwijl de stroomopwaartse verandering alleen de geëxporteerde betrof.

Warden Protocol koos twee dagen later de andere route en blokkeerde het aanmaken van vesting-accounts volledig.

“Vesting-accounts zijn de enige bron van vergrendelde saldi op Warden en niets hangt ervan af of gebruikers deze kunnen aanmaken, dus het verwijderen van dat pad sluit de voorwaarde af in plaats van erop te vertrouwen dat de reconstructie correct is”, zei Jlehtimaki, medewerker van het Warden Protocol, in een commit-bericht.

Een openbaar pull-verzoek in Push Chain’s fork van Cosmos EVM beschreef de kwetsbaarheid en het exploitatiepad in detail om 07:16 UTC op 20 augustus, acht uur en vijftien minuten nadat de releases waren uitgegaan.

De eerste aanval, tegen MANTRA, begon elf uur en vijftig minuten later om 19:06 UTC. Cosmos Labs stuurde zijn eerste privémelding per beveiligde e-mail om 03:36 UTC op 21 augustus, ongeveer twee uur nadat MANTRA had gemeld dat het was uitgebuit.

“Cosmos Labs heeft de afgelopen dertien maanden in stilte patches uitgebracht voor 37 kwetsbaarheden, zonder dat downstream-ontwikkelaars de exploitpaden nauwkeurig in het openbaar hebben beschreven”, aldus Cosmos Labs in de post-mortem.

In de release-opmerkingen van v0.6.2 en v0.7.2 staat beide dat de release belangrijke beveiligingsoplossingen bevat en zo snel mogelijk moet worden toegepast, en beide laten de beveiligingsbackport weg uit hun changelogs. The Hacker News bevestigde op 29 augustus dat in geen van beide releases de pull-aanvragen worden vermeld die deze bevatten.

Cosmos Labs zei dat het op de hoogte is van zes ketens waarop de exploit werd misbruikt.

Aanvallers verkochten ongeveer 2,87 miljoen dollar aan getroffen activa op gedecentraliseerde beurzen op basis van de prijzen van 19 augustus, een cijfer dat volgens het bedrijf door de getroffen ketens werd verstrekt en niet onafhankelijk is gecontroleerd. Nog eens 2,85 miljoen dollar werd verkocht op gecentraliseerde beurzen, een schatting van Cosmos Labs op basis van openbaar beschikbare volumegegevens.

Het Cosmos-ecosysteem omvat meer dan 115 bekende openbare blockchains, en het bedrijf zegt dat het geen volledig register bijhoudt van de netwerken waarop de software draait, hetzelfde gat waardoor downstream-leveranciers in juli gebundelde bestandssysteemfouten moesten patchen.

The Hacker News heeft contact opgenomen met Cosmos Labs voor commentaar over waarom de patch niet privé werd verspreid nadat het team had bevestigd dat alle ketens getroffen waren, en zal dit verhaal bijwerken met eventuele reacties.

Thijs Van der Does