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;
|
chunk_t assoc, mac, iv;
|
||||||
u_int8_t bs, padlen;
|
u_int8_t bs, padlen;
|
||||||
sigheader_t hdr;
|
sigheader_t hdr;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
iv.len = this->crypter->get_iv_size(this->crypter);
|
iv.len = this->crypter->get_iv_size(this->crypter);
|
||||||
if (data->len < iv.len)
|
if (data->len < iv.len)
|
||||||
@@ -126,6 +127,13 @@ METHOD(tls_aead_t, decrypt, bool,
|
|||||||
padlen = data->ptr[data->len - 1];
|
padlen = data->ptr[data->len - 1];
|
||||||
if (padlen < data->len)
|
if (padlen < data->len)
|
||||||
{ /* If padding looks valid, remove it */
|
{ /* 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;
|
data->len -= padlen + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ METHOD(tls_aead_t, decrypt, bool,
|
|||||||
chunk_t assoc, mac, iv;
|
chunk_t assoc, mac, iv;
|
||||||
u_int8_t bs, padlen;
|
u_int8_t bs, padlen;
|
||||||
sigheader_t hdr;
|
sigheader_t hdr;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
bs = this->crypter->get_block_size(this->crypter);
|
bs = this->crypter->get_block_size(this->crypter);
|
||||||
if (data->len < bs || data->len < this->iv.len || data->len % bs)
|
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];
|
padlen = data->ptr[data->len - 1];
|
||||||
if (padlen < data->len)
|
if (padlen < data->len)
|
||||||
{ /* If padding looks valid, remove it */
|
{ /* 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;
|
data->len -= padlen + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user