Hi there,
the following problem is present in 0.9.6 and 0.9.6c.
It is possible to put server code into the internal infinite
loop in ssl3_read_bytes() by sending the following data from
the client right after establishing TCP connection:
01 03 01 00 01 00
i.e. the record with type 1, version TLSv1, size 1 and dummy payload.
Calling stack will look like this:
SSL_accept()
ssl3_accept()
ssl3_get_client_hello()
ssl3_get_message()
ssl3_read_bytes()
The problem is in the code that was supposed to ignore unknown TLS
message types:
switch (rr->type)
{
default:
#ifndef NO_TLS
/* TLS just ignores unknown message types */
if (s->version == TLS1_VERSION)
{
goto start;
}
#endif
...
The code passes control back to start without resetting 'rr' length,
thus causing code not to ignore the record and process next one, but
rather process current one *again*. This yeilds an infinite loop.
>From the first glance, the fix is to add
rr->length = 0;
right before 'goto start;' line from above. This may leak a memory
though if 'rr' requires explicit disposition via function call.
I am not subscribed to any openssl maillists, so please reply privately
if needed.
regards,
alex.
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]