Coinspect heeft CryptoJS.lib.WordArray.random() geïdentificeerd als de zwakke generator van willekeurige getallen achter het leeglopen van de Ill Bloom-portemonnee.
De functie werd twaalf jaar geleden geïntroduceerd in de JavaScript-cryptografiebibliotheek en leverde een zwakke entropie op die van invloed was op portemonnee-apps die werden gebruikt om herstelzinnen te genereren. De on-chain analyse van Coinspect plaatst de gemeten diefstal sinds eind mei op een ondergrens van ongeveer $5,7 miljoen.
Het blockchain-beveiligingsbedrijf, dat de Ziek bloei naam in juli, heeft nu vijf toepassingen bevestigd die de generator gebruikten als entropiebron voor het genereren van herstelzinnen:
- RRWalletwaarvan Coinspect zegt dat het niet meer bestaat. Geen oplossing.
- Bexo-portemonneewaarvan Coinspect zegt dat het is opgelost in versie 20.1.0, hoewel de bijgewerkte builds nog niet waren geüpload.
- NanChatdie onafhankelijk bevestigde dat versies vóór 1.3.0 getroffen waren. Opgelost in 1.3.0.
- Bitcoin vrijwaarvan Coinspect zegt dat het probleem is opgelost in versie 4, uitgebracht in juli 2024.
- Milowaarvan Coinspect zegt dat het niet meer bestaat. Geen oplossing.
Coinspect vertelde The Hacker News dat dit dezelfde vijf portemonnees zijn waarnaar het in juli zonder naam verwijst.
Het bedrijf zei dat de verkoper achter de browserextensie die in juli werd genoemd, vertelde dat de extensie was stopgezet en nooit op grote schaal werd gebruikt. Coinspect waarschuwde dat het niet kan bevestigen dat het elke kwetsbare portemonnee heeft geïdentificeerd. Mogelijk bestonden er ook andere getroffen portemonnees voor mobiele apparaten of browserextensies, maar deze konden niet worden onderzocht omdat ze al waren verwijderd uit appstores of extensiemarktplaatsen, of omdat leveranciers ze hadden vervangen door gepatchte releases en de oudere kwetsbare versies niet langer beschikbaar waren.
De openbare bekendmaking biedt geen volledige reeks getroffen versies voor RRWallet, Bexo, Bitcoin Libre of Milo. Het updaten van de app herstelt geen bestaande zin.
Een herstelzin die door een getroffen versie wordt gegenereerd, blijft overal te raden, waar deze ook wordt geïmporteerd, ook in een hardwarewallet. Gebruikers van wie de zinnen afkomstig zijn van een getroffen pad moeten veilig een nieuw pad aanmaken en het geld overmaken. Coinspect zegt dat door hardware gegenereerde zaden en de meeste huidige softwareportefeuilles onaangetast blijven.
Coinspect analyseerde 128- en 256-bits entropie. Die zouden zoekruimten van 2^128 en 2^256 moeten opleveren, maar de kwetsbare generator reduceerde ze tot grofweg 2^39 en 2^47, klein genoeg om op gewone hardware op te sommen.
Het bedrijf reproduceerde de aanvalsketen door de outputs op te sommen, deze om te zetten in BIP39-zinnen, adressen af te leiden en deze te vergelijken met openbare blockchain-gegevens.
De bibliotheek heeft dit één keer opgelost en vervolgens weer verwijderd. De Multiply-With-Carry-generator, voortgekomen uit Math.random(), arriveerde in juni 2014. Releases 3.2.0 en 3.2.1 schakelden over naar native cryptografische willekeur, maar 3.3.0 herstelde de zwakke code omdat de wijziging als brekend werd beschouwd. Een upgrade binnen 3.x kan daarom een project van een vaste release naar een kwetsbare release verplaatsen. Versie 4.0.0 herstelde de inheemse willekeur permanent in februari 2020.
Coinspect identificeerde ferrumnet/bip39, een React Native-vork die de eigen cryptografische willekeur van upstream bip39 verving door CryptoJS, als één route naar portemonneesoftware, en niet de enige.
CryptoJS-onderhouder Evan Vosberg publiceerde op 5 augustus GHSA-rg76-677x-56q9 met een kritische beoordeling en een CVSS-score van 9,0. Het pakketveld vermeldt elke release onder 4.0.0, ondanks de uitzonderingen van 3.2.0 en 3.2.1.
Het advies zegt dat een applicatie alleen wordt getroffen als deze de kwetsbare functie gebruikt om beveiligingsgevoelige waarden te genereren. Het dragen van de afhankelijkheid alleen voldoet niet aan die voorwaarde, dus het pakketbereik is breder dan de reeks exploiteerbare applicaties.
Zodra een herstelzin is gegenereerd op basis van de uitvoer van de functie, kan daaropvolgende hashing of PBKDF2-verwerking de ontbrekende entropie niet herstellen, noch kan een latere pakketupdate dit doen.
Coinspect zegt dat de fout werd uitgebuit in twee afvoergolven. Een sweep van 27 mei kostte ongeveer $3,14 miljoen van 431 accounts. Een tweede run tussen 30 mei en 13 juli kostte $2,55 miljoen van adressen gekoppeld aan 522 zaden, waaronder ongeveer 2,18 miljoen USDT van één Tron-account op 4 juli.
De latere analyse volgt 2.114 geïdentificeerde zaden en bijbehorende adressen in Bitcoin, Ethereum, Tron, Rootstock en Polygon. Samen schatten de analyses de gemeten verliezen op $5.690.922 tot en met 13 juli, wat Coinspect omschrijft als een ondergrens.
Coinspect schatte op basis van blockchain-gegevens dat de getroffen bevolking in de duizenden loopt via Ethereum Virtual Machine (EVM)-compatibele netwerken en Bitcoin, maar gaf geen uitsplitsing per portemonnee. Vanaf 6 augustus was NanChat de enige genoemde applicatie die een openbaar advies had gepubliceerd.
Coinspect vertelde The Hacker News dat de 20.1.0-fix van Bexo niet platformspecifiek is, maar dat de bijgewerkte builds nog niet waren geüpload. The Hacker News controleerde de officiële winkelgegevens van Bexo op 6 augustus. Apple’s App Store vermeldde versie 18.3.5 als de huidige iPhone-release, terwijl Google Play op 20 mei een Android-update liet zien, maar geen openbaar versienummer. Geen van beide vermeldingen bevestigde dat versie 20.1.0 beschikbaar was op het moment van beoordeling.
Coinspect adviseerde gebruikers van portemonnees die actief blijven om de officiële kanalen van de projecten te raadplegen voor actuele versie- en migratierichtlijnen. The Hacker News heeft ook contact opgenomen met Bexo voor opheldering.
Het advies van NanChat vertelt gebruikers die vóór v1.3.0 een portemonnee hebben gemaakt, deze als gecompromitteerd te beschouwen en te migreren. Versie 1.3.0 bevat een tool om een nieuw zaadje te genereren en het geld te verplaatsen. Coinspect-oprichter en CEO Juliano Rizzo meldde de kwestie op 10 juni; de oplossing werd twee dagen later verzonden.
Coinspect zei dat het de technische details twee maanden lang achterhield, terwijl het leveranciers op de hoogte bracht en naar blootgestelde adressen zocht.
De openbare checker van Coinspect accepteert portemonnee-adressen, geen herstelzinnen of privésleutels. Een match betekent dat activa die aan dezelfde zin zijn gekoppeld, direct gevaar kunnen lopen. Een negatief resultaat betekent alleen dat het adres niet voorkomt in de momenteel gepubliceerde datasets.