This document describes changes to the Stellar protocol as well as other changes made to address security issues.
It is organized as a reverse chronological timeline of releases.
(does not apply to protocol changes that are not security related)
The goal is work with the larger security community on a responsible disclosure model.
It then follows that:
tag-name
- security - description of the problem and impact
tag-name
- protocol - description of the protocol change
Overlay
- subsystem used by peers to communicate to each otherHerder
- subsystem coordinating all other subsystemsSCP
- subsystem implementing SCPLedger
- Ledger management including transaction subsystemHistory
- History subsystemLedger
- protocol - new bumpSeqOp
, implementing CAP0001
Ledger
- protocol - updated signature verification, to be done at transaction
apply step. implements CAP0002
Ledger
- protocol - add liabilities to offers, implements CAP0003
Ledger
- security - rounding error could allow dust trades to make large error.
Ledger
- protocol - fast fail attempts to changeTrustOp
on native.
Ledger
- protocol - fast fail setOptionsOp
when attempting to set weight
of a signer to more than 255.
Herder
- protocol - properly compute next ledger start time (could lead to rounds starting too early).
SCP
- protocol - make timing out of the ballot counters less aggressive (reduce overall SCP time to close a ledger).
Overlay
- security - stack overflow when processing bad xdr (DDoS)
History
- protocol - some snapshot files could be corrupt when generated (rendering them unusable)
SCP
- protocol - allow values to be validated differently during nomination and ballot protocol (used to be potentially more strict for the values generated during nomination)
Herder
- protocol - change the way upgrades are managed to be “one time triggers” instead of being on all the time
Overlay
- peer could perform multiple handshakes in parallel denying other nodes from connecting (DDoS)
Overlay
- all peers got dropped when node was getting overloaded by a single peer (DDoS)
Ledger
- security - overflow in base reserve computation would allow certain operation to reduce the balance below reserve.
Ledger
- protocol - manageOffer
now computes the amount of Lumens that can be sold as if the offer was created
Ledger
- protocol - make BASE_RESERVE
configurable
Ledger
- protocol - update fee processing check to not double count fee (allows to spend the last minfee
amount from an account)
Ledger
- protocol - updated protocol version to 9
Ledger
- security - invalid use of cached data could lead to lumen creation (double spend) or destruction
pathPaymentOp
), practically speaking this ended up being equivalent to a forced distribution of Lumens by the foundation.Ledger
- protocol - updated protocol version to 8 (2017-04-26)
Ledger
- protocol - inflation fix: properly update totalCoins
that are re-injected in feePool
(due to rounding or deleted winners), was causing totalCoins
to not match the actual sum of all coins in existence
Ledger
- protocol - don’t use cached data when sending to self using pathPaymentOp
Ledger
- protocol - never cache account data between operations
Ledger
- protocol - updated protocol version to 7
Ledger
- protocol - temporary disable signature verification in preparation for version 8 that contains fixes for caching problems
Ledger
- security - merge account could be called on an account already merged in the same ledger, causing the Lumens balance of the doubly merged account to be credited multiple times into the destination account
Ledger
- protocol - updated protocol version to 6
Ledger
- protocol - reload balance of source account when merging accounts (bad fix)
Ledger
- security - merge account could be called on an account already merged in the same ledger, causing the Lumens balance of the doubly merged account to be credited multiple times into the destination account
Ledger
- protocol - updated protocol version to 5
Ledger
- protocol - don’t allow merging accounts from non-existant accounts (bad fix)
Ledger
- protocol - updated protocol version to 4
Ledger
- protocol - ensure that ManageData
cannot be used on unsupported on protocol version smaller than (and including) 3
Ledger
- protocol - updated protocol version to 3
Ledger
- protocol - perform additional checks when sending to self (make failures consistent with non self payments of non-native assets)
Ledger
- protocol - updated order book’s rounding (avoid double round down when dealing with dust trades)
Ledger
- protocol - added hash(tx)
and hash(X)
as signing methods
Ledger
- protocol - do not allow to call AllowTrustOp
and ChangeTrustOp
on self
Ledger
- protocol - do not allow to create an offer with an amount of 0 (would fail as if it deleted an offer)
Ledger
- protocol - properly set lastModifiedLedgerSeq
for DataEntry
SCP
- protocol - limit number of validators in a quorum set to a smaller value
Overlay
- security - node would cache data that it didn’t request, potentially purging data that it would need from cache (DDoS)
Ledger
- protocol - added support for DataEntry
and ManageDataOp
Herder
- security - arbitrary validators on the network could send messages, causing validators to use up all their memory (DDoS)
SCP
- security - bad sequence of messages could lead to node crashing (DDoS)
SCP
- protocol - adjustments based on the whitepaper updates as of November 17 2015Overlay
- security - busy loop when peers were claiming to have data they don’t have (DDoS)
SCP
- protocol - adjustments based on the whitepaper updates as of November 2015
Overlay
- security - bad peers would be retried, bypassing the PREFERRED_PEERS setting (DDoS)
Overlay
- security - partial messages not handled properly could lead to busy peers (DDoS)
Herder
- security - creation of unknown slots would allow malicious peers to allocate memory (DDoS)
SCP
- protocol - additional validation of quorum sets