Skip to content

Commit 42e40d3

Browse files
julek-wolfsslopencode
authored andcommitted
fixup! Validate minDowngrade in wolfSSL_SetSession before reusing version
1 parent 0244864 commit 42e40d3

4 files changed

Lines changed: 89 additions & 1 deletion

File tree

tests/api/test_dtls.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2909,3 +2909,45 @@ int test_dtls13_oversized_cert_chain(void)
29092909
#endif
29102910
return EXPECT_RESULT();
29112911
}
2912+
2913+
/* DTLS counterpart to test_tls_set_session_min_downgrade. Exercises the
2914+
* inverted DTLS minor-version comparison (DTLS 1.2 minor 0xFD is "below"
2915+
* floor 0xFC = DTLS 1.3). */
2916+
int test_dtls_set_session_min_downgrade(void)
2917+
{
2918+
EXPECT_DECLS;
2919+
#if defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES) && defined(WOLFSSL_DTLS) && \
2920+
defined(WOLFSSL_DTLS13) && defined(HAVE_SESSION_TICKET)
2921+
WOLFSSL_CTX *ctx_c = NULL, *ctx_s = NULL;
2922+
WOLFSSL *ssl_c = NULL, *ssl_s = NULL;
2923+
WOLFSSL_SESSION *sess = NULL;
2924+
struct test_memio_ctx test_ctx;
2925+
2926+
XMEMSET(&test_ctx, 0, sizeof(test_ctx));
2927+
ExpectIntEQ(test_memio_setup(&test_ctx, &ctx_c, &ctx_s, &ssl_c, &ssl_s,
2928+
wolfDTLSv1_2_client_method, wolfDTLSv1_2_server_method), 0);
2929+
ExpectIntEQ(test_memio_do_handshake(ssl_c, ssl_s, 10, NULL), 0);
2930+
ExpectNotNull(sess = wolfSSL_get1_session(ssl_c));
2931+
2932+
wolfSSL_free(ssl_c); ssl_c = NULL;
2933+
wolfSSL_free(ssl_s); ssl_s = NULL;
2934+
wolfSSL_CTX_free(ctx_c); ctx_c = NULL;
2935+
wolfSSL_CTX_free(ctx_s); ctx_s = NULL;
2936+
2937+
XMEMSET(&test_ctx, 0, sizeof(test_ctx));
2938+
ExpectIntEQ(test_memio_setup(&test_ctx, &ctx_c, &ctx_s, &ssl_c, &ssl_s,
2939+
wolfDTLS_client_method, wolfDTLS_server_method), 0);
2940+
ExpectIntEQ(wolfSSL_SetMinVersion(ssl_c, WOLFSSL_DTLSV1_3),
2941+
WOLFSSL_SUCCESS);
2942+
ExpectIntEQ(wolfSSL_set_session(ssl_c, sess), WOLFSSL_FAILURE);
2943+
if (ssl_c != NULL)
2944+
ExpectIntEQ(ssl_c->options.resuming, 0);
2945+
2946+
wolfSSL_SESSION_free(sess);
2947+
wolfSSL_free(ssl_c);
2948+
wolfSSL_free(ssl_s);
2949+
wolfSSL_CTX_free(ctx_c);
2950+
wolfSSL_CTX_free(ctx_s);
2951+
#endif
2952+
return EXPECT_RESULT();
2953+
}

tests/api/test_dtls.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ int test_dtls_mtu_split_messages(void);
5454
int test_dtls13_min_rtx_interval(void);
5555
int test_dtls13_no_session_id_echo(void);
5656
int test_dtls13_oversized_cert_chain(void);
57+
int test_dtls_set_session_min_downgrade(void);
5758

5859
#define TEST_DTLS_DECLS \
5960
TEST_DECL_GROUP("dtls", test_dtls12_basic_connection_id), \
@@ -87,5 +88,6 @@ int test_dtls13_oversized_cert_chain(void);
8788
TEST_DECL_GROUP("dtls", test_dtls_memio_wolfio_stateless), \
8889
TEST_DECL_GROUP("dtls", test_dtls13_min_rtx_interval), \
8990
TEST_DECL_GROUP("dtls", test_dtls13_no_session_id_echo), \
90-
TEST_DECL_GROUP("dtls", test_dtls13_oversized_cert_chain)
91+
TEST_DECL_GROUP("dtls", test_dtls13_oversized_cert_chain), \
92+
TEST_DECL_GROUP("dtls", test_dtls_set_session_min_downgrade)
9193
#endif /* TESTS_API_DTLS_H */

