Skip to content

Commit

Permalink
Prevent a fuzzing timeout in the conf fuzzer
Browse files Browse the repository at this point in the history
The fuzzer was creating a config file with large numbers of includes
which are expensive to process. However this should not cause a security
issue, and should never happen in normal operation so we can ignore it.

Fixes ossfuzz issue 57718.

Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from #20839)

(cherry picked from commit 5f3adf3)
  • Loading branch information
mattcaswell committed May 8, 2023
1 parent c54a867 commit 6298567
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions crypto/conf/conf_def.c
Expand Up @@ -226,6 +226,9 @@ static int def_load_bio(CONF *conf, BIO *in, long *line)
char *dirpath = NULL;
OPENSSL_DIR_CTX *dirctx = NULL;
#endif
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
int numincludes = 0;
#endif

if ((buff = BUF_MEM_new()) == NULL) {
ERR_raise(ERR_LIB_CONF, ERR_R_BUF_LIB);
Expand Down Expand Up @@ -442,6 +445,20 @@ static int def_load_bio(CONF *conf, BIO *in, long *line)
const char *include_dir = ossl_safe_getenv("OPENSSL_CONF_INCLUDE");
char *include_path = NULL;

#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
/*
* The include processing below can cause the "conf" fuzzer to
* timeout due to the fuzzer inserting large and complicated
* includes - with a large amount of time spent in
* OPENSSL_strlcat/OPENSSL_strcpy. This is not a security
* concern because config files should never come from untrusted
* sources. We just set an arbitrary limit on the allowed
* number of includes when fuzzing to prevent this timeout.
*/
if (numincludes++ > 10)
goto err;
#endif

if (include_dir == NULL)
include_dir = conf->includedir;

Expand Down

0 comments on commit 6298567

Please sign in to comment.