mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
![]() If php_random_bytes_throw fails, the nonce will be uninitialized, but still sent to the server. The client nonce is intended to protect against a malicious server. See section 5.10 and 5.12 of RFC 7616 [1], and bullet point 2 below. Tim pointed out that even though it's the MD5 of the nonce that gets sent, enumerating 31 bits is trivial. So we have still a stack information leak of 31 bits. Furthermore, Tim found the following issues: * The small size of cnonce might cause the server to erroneously reject a request due to a repeated (cnonce, nc) pair. As per the birthday problem 31 bits of randomness will return a duplication with 50% chance after less than 55000 requests and nc always starts counting at 1. * The cnonce is intended to protect the client and password against a malicious server that returns a constant server nonce where the server precomputed a rainbow table between passwords and correct client response. As storage is fairly cheap, a server could precompute the client responses for (a subset of) client nonces and still have a chance of reversing the client response with the same probability as the cnonce duplication. Precomputing the rainbow table for all 2^31 cnonces increases the rainbow table size by factor 2 billion, which is infeasible. But precomputing it for 2^14 cnonces only increases the table size by factor 16k and the server would still have a 10% chance of successfully reversing a password with a single client request. This patch fixes the issues by increasing the nonce size, and checking the return value of php_random_bytes_throw(). In the process we also get rid of the MD5 hashing of the nonce. [1] RFC 7616: https://www.rfc-editor.org/rfc/rfc7616 Additionally: * Fix GH-11382 add missing hash header for bin2hex * Update NEWS Co-authored-by: Tim Düsterhus <timwolla@php.net> Co-authored-by: Remi Collet <remi@remirepo.net> Co-authored-by: Pierrick Charron <pierrick@php.net> |
||
---|---|---|
.. | ||
tests | ||
config.m4 | ||
config.w32 | ||
CREDITS | ||
php_encoding.c | ||
php_encoding.h | ||
php_http.c | ||
php_http.h | ||
php_packet_soap.c | ||
php_packet_soap.h | ||
php_schema.c | ||
php_schema.h | ||
php_sdl.c | ||
php_sdl.h | ||
php_soap.h | ||
php_xml.c | ||
php_xml.h | ||
soap.c | ||
soap.stub.php | ||
soap_arginfo.h |