Skip to content

Commit 4dfd5af

Browse files
davidbenCQ bot account: commit-bot@chromium.org
authored andcommitted
Only bypass the signature verification itself in fuzzer mode.
Keep the setup_ctx logic, which, among other things, checks if the signature algorithm is valid. This cuts down on some unnecessary fuzzer-mode suppressions. Change-Id: I644f75630791c9741a1b372e5f83ae7ff9f01c2f Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/36766 Commit-Queue: David Benjamin <[email protected]> Reviewed-by: Adam Langley <[email protected]>
1 parent 9f5c419 commit 4dfd5af

File tree

5 files changed

+16
-28
lines changed

5 files changed

+16
-28
lines changed

ssl/handshake_client.cc

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,13 +1071,8 @@ static enum ssl_hs_wait_t do_read_server_key_exchange(SSL_HANDSHAKE *hs) {
10711071
return ssl_hs_error;
10721072
}
10731073

1074-
bool sig_ok = ssl_public_key_verify(ssl, signature, signature_algorithm,
1075-
hs->peer_pubkey.get(), transcript_data);
1076-
#if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
1077-
sig_ok = true;
1078-
ERR_clear_error();
1079-
#endif
1080-
if (!sig_ok) {
1074+
if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
1075+
hs->peer_pubkey.get(), transcript_data)) {
10811076
// bad signature
10821077
OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
10831078
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);

ssl/handshake_server.cc

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1410,14 +1410,8 @@ static enum ssl_hs_wait_t do_read_client_certificate_verify(SSL_HANDSHAKE *hs) {
14101410
return ssl_hs_error;
14111411
}
14121412

1413-
bool sig_ok =
1414-
ssl_public_key_verify(ssl, signature, signature_algorithm,
1415-
hs->peer_pubkey.get(), hs->transcript.buffer());
1416-
#if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
1417-
sig_ok = true;
1418-
ERR_clear_error();
1419-
#endif
1420-
if (!sig_ok) {
1413+
if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
1414+
hs->peer_pubkey.get(), hs->transcript.buffer())) {
14211415
OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
14221416
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
14231417
return ssl_hs_error;

ssl/ssl_privkey.cc

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,16 @@ bool ssl_public_key_verify(SSL *ssl, Span<const uint8_t> signature,
236236
uint16_t sigalg, EVP_PKEY *pkey,
237237
Span<const uint8_t> in) {
238238
ScopedEVP_MD_CTX ctx;
239-
return setup_ctx(ssl, ctx.get(), pkey, sigalg, true /* verify */) &&
240-
EVP_DigestVerify(ctx.get(), signature.data(), signature.size(),
241-
in.data(), in.size());
239+
if (!setup_ctx(ssl, ctx.get(), pkey, sigalg, true /* verify */)) {
240+
return false;
241+
}
242+
bool ok = EVP_DigestVerify(ctx.get(), signature.data(), signature.size(),
243+
in.data(), in.size());
244+
#if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
245+
ok = true;
246+
ERR_clear_error();
247+
#endif
248+
return ok;
242249
}
243250

244251
enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs,

ssl/test/runner/fuzzer_mode.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@
1818

1919
"BadECDSA-*": "Fuzzer mode always accepts a signature.",
2020
"*-InvalidSignature-*": "Fuzzer mode always accepts a signature.",
21-
"*Auth-Verify-RSA_PKCS1_*-TLS13*": "Fuzzer mode always accepts a signature.",
22-
"*Auth-Verify-ECDSA_SHA1-TLS13*": "Fuzzer mode always accepts a signature.",
23-
"*Auth-Verify-ECDSA_P224_*-TLS13*": "Fuzzer mode always accepts a signature.",
2421
"Verify-*Auth-SignatureType*": "Fuzzer mode always accepts a signature.",
2522
"ECDSACurveMismatch-Verify-TLS13*": "Fuzzer mode always accepts a signature.",
2623
"InvalidChannelIDSignature-*": "Fuzzer mode always accepts a signature.",

ssl/tls13_both.cc

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -370,13 +370,8 @@ bool tls13_process_certificate_verify(SSL_HANDSHAKE *hs, const SSLMessage &msg)
370370
return false;
371371
}
372372

373-
bool sig_ok = ssl_public_key_verify(ssl, signature, signature_algorithm,
374-
hs->peer_pubkey.get(), input);
375-
#if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
376-
sig_ok = true;
377-
ERR_clear_error();
378-
#endif
379-
if (!sig_ok) {
373+
if (!ssl_public_key_verify(ssl, signature, signature_algorithm,
374+
hs->peer_pubkey.get(), input)) {
380375
OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_SIGNATURE);
381376
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
382377
return false;

0 commit comments

Comments
 (0)