|
|
(5 intermediate revisions by 3 users not shown) |
Line 1: |
Line 1: |
| == Micropayment contamination ==
| | #Redirect [[Common Vulnerabilities and Exposures]] |
| Around September 29, 2010, people started [http://www.bitcoin.org/smf/index.php?topic=1306.0 reporting] that their sent transactions would not confirm. This happened because people modified Bitcoin to send sub-0.01 transactions without any fees. A 0.01 fee was at that time required by the network for such transactions (essentially prohibiting them), so the transactions remained at 0 confirmations forever. This became a more serious issue because Bitcoin would send transactions using bitcoins gotten from transactions with 0 confirmations, and these resulting transactions would also never confirm. Because Bitcoin tends to prefer sending smaller coins, these invalid transactions quickly multiplied, contaminating the wallets of everyone who received them.
| |
| | |
| Bitcoin was changed to only select coins with at least 1 confirmation. The remaining sub-0.01 transactions were cleared by generators who modified their version of Bitcoin to not require the micropayment fee. It took a while for everything to get cleared, though, because many of the intermediate transactions had been forgotten by the network by this point and had to be rebroadcast by the original senders.
| |
| | |
| == Value overflow ==
| |
| | |
| On August 15 2010, it was [http://www.bitcoin.org/smf/index.php?topic=822.0 discovered] that block 74638 contained a transaction that created over 184 billion bitcoins for two different addresses. This was possible because the code used for checking transactions before including them in a block didn't account for the case of outputs so large that they overflowed when summed. A new version was published within a few hours of the discovery. The block chain had to be forked. Although many unpatched nodes continued to build on the "bad" block chain, the "good" block chain overtook it at a block height of 74691. The bad transaction no longer exists for people using the longest chain.
| |
| | |
| The block and transaction:
| |
| <pre>CBlock(hash=0000000000790ab3, ver=1, hashPrevBlock=0000000000606865, hashMerkleRoot=618eba,
| |
| nTime=1281891957, nBits=1c00800e, nNonce=28192719, vtx=2)
| |
| CTransaction(hash=012cd8, ver=1, vin.size=1, vout.size=1, nLockTime=0)
| |
| CTxIn(COutPoint(000000, -1), coinbase 040e80001c028f00)
| |
| CTxOut(nValue=50.51000000, scriptPubKey=0x4F4BA55D1580F8C3A8A2C7)
| |
| CTransaction(hash=1d5e51, ver=1, vin.size=1, vout.size=2, nLockTime=0)
| |
| CTxIn(COutPoint(237fe8, 0), scriptSig=0xA87C02384E1F184B79C6AC)
| |
| CTxOut(nValue=92233720368.54275808, scriptPubKey=OP_DUP OP_HASH160 0xB7A7)
| |
| CTxOut(nValue=92233720368.54275808, scriptPubKey=OP_DUP OP_HASH160 0x1512)
| |
| vMerkleTree: 012cd8 1d5e51 618eba
| |
| | |
| Block hash: 0000000000790ab3f22ec756ad43b6ab569abf0bddeb97c67a6f7b1470a7ec1c
| |
| Transaction hash: 1d5e512a9723cbef373b970eb52f1e9598ad67e7408077a82fdac194b65333c9</pre>
| |
| | |
| == OP_CHECKSIG abuse ==
| |
| | |
| On July 29 2010, it was discovered that block [http://blockexplorer.com/block/00000000000997f9fd2fe1ee376293ef8c42ad09193a5d2086dddf8e5c426b56 71036] contained several transactions with a ton of OP_CHECKSIG commands. There should only ever be one such command. This caused every node to do extra unnecessary work, and it could have been used as a denial-of-service attack. A new version of Bitcoin was quickly released. The new version did not cause a fork on the main network, though it did cause one on the test network (where someone had played around with the attack more).
| |
| | |
| == LSHIFT and RETURN bugs ==
| |
| | |
| On July 28 2010 two bugs were discovered and demonstrated on the test network. The first caused bitcoin to crash on some machines when processing a transaction containing an OP_LSHIFT. The second exploited another bug in the transaction handling code and allowed an attacker to spend coins that they did not own. Neither were exploited on the main network, and both were fixed by Bitcoin version 0.3.5.
| |
| | |
| After these bugs were discovered, many currently-unused [[script]] words were disabled for safety.
| |
| | |
| == ASCII embedding into blockchain ==
| |
| | |
| Security researchers Dan Kaminsky and Travis Goodspeed successfully embedded [http://pastebin.com/raw.php?i=BUB3dygQ extraneous text] into the blockchain from a mined block. This was disclosed on July 31, 2011, prior to Kaminsky's presentation at the Black Hat Briefings conference entitled [http://www.slideshare.net/dakami/black-ops-of-tcpip-2011-black-hat-usa-2011 Black Ops Of TCP/IP 2011].
| |
| | |
| Block chain embedding should not really be seen as an attack, as BitCoin is ultimately a channel by which arbitrary data is validated and retained over time. Indeed, the very first block in BitCoin (the [[genesis block]]) contains a text message. More worrisome was the observation that arbitrary content can be inserted into a transaction after it has been released to miners, but before it has been included into a block. This was done via an arbitrary prefix on the ScriptSig. Furthermore, IP deanonymization was shown to be relatively straightforward for an attacker who can connect to a large number of nodes.
| |
| [[Category:Technical]]
| |