]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
fuzz: Add fuzzing targets for OCSP requests/responses
authorTobias Brunner <tobias@strongswan.org>
Thu, 23 Nov 2023 17:40:44 +0000 (18:40 +0100)
committerTobias Brunner <tobias@strongswan.org>
Fri, 24 Nov 2023 16:41:18 +0000 (17:41 +0100)
fuzz/.gitignore
fuzz/Makefile.am
fuzz/fuzz_ocsp_req.c [new file with mode: 0644]
fuzz/fuzz_ocsp_rsp.c [new file with mode: 0644]

index 0927874fb26d2b7ebbba8aa1f6e0560156caa7c4..99ebd93bc62e92d260ad7d167b943103f60ef0da 100644 (file)
@@ -1,5 +1,7 @@
 fuzz_certs
 fuzz_crls
+fuzz_ocsp_req
+fuzz_ocsp_rsp
 fuzz_ids
 fuzz_pa_tnc
 fuzz_pb_tnc
index e2254c1e8e7295cd59551e8b5477e41e026ead27..c2d5343804dcd63a6b35070c2f723cc3731d838d 100644 (file)
@@ -25,7 +25,8 @@ pb_tnc_ldflags = \
        $(top_builddir)/src/libtncif/.libs/libtncif.a \
        $(fuzz_ldflags)
 
-FUZZ_TARGETS=fuzz_certs fuzz_crls fuzz_ids fuzz_pa_tnc fuzz_pb_tnc
+FUZZ_TARGETS=fuzz_certs fuzz_crls fuzz_ocsp_req fuzz_ocsp_rsp \
+       fuzz_ids fuzz_pa_tnc fuzz_pb_tnc
 
 all-local: $(FUZZ_TARGETS)
 
@@ -37,6 +38,12 @@ fuzz_certs: fuzz_certs.c ${libfuzzer}
 fuzz_crls: fuzz_crls.c ${libfuzzer}
        $(CC) $(AM_CPPFLAGS) $(CFLAGS) -o $@ $< $(fuzz_ldflags)
 
+fuzz_ocsp_req: fuzz_ocsp_req.c ${libfuzzer}
+       $(CC) $(AM_CPPFLAGS) $(CFLAGS) -o $@ $< $(fuzz_ldflags)
+
+fuzz_ocsp_rsp: fuzz_ocsp_rsp.c ${libfuzzer}
+       $(CC) $(AM_CPPFLAGS) $(CFLAGS) -o $@ $< $(fuzz_ldflags)
+
 fuzz_ids: fuzz_ids.c ${libfuzzer}
        $(CC) $(AM_CPPFLAGS) $(CFLAGS) -o $@ $< $(fuzz_ldflags)
 
diff --git a/fuzz/fuzz_ocsp_req.c b/fuzz/fuzz_ocsp_req.c
new file mode 100644 (file)
index 0000000..111ef63
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2023 Tobias Brunner
+ *
+ * Copyright (C) secunet Security Networks AG
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+#include <library.h>
+#include <utils/debug.h>
+
+int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+       certificate_t *cert;
+       chunk_t chunk;
+
+       dbg_default_set_level(-1);
+       library_init(NULL, "fuzz_ocsp_req");
+       plugin_loader_add_plugindirs(PLUGINDIR, PLUGINS);
+       if (!lib->plugins->load(lib->plugins, PLUGINS))
+       {
+               return 1;
+       }
+
+       chunk = chunk_create((u_char*)buf, len);
+       cert = lib->creds->create(lib->creds, CRED_CERTIFICATE, CERT_X509_OCSP_REQUEST,
+                                                         BUILD_BLOB, chunk, BUILD_END);
+       DESTROY_IF(cert);
+
+       lib->plugins->unload(lib->plugins);
+       library_deinit();
+       return 0;
+}
diff --git a/fuzz/fuzz_ocsp_rsp.c b/fuzz/fuzz_ocsp_rsp.c
new file mode 100644 (file)
index 0000000..6778c53
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2023 Tobias Brunner
+ *
+ * Copyright (C) secunet Security Networks AG
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+#include <library.h>
+#include <utils/debug.h>
+
+int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len)
+{
+       certificate_t *cert;
+       chunk_t chunk;
+
+       dbg_default_set_level(-1);
+       library_init(NULL, "fuzz_ocsp_rsp");
+       plugin_loader_add_plugindirs(PLUGINDIR, PLUGINS);
+       if (!lib->plugins->load(lib->plugins, PLUGINS))
+       {
+               return 1;
+       }
+
+       chunk = chunk_create((u_char*)buf, len);
+       cert = lib->creds->create(lib->creds, CRED_CERTIFICATE, CERT_X509_OCSP_RESPONSE,
+                                                         BUILD_BLOB, chunk, BUILD_END);
+       DESTROY_IF(cert);
+
+       lib->plugins->unload(lib->plugins);
+       library_deinit();
+       return 0;
+}