Skip to content

use SecureRandom for the multipart boundary and websocket key#2282

Merged
hyperxpro merged 1 commit into
AsyncHttpClient:mainfrom
madib06ops:multipart-boundary-securerandom
Jul 23, 2026
Merged

use SecureRandom for the multipart boundary and websocket key#2282
hyperxpro merged 1 commit into
AsyncHttpClient:mainfrom
madib06ops:multipart-boundary-securerandom

Conversation

@madib06ops

Copy link
Copy Markdown
Contributor

computeMultipartBoundary draws the boundary from ThreadLocalRandom, which the JDK documents as not cryptographically secure: every value is mix32 over a per-thread 64-bit seed that advances by the fixed constant GAMMA, so an observer who recovers that state reproduces the whole sequence the thread will emit. Part content is never escaped, so the boundary is the only separator, and a caller that puts attacker-controlled bytes in any one field (a proxied upload, a user-supplied form value) lets that attacker close the part early and append a forged Content-Disposition, which the receiving server parses as an extra form field. getWebSocketKey builds the 16-byte Sec-WebSocket-Key nonce from the same generator, and RFC 6455 section 10.3 asks for a strong source of entropy there. Both now use a ThreadLocal, the same idiom already used for the Digest cnonce in Realm and the SCRAM nonce in ScramEngine.

@hyperxpro
hyperxpro merged commit 19ba076 into AsyncHttpClient:main Jul 23, 2026
25 of 26 checks passed
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.

2 participants