Skip to content

Commit 70165c5

Browse files
authored
Merge pull request #9571 from mattia-moffa/20251222-sniffer-uint-underflow-vuln
Add missing length check in sniffer for AES-GCM/AES-CCM/ARIA-GCM
2 parents 776b312 + ca78994 commit 70165c5

File tree

1 file changed

+31
-18
lines changed

1 file changed

+31
-18
lines changed

src/sniffer.c

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4847,32 +4847,45 @@ static int DecryptDo(WOLFSSL* ssl, byte* plain, const byte* input,
48474847
XMEMCPY(ssl->decrypt.nonce, ssl->keys.aead_dec_imp_IV, AESGCM_IMP_IV_SZ);
48484848
XMEMCPY(ssl->decrypt.nonce + AESGCM_IMP_IV_SZ, input, AESGCM_EXP_IV_SZ);
48494849

4850-
if ((ret = aes_auth_fn(ssl->decrypt.aes,
4851-
plain,
4852-
input + AESGCM_EXP_IV_SZ,
4853-
sz - AESGCM_EXP_IV_SZ - ssl->specs.aead_mac_size,
4854-
ssl->decrypt.nonce, AESGCM_NONCE_SZ,
4855-
ssl->decrypt.additional, AEAD_AUTH_DATA_SZ,
4856-
NULL, 0)) < 0) {
4857-
#ifdef WOLFSSL_ASYNC_CRYPT
4858-
if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) {
4859-
ret = wolfSSL_AsyncPush(ssl, &ssl->decrypt.aes->asyncDev);
4850+
if (sz < AESGCM_EXP_IV_SZ + ssl->specs.aead_mac_size) {
4851+
ret = BUFFER_ERROR;
4852+
}
4853+
4854+
if (ret == 0) {
4855+
ret = aes_auth_fn(ssl->decrypt.aes,
4856+
plain,
4857+
input + AESGCM_EXP_IV_SZ,
4858+
sz - AESGCM_EXP_IV_SZ - ssl->specs.aead_mac_size,
4859+
ssl->decrypt.nonce, AESGCM_NONCE_SZ,
4860+
ssl->decrypt.additional, AEAD_AUTH_DATA_SZ,
4861+
NULL, 0);
4862+
if (ret < 0) {
4863+
#ifdef WOLFSSL_ASYNC_CRYPT
4864+
if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) {
4865+
ret = wolfSSL_AsyncPush(ssl, &ssl->decrypt.aes->asyncDev);
4866+
}
4867+
#endif
48604868
}
4861-
#endif
48624869
}
48634870
}
48644871
break;
48654872
#endif /* HAVE_AESGCM || HAVE_AESCCM */
48664873

48674874
#ifdef HAVE_ARIA
48684875
case wolfssl_aria_gcm:
4869-
ret = wc_AriaDecrypt(ssl->decrypt.aria,
4870-
plain,
4871-
(byte *)input + AESGCM_EXP_IV_SZ,
4872-
sz - AESGCM_EXP_IV_SZ - ssl->specs.aead_mac_size,
4873-
ssl->decrypt.nonce, AESGCM_NONCE_SZ,
4874-
ssl->decrypt.additional, ssl->specs.aead_mac_size,
4875-
NULL, 0);
4876+
if (sz < AESGCM_EXP_IV_SZ + ssl->specs.aead_mac_size) {
4877+
ret = BUFFER_ERROR;
4878+
}
4879+
4880+
if (ret == 0) {
4881+
ret = wc_AriaDecrypt(ssl->decrypt.aria,
4882+
plain,
4883+
(byte *)input + AESGCM_EXP_IV_SZ,
4884+
sz - AESGCM_EXP_IV_SZ - ssl->specs.aead_mac_size,
4885+
ssl->decrypt.nonce, AESGCM_NONCE_SZ,
4886+
ssl->decrypt.additional, ssl->specs.aead_mac_size,
4887+
NULL, 0);
4888+
}
48764889
break;
48774890
#endif
48784891

0 commit comments

Comments
 (0)