use SecureRandom for the multipart boundary and websocket key#2282
Open
madib06ops wants to merge 1 commit into
Open
use SecureRandom for the multipart boundary and websocket key#2282madib06ops wants to merge 1 commit into
madib06ops wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.