Die Referenzimplementierung von Bitcoin. Ihre Website veröffentlicht Ankündigungen neuer Versionen, Sicherheitshinweise und Stellungnahmen des Projekts.
Beim Signieren geht Bitcoin Core 26.2 nicht mehr davon aus, dass ein TapMiniscript „sane“ ist (#29853), getnetworkhashps wirft bei ungültigen Parametern einen Fehler (#28554), und setmocktime hat einen erzwungenen Höchstwert (#29869). Auch mit miniupnpc 2.2.8 lässt sich die Software jetzt bauen.
Vor Bitcoin Core 0.10.1 durften empfangene Nachrichten bis zu 32 MiB groß werden, ein Angreifer konnte also pro Verbindung so viel RAM belegen und den Knoten womöglich zum Absturz bringen. Gemeldet hat das der Bitcointalk-Nutzer Evil-Knievel; #5843 senkte die Grenze auf 2 MiB, später stieg sie für SegWit auf 4 MB. Eine für 2015 angekündigte Offenlegung wurde verschoben, die Details kamen erst 2024 ans Licht.
Über IPv6 ließ sich die unbegrenzte Bannliste von Bitcoin Core billig aufblähen, und jede GETADDR-Nachricht erzwang dann für jede zurückgegebene Adresse, bis zu 2500 Stück, einen Durchlauf dieser Liste. #19219 beseitigte sowohl den Speicherabsturz als auch die CPU-Last; der als hoch eingestufte Fix erschien in 0.20.1 und 0.21.0.
Zwei Fehler bei der Verarbeitung von version-Nachrichten, ein Signed-Integer-Überlauf und ein Logikfehler in abs64, erlaubten es, die Adjusted Time eines Opfers so weit zu verschieben, dass es neue Blöcke als zu weit in der Zukunft datiert ablehnte. Dafür musste der Angreifer zu den ersten 200 Peers gehören. Bitcoin Core 0.21.0 behob die als mittelschwer eingestufte Schwachstelle.
Ein präparierter BIP72-Zahlungslink konnte Bitcoin-Qt abstürzen lassen: Sein Parameter r durfte auf eine riesige Datei zeigen, für die das Programm Speicher anzufordern versuchte, während der Download unbemerkt im Hintergrund lief. Der als mittelschwer eingestufte Fehler verschwand, als #17165 die BIP70-Unterstützung entfernte, ausgeliefert mit 0.20.0.
Präparierte Orphan-Transaktionen, ungültig, aber aufwendig zu validieren, konnten einen Knoten stundenlang blockieren, weil jede neu akzeptierte Transaktion eine quadratische Suche im Orphan-Cache anstieß. #15644 von Pieter Wuille bricht diese Arbeit ab, sobald ein Treffer auftaucht, und wendet sich neuen Nachrichten zu. Der als hoch eingestufte Fix kam mit Bitcoin Core 0.18.0 zu den Nutzern.
Eine fehlerhafte GETDATA-Nachricht konnte den net_processing-Thread in Bitcoin-Core-Versionen vor 0.20.0 in einer Schleife auf 100 % CPU festhalten und belegte pro angreifendem Peer zusätzlich 1,5 MB Speicher. Andere Peers wurden weiter bedient, daher die Einstufung niedrig. John Newbery fand den Fehler und behob ihn in #18808.
Header, die direkt auf dem Genesis-Block aufsetzten und nur Difficulty 1 brauchten, schlüpften von Bitcoin Core 0.12.0 bis 0.15.0 an der Checkpoint-Logik vorbei. Ein Spammer konnte so mapBlockIndex unbegrenzt wachsen lassen und den Knoten womöglich mit vollem Speicher abstürzen lassen. Cory Fields meldete den als mittelschwer eingestuften Fehler 2017, #11028 schloss ihn.
Eine einzige INV mit 50.000 Block-Einträgen konnte einen Knoten dazu bringen, 50.000 getheaders-Antworten von je etwa 1 kB einzureihen, und ein Peer, der sie nicht abholte, hielt den 50 MB großen Sendepuffer voll. #18962 von John Newbery, als Bandbreiten-Ersparnis vorgestellt, schickt nur noch ein GETHEADERS pro INV und kam mit 0.20.0.
Ein Angreifer hielt GETDATA-Antworten zurück und verdrängte die Transaktion dann mit Spam gefälschter Ankündigungen aus der 50.000 Einträge fassenden Map g_already_asked_for. Danach konnte er sie immer wieder ankündigen und das Opfer davon abhalten, sie bei anderen anzufordern. John Newbery legte den als mittelschwer eingestuften Fehler offen, #19988 von Pieter Wuille behob ihn in Bitcoin Core 0.21.0.
Ein zweiter Pufferüberlauf in miniupnpc, entdeckt von Wladimir J. Van Der Laan, gab Daten preis und ließ sich mit CVE-2015-6031 zu Remote Code Execution verketten, wie er gegen miniupnpc 1.6-precise von Ubuntu vorführte. Sein Exploit ließ sich nicht direkt auf Bitcoin Core übertragen; Version 0.12 brachte im Februar 2016 den Fix.
Lauter Bugfixes in Bitcoin Core 27.1: Die GUI kann die Gebühr unsignierter Transaktionen wieder erhöhen, ihr Proxy-IP-Feld nimmt keinen Port mehr an, und GetAddedNodeInfo() erkennt nun per addnode eingetragene CJDNS-Peers (#30085). Auch der Umgang mit TapMiniscript beim Signieren ändert sich (#29853).
Der BIP324-v2-Transport ist in Bitcoin Core 27.0 standardmäßig aktiv, und der neue Algorithmus CoinGrinder sucht ab Gebührensätzen von 30 sat/vB nach dem leichtesten Input-Set. Die netzwerkangepasste Zeit weicht im Konsenscode der Systemzeit, für Betreiber zählen genaue Uhren also mehr. libbitcoinconsensus gilt als veraltet, die Entfernung ist für v28 geplant.
Mutierte Blöcke verarbeiten Knoten unter Bitcoin Core 25.2 nicht mehr (#29412). Das Update beseitigt außerdem einen Segfault in getrawtransaction (#29003), einen Use-after-free in WalletBatch::EraseRecords (#29176) und einen GUI-Absturz bei der Auswahl von „Mask values“.
I2P-Sitzungen nutzen in Bitcoin Core 26.1 sowohl ECIES-X25519 als auch ElGamal (#29200), beim Laden des Mempools protokolliert der Knoten nun den Fortschritt. Zu den Fixes zählen die Weigerung, mutierte Blöcke zu verarbeiten (#29412), und eine Wallet, die bei aktivem SFFO auf die BnB-Coin-Selection verzichtet (#28994).
Experimentell und standardmäßig abgeschaltet debütiert der BIP324-v2-Transport in Bitcoin Core 26.0, einschalten lässt er sich mit -v2transport. Der neue RPC loadtxoutset lädt assumeutxo-Snapshots: Der Knoten ist binnen Minuten nutzbar, während der ursprüngliche Chainstate im Hintergrund fertig validiert. submitpackage schickt Raw-Transaktionen als Paket an den Mempool.
Veraltete Gebührenschätzungen gibt Bitcoin Core 24.2 nicht mehr aus (#27622), auch der Umgang des RPC mit ungültigen bech32-Adressen ist korrigiert (#27727). Die meisten übrigen Änderungen betreffen Build-System und CI, darunter ein Fix für den Build des macOS-Qt-Pakets mit dem Linker von Xcode 15 (#28543).
Compact Blocks lassen sich mit Bitcoin Core 25.1 parallel herunterladen (#27626). Weitere Fixes betreffen einen REST-Absturz bei /deploymentinfo (#27853), das Herunterfahren des Servers nach dem Abbruch eines entfernten Clients (#28551) und die Wallet-Migration, die ungültige Skripte jetzt ablehnt (#28125).
Schneller laufen Rescans von Descriptor-Wallets in Bitcoin Core 25.0, wenn BIP158-Compact-Block-Filter über -blockfilterindex=1 bereitstehen; der neue RPC scanblocks durchsucht diese Filter. Die Relay-Policy akzeptiert nun Transaktionen ab 65 Nicht-Witness-Bytes. Unter -blocksonly sinkt der maximale Mempool-Speicher von 300 MB auf 5 MB.
Drei P2P-Änderungen tragen Bitcoin Core 23.2: keine beschädigte peers.dat mehr (#26909), kein vorzeitiges Löschen des Download-Status anderer Peers (#27608) und schnellere Inv-to-send-Warteschlangen (#27610). Der Rest ist Arbeit an Build und CI, etwa das Kompilieren von bdb mit clang-16 auf aarch64.