tests/api/test_tls.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,48 @@ int test_tls12_etm_failed_resumption(void)
861861
return EXPECT_RESULT();
862862
}
863863

864+
/* wolfSSL_set_session() must reject a TLS 1.2 session when minDowngrade is
865+
* set to TLS 1.3. */
866+
int test_tls_set_session_min_downgrade(void)
867+
{
868+
EXPECT_DECLS;
869+
#if defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES) && \
870+
!defined(WOLFSSL_NO_TLS12) && defined(WOLFSSL_TLS13) && \
871+
defined(HAVE_SESSION_TICKET)
872+
WOLFSSL_CTX *ctx_c = NULL, *ctx_s = NULL;
873+
WOLFSSL *ssl_c = NULL, *ssl_s = NULL;
874+
WOLFSSL_SESSION *sess = NULL;
875+
struct test_memio_ctx test_ctx;
876+
877+
XMEMSET(&test_ctx, 0, sizeof(test_ctx));
878+
ExpectIntEQ(test_memio_setup(&test_ctx, &ctx_c, &ctx_s, &ssl_c, &ssl_s,
879+
wolfTLSv1_2_client_method, wolfTLSv1_2_server_method), 0);
880+
ExpectIntEQ(test_memio_do_handshake(ssl_c, ssl_s, 10, NULL), 0);
881+
ExpectNotNull(sess = wolfSSL_get1_session(ssl_c));
882+
883+
wolfSSL_free(ssl_c); ssl_c = NULL;
884+
wolfSSL_free(ssl_s); ssl_s = NULL;
885+
wolfSSL_CTX_free(ctx_c); ctx_c = NULL;
886+
wolfSSL_CTX_free(ctx_s); ctx_s = NULL;
887+
888+
XMEMSET(&test_ctx, 0, sizeof(test_ctx));
889+
ExpectIntEQ(test_memio_setup(&test_ctx, &ctx_c, &ctx_s, &ssl_c, &ssl_s,
890+
wolfTLS_client_method, wolfTLS_server_method), 0);
891+
ExpectIntEQ(wolfSSL_SetMinVersion(ssl_c, WOLFSSL_TLSV1_3),
892+
WOLFSSL_SUCCESS);
893+
ExpectIntEQ(wolfSSL_set_session(ssl_c, sess), WOLFSSL_FAILURE);
894+
if (ssl_c != NULL)
895+
ExpectIntEQ(ssl_c->options.resuming, 0);
896+
897+
wolfSSL_SESSION_free(sess);
898+
wolfSSL_free(ssl_c);
899+
wolfSSL_free(ssl_s);
900+
wolfSSL_CTX_free(ctx_c);
901+
wolfSSL_CTX_free(ctx_s);
902+
#endif
903+
return EXPECT_RESULT();
904+
}
905+
864906
int test_tls_set_curves_list_ecc_fallback(void)
865907
{
866908
EXPECT_DECLS;

tests/api/test_tls.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ int test_tls_certreq_order(void);
3232
int test_tls12_bad_cv_sig_alg(void);
3333
int test_tls12_no_null_compression(void);
3434
int test_tls12_etm_failed_resumption(void);
35+
int test_tls_set_session_min_downgrade(void);
3536
int test_tls_set_curves_list_ecc_fallback(void);
3637
int test_tls12_corrupted_finished(void);
3738
int test_tls12_peerauth_failsafe(void);
@@ -47,6 +48,7 @@ int test_tls12_peerauth_failsafe(void);
4748
TEST_DECL_GROUP("tls", test_tls12_bad_cv_sig_alg), \
4849
TEST_DECL_GROUP("tls", test_tls12_no_null_compression), \
4950
TEST_DECL_GROUP("tls", test_tls12_etm_failed_resumption), \
51+
TEST_DECL_GROUP("tls", test_tls_set_session_min_downgrade), \
5052
TEST_DECL_GROUP("tls", test_tls_set_curves_list_ecc_fallback), \
5153
TEST_DECL_GROUP("tls", test_tls12_corrupted_finished), \
5254
TEST_DECL_GROUP("tls", test_tls12_peerauth_failsafe)

0 commit comments

Comments
 (0)