mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 12:14:38 +02:00
Merge pull request #3418 from cconlon/zd11003
PKCS#7: check PKCS7 VerifySignedData content length against total bundle size
This commit is contained in:
@@ -4403,11 +4403,21 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf,
|
|||||||
ret = ASN_PARSE_E;
|
ret = ASN_PARSE_E;
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
/* Use single OCTET_STRING directly. */
|
/* Use single OCTET_STRING directly, or reset length. */
|
||||||
if (localIdx - start + length == (word32)contentLen)
|
if (localIdx - start + length == (word32)contentLen) {
|
||||||
multiPart = 0;
|
multiPart = 0;
|
||||||
|
} else {
|
||||||
|
/* reset length to outer OCTET_STRING for bundle size
|
||||||
|
* check below */
|
||||||
|
length = contentLen;
|
||||||
|
}
|
||||||
localIdx = start;
|
localIdx = start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret != 0) {
|
||||||
|
/* failed ASN1 parsing during OCTET_STRING checks */
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get length of content in case of single part */
|
/* get length of content in case of single part */
|
||||||
@@ -4425,6 +4435,16 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf,
|
|||||||
/* support using header and footer without content */
|
/* support using header and footer without content */
|
||||||
if (pkiMsg2 && pkiMsg2Sz > 0 && hashBuf && hashSz > 0) {
|
if (pkiMsg2 && pkiMsg2Sz > 0 && hashBuf && hashSz > 0) {
|
||||||
localIdx = 0;
|
localIdx = 0;
|
||||||
|
|
||||||
|
} else if (pkiMsg2 == NULL && hashBuf == NULL) {
|
||||||
|
/* header/footer not separate, check content length is
|
||||||
|
* not larger than total bundle size */
|
||||||
|
if ((localIdx + length) > pkiMsgSz) {
|
||||||
|
WOLFSSL_MSG("Content length detected is larger than "
|
||||||
|
"total bundle size");
|
||||||
|
ret = BUFFER_E;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
idx = localIdx;
|
idx = localIdx;
|
||||||
}
|
}
|
||||||
@@ -4440,7 +4460,10 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf,
|
|||||||
if (!degenerate && !detached && ret != 0)
|
if (!degenerate && !detached && ret != 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
length = 0; /* no content to read */
|
/* no content to read */
|
||||||
|
length = 0;
|
||||||
|
contentLen = 0;
|
||||||
|
|
||||||
pkiMsg2 = pkiMsg;
|
pkiMsg2 = pkiMsg;
|
||||||
pkiMsg2Sz = pkiMsgSz;
|
pkiMsg2Sz = pkiMsgSz;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user