Skip to content

Commit

Permalink
Add NULL check before accessing PKCS7 encrypted algorithm
Browse files Browse the repository at this point in the history
Printing content of an invalid test certificate causes application crash, because of NULL dereference:

user@user:~/openssl$ openssl pkcs12 -in test/recipes/80-test_pkcs12_data/bad2.p12 -passin pass: -info
MAC: sha256, Iteration 2048
MAC length: 32, salt length: 8
PKCS7 Encrypted data: Segmentation fault (core dumped)

Added test cases for pkcs12 bad certificates

Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from openssl#23632)
  • Loading branch information
lejcik authored and t8m committed Mar 25, 2024
1 parent 87e7470 commit a4cbffc
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
6 changes: 5 additions & 1 deletion apps/pkcs12.c
Original file line number Diff line number Diff line change
Expand Up @@ -901,7 +901,11 @@ int dump_certs_keys_p12(BIO *out, const PKCS12 *p12, const char *pass,
} else if (bagnid == NID_pkcs7_encrypted) {
if (options & INFO) {
BIO_printf(bio_err, "PKCS7 Encrypted data: ");
alg_print(p7->d.encrypted->enc_data->algorithm);
if (p7->d.encrypted == NULL) {
BIO_printf(bio_err, "<no data>\n");
} else {
alg_print(p7->d.encrypted->enc_data->algorithm);
}
}
bags = PKCS12_unpack_p7encdata(p7, pass, passlen);
} else {
Expand Down
14 changes: 13 additions & 1 deletion test/recipes/80-test_pkcs12.t
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ if (eval { require Win32::API; 1; }) {
}
$ENV{OPENSSL_WIN32_UTF8}=1;

plan tests => 28;
plan tests => 31;

# Test different PKCS#12 formats
ok(run(test(["pkcs12_format_test"])), "test pkcs12 formats");
Expand Down Expand Up @@ -184,11 +184,23 @@ with({ exit_checker => sub { return shift == 1; } },
"-nomacver"])),
"test bad pkcs12 file 1 (nomacver)");

ok(run(app(["openssl", "pkcs12", "-in", $bad1, "-password", "pass:",
"-info"])),
"test bad pkcs12 file 1 (info)");

ok(run(app(["openssl", "pkcs12", "-in", $bad2, "-password", "pass:"])),
"test bad pkcs12 file 2");

ok(run(app(["openssl", "pkcs12", "-in", $bad2, "-password", "pass:",
"-info"])),
"test bad pkcs12 file 2 (info)");

ok(run(app(["openssl", "pkcs12", "-in", $bad3, "-password", "pass:"])),
"test bad pkcs12 file 3");

ok(run(app(["openssl", "pkcs12", "-in", $bad3, "-password", "pass:",
"-info"])),
"test bad pkcs12 file 3 (info)");
});

# Test with Oracle Trusted Key Usage specified in openssl.cnf
Expand Down

0 comments on commit a4cbffc

Please sign in to comment.