Skip to content

Add signed-length validation to d2i, PEM, and buffer-load APIs#10207

Draft
ColtonWilley wants to merge 1 commit intowolfSSL:masterfrom
ColtonWilley:d2i_pem_negative_length
Draft

Add signed-length validation to d2i, PEM, and buffer-load APIs#10207
ColtonWilley wants to merge 1 commit intowolfSSL:masterfrom
ColtonWilley:d2i_pem_negative_length

Conversation

@ColtonWilley
Copy link
Copy Markdown
Contributor

@ColtonWilley ColtonWilley commented Apr 13, 2026

Internal security review found that ~25 public API entry points accept signed
length parameters (long/int) and cast them to word32 or size_t without rejecting
negative values first. A negative length wraps to a huge unsigned value, giving
ASN.1 parsers and memcpy calls a bogus bound.

Three main areas fixed:

  • d2i_* OpenSSL compat wrappers (ECDSA_SIG, RSA, X509, OCSP, etc.) — add
    len <= 0 guards before the (word32) casts
  • ProcessBuffer and PemToDer shared sinks — one guard each closes ~20 buffer-load
    entry points and all PEM conversion paths respectively
  • Certgen helpers (wc_SetIssuerBuffer, wc_SetSubjectBuffer, etc.) — reject
    negative derSz before forwarding to wc_SetCert_LoadDer

Also fixes an integer overflow in wolfSSL_ASN1_STRING_set where sz == INT_MAX
caused sz + 1 to wrap, bypassing the buffer size check.

8 locations were audited and confirmed already safe (existing guards catch
negatives). Those are left unchanged.

Still needs additional testing, PR up early for duplicate detection on vulnerability reports.

…er loaders

Reject negative signed lengths before they are cast to unsigned (word32/size_t),
preventing heap buffer over-reads and oversized allocations. Covers d2i_* OpenSSL
compat wrappers, ProcessBuffer, PemToDer, certgen helpers, and CRL buffer paths.
@ColtonWilley ColtonWilley marked this pull request as draft April 13, 2026 21:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant