diff --git a/scripts/cmake/CompilerSetup.cmake b/scripts/cmake/CompilerSetup.cmake
index ac9e2da4aa2991205dfd3af8c03d5145c33ad4fe..03bd4dafc37b2362bb647df5d55d3da481c94744 100644
--- a/scripts/cmake/CompilerSetup.cmake
+++ b/scripts/cmake/CompilerSetup.cmake
@@ -100,6 +100,7 @@ if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL)
                 using ${CMAKE_CXX_COMPILER_VERSION}.")
         endif()
         add_compile_options(-fext-numeric-literals)
+        include(GCCSanitizer)
     endif()
 
     if(COMPILER_IS_CLANG)
diff --git a/scripts/cmake/GCCSanitizer.cmake b/scripts/cmake/GCCSanitizer.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..a5ceb68e26e87667e3201efc2478f0f6c8b23f38
--- /dev/null
+++ b/scripts/cmake/GCCSanitizer.cmake
@@ -0,0 +1,16 @@
+option(OGS_ADDRESS_SANITIZER OFF "Use GCCs AddressSanitizer")
+option(OGS_UNDEFINED_BEHAVIOR_SANITIZER OFF "Use GCCs UndefinedBehaviorSanitizer")
+
+if(OGS_ADDRESS_SANITIZER)
+    set(SANITIZE_FLAG_VALUE "address")
+    set(ADDITIONAL_FLAGS "-fno-omit-frame-pointer")
+endif()
+
+if(OGS_UNDEFINED_BEHAVIOR_SANITIZER)
+    set(SANITIZE_FLAG_VALUE "${SANITIZE_FLAG_VALUE},undefined,unreachable,integer-divide-by-zero,vla-bound,bounds,null")
+endif()
+
+if(DEFINED SANITIZE_FLAG_VALUE)
+    add_compile_options(-fsanitize=${SANITIZE_FLAG_VALUE} ${ADDITIONAL_FLAGS})
+    link_libraries(-fsanitize=${SANITIZE_FLAG_VALUE} ${ADDITIONAL_FLAGS})
+endif()