PBES - fix stack over-read with malformed PBES2 parameters

This commit is contained in:
Karel Miko 2026-08-01 15:43:21 +02:00
parent 4d9e2a1a57
commit b50ffea546
3 changed files with 17 additions and 0 deletions

View file

@ -44,6 +44,8 @@ int pbes_decrypt(const pbes_arg *arg, unsigned char *dec_data, unsigned long *d
if (arg->iv != NULL) {
iv = arg->iv->data;
} else {
/* PBES1 derives key and IV in one go, the IV follows the key in k; blocklen is 0 for PBES2, which has no IV to derive from */
if (arg->type.blocklen != (unsigned long)cipher_descriptor[cid].block_length) return CRYPT_INVALID_PACKET;
iv = k + klen;
klen += arg->type.blocklen;
}

View file

@ -197,6 +197,9 @@ int pbes2_extract(const ltc_asn1_list *s, pbes_arg *res)
} else {
return CRYPT_INVALID_PACKET;
}
} else {
/* PBES2 always carries the IV in the parameters, there is nothing to derive it from */
return CRYPT_INVALID_PACKET;
}
return CRYPT_OK;

View file

@ -0,0 +1,12 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIBzTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIDvEXvzqHE1ICAggA
MAwGCCqGSIb3DQILBQAwHQYJYIZIAWUDBAEqAhCj/pJclOyl8T9QLQ5hST9UBIIB
cAhS99K8b/rp2TaTvSSuwTS1qFcJ0O33zSSIprhVriNdArgQC0sX3XZKe5tyzWSD
+ZJZXJhcnQKRauDGhiF7dJWSgM0MbL90ZgwFyQvwzl1kxfKheaS8Hv/xGDvx+eAU
XwOAddifqcSediLUwtf5SRUmPy12gxcMFN0gY7fvjA0Wb/fDn6UuG0iu+y/msiu/
S+dW+PbOZBDiQb1u/U+wKTdvQxowlu6zkapxRFRWC1i2S7vBtdK7aLTERUJwdEf/
RdAMLXQdr5zhKHTjx7nQiPCksbNrpdTQHw/nsrNtE0pPvde3MCNIfvaDgHXyCV8F
Fo/fn97YhaKH8zCfvWhduuY2Bj3M1jBLRxGQZ2cs4hb6Ua3R2GiTD0h5zp9uNXRH
SrECToksdY5jNz1qMV6TA7gAOZ477sZCkJ0WU68B0jUVJKlEYCPzyTVcoy3a1hiF
Lx2H5WbsXSsZGaX+wyUUicYm8J+YnGtVd+FgS5e8Lh4w
-----END ENCRYPTED PRIVATE KEY-----