mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Limit STVar recursion during deserialization (RIPD-1603):
Constructing deeply nested objects could allow an attacker to cause a server to overflow its available stack. We now enforce a 10-deep nesting limit, and signal an error if we encounter objects that are nested deeper. Acknowledgements: Ripple thanks Guido Vranken for responsibly disclosing this issues. Bug Bounties and Responsible Disclosures: We welcome reviews of the rippled codebase and urge reviewers to responsibly disclose any issues that they may find. For more on Ripple's Bug Bounty program, please visit https://ripple.com/bug-bounty
This commit is contained in:
committed by
Nikolaos D. Bougalis
parent
9af994ceb4
commit
881cd4cfad
@@ -63,7 +63,7 @@ STArray::STArray (SField const& f, int n)
|
||||
v_.reserve(n);
|
||||
}
|
||||
|
||||
STArray::STArray (SerialIter& sit, SField const& f)
|
||||
STArray::STArray (SerialIter& sit, SField const& f, int depth)
|
||||
: STBase(f)
|
||||
{
|
||||
while (!sit.empty ())
|
||||
@@ -97,8 +97,7 @@ STArray::STArray (SerialIter& sit, SField const& f)
|
||||
Throw<std::runtime_error> ("Non-object in array");
|
||||
}
|
||||
|
||||
v_.emplace_back(fn);
|
||||
v_.back().set (sit, 1);
|
||||
v_.emplace_back(sit, fn, depth+1);
|
||||
|
||||
if (v_.back().setTypeFromSField (fn) == STObject::typeSetFail)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user