La semnare, Bitcoin Core 26.2 nu mai presupune că un TapMiniscript este sane (#29853), getnetworkhashps întoarce o eroare la parametri invalizi (#28554), iar setmocktime are un maxim impus (#29869). Compilarea merge și cu miniupnpc 2.2.8.
Bitcoin Core
Buletin de securitateDezvoltare2 minute de lectură
Înainte de Bitcoin Core 0.10.1, mesajele primite puteau ajunge la 32 MiB, așa că un atacator putea forța alocarea acestei cantități de RAM pe fiecare conexiune și, eventual, prăbuși nodul. Problema a raportat-o utilizatorul Bitcointalk Evil-Knievel; #5843 a coborât limita la 2 MiB, ridicată ulterior la 4 MB pentru Segwit. O dezvăluire anunțată pentru 2015 a fost amânată, iar detaliile au apărut în 2024.
Bitcoin Core
Buletin de securitateDezvoltare2 minute de lectură
IPv6 a făcut ieftină umflarea listei de bannări, fără limită, din Bitcoin Core, iar fiecare mesaj GETADDR forța apoi o scanare a acelei liste pentru fiecare adresă returnată, până la 2500. Prăbușirea din lipsă de memorie și consumul de CPU, cu severitate ridicată, au dispărut amândouă prin #19219, inclus în 0.20.1 și 0.21.0.
Două buguri din tratarea mesajului version, o depășire de întreg cu semn și o eroare de logică în abs64, îi permiteau unui atacator să decaleze timpul ajustat al victimei până când aceasta respingea blocuri noi ca fiind datate prea departe în viitor. Atacatorul trebuia să fie printre primii 200 de peeri conectați. Problema, de severitate medie, s-a rezolvat în Bitcoin Core 0.21.0.
Deschiderea unui link de plată BIP72 falsificat putea prăbuși Bitcoin-Qt: parametrul r putea indica un fișier imens, iar aplicația încerca să aloce memorie pentru el în timp ce descărcarea rula discret în fundal. Bugul, de severitate medie, a dispărut odată ce #17165 a eliminat suportul BIP70, schimbare livrată în 0.20.0.
Bitcoin Core
Buletin de securitateDezvoltare2 minute de lectură
Tranzacții orfane construite special, invalide, dar costisitoare de validat, puteau bloca un nod ore în șir, pentru că fiecare tranzacție nou acceptată declanșa o căutare pătratică în cache-ul de orfani. #15644, de la Pieter Wuille, întrerupe această muncă pentru a procesa mesaje noi imediat ce apare o potrivire. Remedierea acestui bug de severitate ridicată a ajuns la utilizatori în Bitcoin Core 0.18.0.
Un mesaj GETDATA malformat putea ține firul net_processing la 100% CPU în versiunile Bitcoin Core anterioare 0.20.0, adăugând 1,5 MB de memorie pentru fiecare peer atacator. Ceilalți peeri continuau să fie serviți, de aici severitatea scăzută. John Newbery a găsit bugul și l-a reparat în #18808.
Headerele construite direct pe blocul genesis, care cereau doar dificultatea 1, au scăpat de logica de checkpoint din Bitcoin Core 0.12.0 până la 0.15.0, așa că un spammer putea mări fără limită mapBlockIndex și, eventual, prăbuși nodul din lipsă de memorie. Cory Fields a raportat bugul de severitate medie în 2017, iar #11028 l-a închis.
Un singur INV cu 50.000 de elemente de tip bloc putea face un nod să pună la coadă 50.000 de răspunsuri getheaders de circa 1 kB fiecare, iar un peer care refuza să le citească ținea plin acel buffer de trimitere de 50 MB. #18962, de la John Newbery, prezentat drept economie de lățime de bandă, trimite câte un singur GETHEADERS per INV și a intrat în 0.20.0.
Bitcoin Core
Buletin de securitateDezvoltare2 minute de lectură
Un atacator care nu răspundea la GETDATA și apoi trimitea anunțuri false în masă, ca să scoată o tranzacție din mapa g_already_asked_for de 50.000 de poziții, o putea reanunța la nesfârșit și o împiedica pe victimă s-o ceară de la altcineva. John Newbery a dezvăluit bugul, de severitate medie; #19988, de la Pieter Wuille, l-a reparat în Bitcoin Core 0.21.0.
Bitcoin Core
Buletin de securitateDezvoltare2 minute de lectură
Un al doilea buffer overflow din miniupnpc, găsit de Wladimir J. Van Der Laan, scurgea date și putea fi înlănțuit cu CVE-2015-6031 pentru execuție de cod la distanță, lucru demonstrat de el pe miniupnpc 1.6-precise din Ubuntu. Exploitul lui nu se putea porta direct pe Bitcoin Core, iar versiunea 0.12 a adus remedierea în februarie 2016.
Bitcoin Core 27.1 e plin de remedieri de buguri: creșterea comisionului din GUI pentru tranzacții nesemnate merge din nou, câmpul IP pentru proxy nu mai acceptă port, iar GetAddedNodeInfo() detectează acum peerii CJDNS adăugați cu addnode (#30085). Se schimbă și tratarea TapMiniscript la semnare (#29853).
Transportul BIP324 v2 e activ implicit în Bitcoin Core 27.0, iar noul algoritm CoinGrinder caută cel mai ușor set de intrări la comisioane de 30 sat/vB și peste. Timpul ajustat de rețea iese din codul de consens în favoarea timpului de sistem, așa că operatorii trebuie să aibă mai multă grijă la acuratețea ceasului. libbitcoinconsensus devine depreciat, cu eliminare planificată în v28.
Nodurile cu Bitcoin Core 25.2 nu mai procesează blocuri mutate (#29412). Actualizarea mai repară un segfault în getrawtransaction (#29003), un use-after-free în WalletBatch::EraseRecords (#29176) și un crash al GUI la selectarea opțiunii „Mask values”.
Sesiunile I2P din Bitcoin Core 26.1 folosesc atât criptare ECIES-X25519, cât și ElGamal (#29200), iar nodul afișează acum în log progresul încărcării mempoolului. Printre remedieri se numără refuzul de a procesa blocuri mutate (#29412) și un portofel care sare peste selecția de monede BnB când SFFO e activ (#28994).
Transportul experimental BIP324 v2 debutează în Bitcoin Core 26.0, dezactivat implicit și pornit cu -v2transport. Noul RPC loadtxoutset încarcă snapshoturi assumeutxo și oferă un nod utilizabil în câteva minute, în timp ce chainstate-ul original își termină validarea în fundal, iar submitpackage trimite tranzacții brute în mempool sub formă de pachet.
Bitcoin Core 24.2 nu mai servește estimări de comision învechite (#27622) și corectează tratarea adreselor bech32 invalide în RPC (#27727). Restul schimbărilor vizează mai ales sistemul de compilare și CI, inclusiv o reparație la compilarea pachetului Qt pentru macOS cu linkerul din Xcode 15 (#28543).
Descărcările paralele de compact block ajung în Bitcoin Core 25.1 (#27626). Alte remedieri vizează un crash REST pe /deploymentinfo (#27853), oprirea serverului după deconectarea unui client de la distanță (#28551) și migrarea portofelelor, care acum refuză scripturile invalide (#28125).
Rescanările portofelelor descriptor merg mai repede în Bitcoin Core 25.0 când filtrele compacte de bloc BIP158 sunt disponibile prin -blockfilterindex=1, iar noul RPC scanblocks caută în aceste filtre. Politica de retransmitere acceptă acum tranzacții de la 65 de octeți non-witness în sus. Cu -blocksonly, memoria maximă a mempoolului scade de la 300 MB la 5 MB.
Trei schimbări P2P țin capul de afiș în Bitcoin Core 23.2: gata cu coruperea peers.dat (#26909), nicio ștergere prematură a stării de descărcare a altor peeri (#27608) și cozi inv-to-send mai rapide (#27610). Restul e muncă de compilare și CI, cum ar fi compilarea bdb cu clang-16 pe aarch64.