tls: Check all bytes of the padding if they equal the padding length
This commit is contained in:
@@ -106,6 +106,7 @@ METHOD(tls_aead_t, decrypt, bool,
|
||||
chunk_t assoc, mac, iv;
|
||||
u_int8_t bs, padlen;
|
||||
sigheader_t hdr;
|
||||
size_t i;
|
||||
|
||||
iv.len = this->crypter->get_iv_size(this->crypter);
|
||||
if (data->len < iv.len)
|
||||
@@ -126,6 +127,13 @@ METHOD(tls_aead_t, decrypt, bool,
|
||||
padlen = data->ptr[data->len - 1];
|
||||
if (padlen < data->len)
|
||||
{ /* If padding looks valid, remove it */
|
||||
for (i = data->len - padlen - 1; i < data->len - 1; i++)
|
||||
{
|
||||
if (data->ptr[i] != padlen)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
data->len -= padlen + 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -100,6 +100,7 @@ METHOD(tls_aead_t, decrypt, bool,
|
||||
chunk_t assoc, mac, iv;
|
||||
u_int8_t bs, padlen;
|
||||
sigheader_t hdr;
|
||||
size_t i;
|
||||
|
||||
bs = this->crypter->get_block_size(this->crypter);
|
||||
if (data->len < bs || data->len < this->iv.len || data->len % bs)
|
||||
@@ -116,6 +117,13 @@ METHOD(tls_aead_t, decrypt, bool,
|
||||
padlen = data->ptr[data->len - 1];
|
||||
if (padlen < data->len)
|
||||
{ /* If padding looks valid, remove it */
|
||||
for (i = data->len - padlen - 1; i < data->len - 1; i++)
|
||||
{
|
||||
if (data->ptr[i] != padlen)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
data->len -= padlen + 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user