Two Base64 Memory-Safety CVEs
in the AWS SDK for C++
Amazon Web Services has published a security bulletin for two memory-safety issues that we reported in the AWS SDK for C++: CVE-2026-19642 and CVE-2026-19643, both rated medium by AWS. We found them by verifying the SDK's hand-written Base64 decoder with ESBMC, driving it with symbolic inputs rather than individual test strings. Both are fixed in AWS SDK for C++ 1.11.862.
2
CVEs assigned by AWS from our ESBMC analysis (CVE-2026-19642, CVE-2026-19643)
Medium
severity rating AWS assigned to both issues (CVSS v4.0 6.0)
1.11.862
AWS SDK for C++ release carrying the fix, published 2026-08-03
2026-080
AWS security bulletin covering both issues, published 2026-08-12
Context
The AWS SDK for C++ is the client library through which C++ applications talk to AWS services, and Base64 decoding sits on a path that almost every such application exercises: it is how binary payloads, signatures, and service responses are carried over text protocols. That makes the decoder a piece of parsing code that routinely handles attacker-influenced input, in a language with no bounds checking of its own.
The decoder in question was hand-written rather than delegated to a hardened implementation. Hand-written decoders are exactly the shape of code where length arithmetic goes wrong quietly: the buffer is sized from one calculation, the write loop is bounded by another, and the two agree on the inputs anyone thought to test.
Approach
We analysed the decoder with ESBMC, our software model checker, which automatically detects, or proves the absence of, runtime errors such as buffer overflows in C++ programs. Rather than testing individual strings, we supplied symbolic inputs: the decoder was asked to run on every input up to a given bound at once, and the solver was asked whether any of them could drive a memory-safety violation.
This is the difference that mattered here. A fuzzer or a unit-test suite samples the input space and reports what it happened to hit; bounded model checking reasons over the whole space up to the bound and either returns a concrete counterexample or establishes that none exists. The counterexamples ESBMC produced were exact input strings, which made the reports directly actionable for the AWS Security team.
Results
CVE-2026-19642, out-of-bounds write (CWE-787). Certain inputs cause the decoder to write past the end of its heap-allocated output buffer, which might crash the process or corrupt memory. AWS rates it medium (CVSS v4.0 6.0, v3.1 5.9) and notes that remote code execution has not been demonstrated.
CVE-2026-19643, out-of-bounds read (CWE-125). Specific inputs cause the decoder to read outside the bounds of its decode table, which might crash the process on some platforms. AWS rates it medium (CVSS v4.0 6.0, v3.1 5.3).
A class of inputs, not a single edge case. The out-of-bounds behaviour traces back to the decoder's length arithmetic, so it is reachable from a family of well-formed Base64 inputs rather than from one malformed string. That is the property that makes exhaustive reasoning worth the effort: the bug is not hiding in a corner of the input space that a test author forgot, it is a systematic mismatch that sampling can miss entirely.
Fixed in AWS SDK for C++ 1.11.862 (released 2026-08-03). The fix delegates Base64 operations to the AWS Common Runtime rather than patching the hand-written decoder in place. AWS published security bulletin 2026-080 on 2026-08-12, crediting the coordinated disclosure.
If you use the SDK
Upgrade to AWS SDK for C++ 1.11.862 or later. Because the fix moves Base64 handling
into the AWS Common Runtime, a version bump alone is not always sufficient: if you
build the SDK from source or link it statically, confirm that your build actually
picks up the updated
aws-crt-cpp
dependency, rather than resolving to a pinned or vendored copy of the old one.
What this means
Parsing and decoding routines in production C++ are small, self-contained, and heavily exercised, which is precisely the profile that bounded model checking handles well. A decoder of this size can be reasoned about exhaustively up to a useful bound in the time it takes to write a handful of unit tests, and the output is either a concrete crashing input or a proof that none exists below the bound. For teams shipping C++ that touches untrusted bytes, that is a cheaper and sharper instrument than adding another sample of the input space to a test suite.
References
- AWS Security Bulletin 2026-080, "Memory-safety issues in the Base64 decoder in the AWS SDK for C++" (published 2026-08-12). aws.amazon.com/security/security-bulletins/2026-080-aws
- CVE-2026-19642, out-of-bounds write in the Base64 decoder in aws-sdk-cpp before 1.11.862 (CWE-787; CVSS v4.0 6.0 medium). nvd.nist.gov/vuln/detail/CVE-2026-19642
- CVE-2026-19643, out-of-bounds read in the Base64 decoder in aws-sdk-cpp before 1.11.862 (CWE-125; CVSS v4.0 6.0 medium). nvd.nist.gov/vuln/detail/CVE-2026-19643
- aws/aws-sdk-cpp, the AWS SDK for C++; release 1.11.862 carries the fix. github.com/aws/aws-sdk-cpp
- ESBMC, the open-source bounded model checker used for the analysis. github.com/esbmc/esbmc
Note. The issues were reported by Lucas Carvalho Cordeiro and Rafael Sá Menezes (University of Manchester), acknowledged by name in the AWS bulletin. CRC Ltd is not in a commercial partnership with AWS and the analysis was not commissioned by AWS; the findings went through AWS's coordinated vulnerability disclosure process, which the AWS Security team ran straightforwardly from first report to published bulletin. Technical details beyond those in the bulletin are withheld in line with that process.