{"id":10625,"date":"2022-08-23T19:05:20","date_gmt":"2022-08-23T19:05:20","guid":{"rendered":"https:\/\/cheesecakelabs.com\/blog\/"},"modified":"2022-08-30T14:26:23","modified_gmt":"2022-08-30T14:26:23","slug":"fuzz-testing","status":"publish","type":"post","link":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/","title":{"rendered":"What is Fuzz Testing and How Does It Work?"},"content":{"rendered":"\n<p>In this blog post you\u2019ll discover what is fuzz testing, also known as fuzzing, and all types of fuzz testing that exist with examples.<\/p>\n\n\n\n<p>Furthermore, you\u2019ll understand the benefits of using fuzz test and also check out some projects in which it was used in <a href=\"https:\/\/cheesecakelabs.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Cheesecake Labs<\/a>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is Fuzz Testing?<\/strong><\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/HF1DC6sVqRp2_bvLk9c6Lfvk2phe3tlualaAbQNRF0d3-nQlcLSDZtDg_dsYiMh_F7P87B2YxgZTvk-KlHKKRYQYrzNcUgQ5oRb9_XHRPoCdeYwP9SEIvHsPjhbJ7uiqKFtV83TkLaNP9AAUk5jawg\" alt=\"Fuzz Testing Process Phases\" width=\"704\" height=\"418\"\/><figcaption>Fuzz Testing Process Phases<\/figcaption><\/figure>\n<\/div>\n\n\n<p><strong>Fuzz testing is an automated testing method in which we provide random input values to discover unexpected bugs.<\/strong><\/p>\n\n\n\n<p>Fuzzing can be traced back to the University of Wisconsin in 1988. There, Professor Barton Miller gave a class project titled \u201cOperating System Utility Program Reliability \u2013 The Fuzz Generator.\u201d<\/p>\n\n\n\n<p>It was the first \u2013 and simplest \u2013 form of fuzzing, and included sending a stream of random bits to UNIX programs with the use of a command line fuzzer.<\/p>\n\n\n\n<p>Nowadays, there are some different types of Fuzz Testing: dumb fuzzing, smart fuzzing, feedback-based fuzzing, mutation-based fuzzing, and generation-based fuzzing, which are all described below.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Types of Fuzzers<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Randomizing styles<\/strong><\/h3>\n\n\n\n<p>There are two Fuzzing styles of generating randomized data:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Entirely random: <strong>dumb fuzzing test<\/strong>;<\/li><li>Partially randomized to match some criteria: <strong>smart fuzzing test<\/strong>.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Dumb Fuzzing Test<\/strong><\/h3>\n\n\n\n<p>Dumb fuzzing requires less amount of work, it&#8217;s easier to maintain, but it has limited coverage.&nbsp;<\/p>\n\n\n\n<p>It is relatively easy to set up, but it is also very inefficient because it is not based on any criteria, it just generates the entirely random data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Smart Fuzzing Test<\/strong><\/h3>\n\n\n\n<p>Otherwise, Smart fuzzing has a greater code coverage, catching more bugs. Smart Fuzzing Test produces inputs that are based on valid input formats.<\/p>\n\n\n\n<p>It is very useful since we need to match certain patterns. This style of fuzzing requires detailed knowledge about input format, so it is more costly to set up, which involves a longer development and bigger strategy.<\/p>\n\n\n\n<p>Depending on the environment, we can use both types in the code (Smart and Dumb Fuzzing).<\/p>\n\n\n\n<p>Smart is selected for parts where we need more strategy and match specific criteria. Dumb is for the simplest tests, where we just need to randomize without any criteria.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Fuzzing Types<\/strong><\/h2>\n\n\n\n<p><strong>Smart randomizing style<\/strong> can be divided into three types:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Mutation-based<\/strong><\/li><li><strong>Generation-based<\/strong><\/li><li><strong>Feedback-based<\/strong>.<\/li><\/ul>\n\n\n\n<p>Sometimes we can find different names or explanations for each fuzzing style\/type.&nbsp;<\/p>\n\n\n\n<p>Here is a description of each one for a better understanding.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Mutation-based&nbsp;<\/strong><\/h3>\n\n\n\n<p>It changes the valid inputs generating a collection of mutated inputs, which then introduces small changes to existing inputs that may still keep the input valid with new behavior.<\/p>\n\n\n\n<p>Sometimes it\u2019s classified as \u201cdumb-fuzzer\u201d considering the mutation of the whole input data.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/tq38W16HdbzynCB-a4NOhJ0e2uWoTL6aqgbmvbVcjY_wRnOhTmcgI9HuW3N7SlC03y07qB2Dh6biv8_-GGmZsXGFTR8i5YIgGQrxUAsObKb0GToMs56uNj06yigicL4-D3zAH6sM1Hmz2IZxdp7G7Q\" alt=\"Bit Flipping for Fuzz Testing\"\/><figcaption>Example: Bit Flipping (bits are flipped in some sequence or randomly)<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Generation-based&nbsp;<\/strong><\/h3>\n\n\n\n<p>It creates entirely new data matching the valid input, according to the defined structure. It can be defined by data modeling or a state modeling, for example.<\/p>\n\n\n\n<p>The Model is defined and the fuzzer randomizes the data according to the model structure.<\/p>\n\n\n\n<p>Here is a sample Data Model for HTTP Protocol:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/Q2ZlwrOOdxrqrQ-Z-yqFoglbx6DWxWHxNvD1sDSzOWRgC-YbU-KbZT2MXWny-QcmwxovN3OmCJ_zUYCoq5II2Bd8_83xMNWosGXRuOCBea2MejXC2ci8rohZXInix44vWFiM4CHfBFcFJ-8KNFeZWA\" alt=\"Data model for HTTP Protocol\"\/><\/figure>\n\n\n\n<p>Here is a sample State Model and Data for HTTP:<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/ywaNOTNuFP5AA8Yt5k9Yw3h1wvWpQkXzByqOxSIIMmbgaKtpQBdz-2DeVjn5ll6v7H4hFoJZs8Vn0_nm2PDVgLyOM1W0-qdGCwn6iy17pWKc0WdtOy8olE2cKikxFYRpBXUAzXshts_WMbBroMr1Hg\" alt=\"State Model and Data for HTTP\" width=\"530\" height=\"522\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Feedback-based<\/strong><\/h3>\n\n\n\n<p>Also called &#8220;Coverage-based&#8221;. It uses code coverage information when generating new inputs.<\/p>\n\n\n\n<p>It is considered the smartest way of Fuzzing, but also the most costly one. This type measures the amount\/share of code executed during a given test.<\/p>\n\n\n\n<p>For example, it may read the number of statements in the code and compare it to the statements in the software source.<\/p>\n\n\n\n<p>Same thing for the number of lines, the share of defined functions that have been called, the execution of code lines within basic blocks, the edges of the control graph that are being followed, the number of logical paths, etc.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-type-feedback-base.png\" alt=\"Diagram of how Feedback-Base Fuzzing Test works\" class=\"wp-image-10626\" width=\"500\" srcset=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-type-feedback-base.png 990w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-type-feedback-base-600x373.png 600w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-type-feedback-base-768x478.png 768w, https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-type-feedback-base-760x473.png 760w\" sizes=\"(max-width: 990px) 100vw, 990px\" \/><figcaption>A diagram of how Feedback-Based Fuzzing works<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><strong>Another important configuration<\/strong><\/h2>\n\n\n\n<p>Fuzzing Tests can be highly configurable. Some important configurations we had to use in our projects are listed below.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Fuzztime<\/strong><\/h3>\n\n\n\n<p>Considering we worked with blockchain, it was very important to determine a limit of time for a specific test. This way, we could also test performance and determine a time limit so we would not be sending infinite data.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Parallel Processes<\/strong><\/h3>\n\n\n\n<p>We could configure Fuzzing to be working in several parallel processes. It also got useful for performance testing and we could test the behavior on the network receiving several parallel data at the same time.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Data Type definition<\/strong><\/h3>\n\n\n\n<p>The Fuzzing can be configured to accept only specific types of data. Very useful for an environment where we need to randomize, but aiming only one or more specific types of data.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why use it on blockchain projects?<\/strong><\/h2>\n\n\n\n<p>Considering we need to pay special attention to security on <a href=\"https:\/\/cheesecakelabs.com\/blog\/blockchain-guide-getting-started-blockchain-app\/\" target=\"_blank\" rel=\"noreferrer noopener\">blockchain<\/a> projects, and need to test the widest range of accepted data possible, fuzzing tests are very interesting for the blockchain environment.<\/p>\n\n\n\n<p>Fuzzing is very important to test security because it may test what kind of data the system is accepting or not accepting, and also test simultaneous parallel processes certifying one process is not overlapping another concurrent process using random inputs.&nbsp;<\/p>\n\n\n\n<p>It\u2019s important to certify the system is working according to the real environment of a blockchain network, receiving several different data simultaneously, and being accepted by the network rules without losing important information.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why did Cheesecake Labs decide to use it?<\/strong><\/h2>\n\n\n\n<p>When facing specific scenarios, such as creating different varieties of <a href=\"https:\/\/cheesecakelabs.com\/blog\/cryptocurrency-wallet-development\/\" target=\"_blank\" rel=\"noreferrer noopener\">crypto wallets<\/a> and transferring values between them, it was necessary to test a large amount of random and valid inputs, simulating simultaneous transactions such as in a blockchain network.<\/p>\n\n\n\n<p>A good code coverage was required for unit tests but in a randomized way. This helped us identify a lot of bugs we couldn&#8217;t find with approaches other than Fuzzing.&nbsp;<\/p>\n\n\n\n<p>There were many unexpected inputs that generated errors and other issues that emerged when simulating heavy usage.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Which difficulties were found working with Fuzz Testing?<\/strong><\/h3>\n\n\n\n<p>We had difficulty implementing the Fuzzing Test using a specific programming language because each language has its own patterns for the Fuzzing Test.<\/p>\n\n\n\n<p>For example, we coded using <a href=\"https:\/\/go.dev\/\" target=\"_blank\" rel=\"noreferrer noopener\">Go Language<\/a>, which had Fuzzing structure available only in version 1.8.<\/p>\n\n\n\n<p>Depending on the project\u2019s programming language, we would have to implement Fuzzing with another language that has a structure for it.<\/p>\n\n\n\n<p>Another difficulty was performance. We used smart fuzzing, but couldn\u2019t immediately find where the code was breaking.<\/p>\n\n\n\n<p>Because of that, we had to study the Fuzzing structure for the specific programming language in our project environment, which changed the form of implementation.<\/p>\n\n\n\n<p>In a blockchain project, while sending parallel fuzzing events, sometimes we had problems with events that couldn\u2019t be sent in a specific sequence, so we had to find a way to verify the event condition (see example in the diagram below).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Which kind of bugs did we find using the Fuzzing Test?<\/strong><\/h2>\n\n\n\n<p>When running parallel fuzzing to send multiple random transactions, we found out that some transactions were being generated without the proper sequencing management, which would cause transactions to fail during peak activity.<\/p>\n\n\n\n<p>Once this scenario was identified, it was possible to improve the solution by applying a different submission strategy and scaling it up to handle a high volume of transactions with consistency.<\/p>\n\n\n\n<p>Fuzzing allowed us to identify and work around some edge cases like the inability to handle some non-ASCII characters and other similar unforeseen scenarios.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Project structure and code examples of Fuzz Testing<\/strong><\/h2>\n\n\n\n<p>Here is a project diagram example with Fuzzing Test applied in blockchain:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/Uh1KSk2txmrqFtpGxbfh_f3LVQbjDoFpnQa7WuqdPZ8MdKQ75nrTrO29PuFdkW2Wn-oXEZOio2Sz1bneM0Er7y7wS11yvKHKWSZQ7kDfks71lGu7ZRuwtP-es4HIVBzeizkS-LdKPQN0i5zsnLpUuQ\" alt=\"Project Diagram example using Fuzz Testing \"\/><figcaption>This diagram shows an example of a smart Fuzzing test applied in a project.<\/figcaption><\/figure>\n<\/div>\n\n\n<ul class=\"wp-block-list\"><li>First, it\u2019s set up defining which are the valid inputs, so the Fuzzing starts simultaneous parallel processes until the defined Fuzz time (a time limit to finish sending events).<\/li><li>Each event response is analyzed by a structure, defining if it is successful or not.<\/li><li>If the response is successful, it will be validated both with our rules (validating balances) and with the Blockchain network rules.<\/li><li>If the response is not successful,&nbsp; the possibility of it being really unsuccessful will be analyzed. Then, the error being about a specific error (wallet without funds for this example) is verified and there is a new try to get a wallet with funds.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example of code (using Go Language 1.18) for fuzzing test in a HTTP handler that calculates the highest value amongst a slice of ints:<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-preformatted language-go\"><code class=\"language-go\">func FuzzTestHTTPHandler(f *testing.F) {\n\t\/\/ Create a new server hosting our calculate func\n\tsrv := httptest.NewServer(http.HandlerFunc(CalculateHighest))\n\tdefer srv.Close()\n\n\t\/\/ Create example values for the fuzzer\n\ttestCases := []ValuesRequest{\n\t\tValuesRequest{[]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}},\n\t\tValuesRequest{[]int{10, 9, 8, 7, 6, 5, 4, 3, 2, 1}},\n\t\tValuesRequest{[]int{-50, -9, -8, -7, -6, -5, -4, -3, -2, -1}},\n\t\tValuesRequest{[]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}},\n\t\tValuesRequest{[]int{10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200}},\n\t}\n\n\t\/\/ Add Corpus Seeds\n\tfor _, testCase := range testCases {\n\t\t\/\/ Skip error, very bad practice\n\t\tdata, _ := json.Marshal(testCase)\n\t\t\/\/ Add JSON data as Corpus\n\t\tf.Add(data)\n\n\t}\n\n\t\/\/ Start fuzzing\n\tf.Fuzz(func(t *testing.T, data []byte) {\n\t\t\/\/ Validate that it is proper JSON before sending\n\t\tif !json.Valid(data) {\n\t\t\tt.Skip(\"invalid JSON\")\n\t\t}\n\t\t\/\/ Make sure it is a real ValuesRequest formatted payload by marshalling into\n\t\tvr := ValuesRequest{}\n\t\terr := json.Unmarshal(data, &amp;vr)\n\t\tif err != nil {\n\t\t\tt.Skip(\"Only correct requests are intresting\")\n\t\t}\n\t\t\/\/ Create a new request\n\t\t\/\/ using DefaultClient, should not be done in prod\n\t\tresp, err := http.DefaultClient.Post(srv.URL, \"application\/json\", bytes.NewBuffer(data))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Error: %v\", err)\n\t\t}\n\t\t\/\/ Check status Code\n\t\tif resp.StatusCode != http.StatusOK {\n\t\t\tt.Errorf(\"Expected status code %d, got %d\", http.StatusOK, resp.StatusCode)\n\t\t}\n\n\t\t\/\/ Umarshal data\n\t\tvar response int\n\t\terr = json.NewDecoder(resp.Body).Decode(&amp;response)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Error: %v\", err)\n\t\t}\n\n\t})\n}\n<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p><strong>Code font:<\/strong> towardsdatascience.com\/fuzzing-tests-in-go<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post you\u2019ll discover what is fuzz testing, also known as fuzzing, and all types of fuzz testing that exist with examples. Furthermore, you\u2019ll understand the benefits of using fuzz test and also check out some projects in which it was used in Cheesecake Labs.<\/p>\n","protected":false},"author":81,"featured_media":10633,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[432],"tags":[1195,1196,1197],"class_list":["post-10625","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","tag-cybersecurity","tag-engineering","tag-quality-assurance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fuzz Testing: the Complete Guide about Fuzzing<\/title>\n<meta name=\"description\" content=\"What is fuzz testing and how does it work? Check out the definition, types of fuzz testing, and the benefits of using it.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fuzz Testing: the Complete Guide about Fuzzing\" \/>\n<meta property=\"og:description\" content=\"What is fuzz testing and how does it work? Check out the definition, types of fuzz testing, and the benefits of using it.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/\" \/>\n<meta property=\"og:site_name\" content=\"Cheesecake Labs\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cheesecakelabs\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-23T19:05:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-08-30T14:26:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"860\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cheesecake Labs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:site\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/\"},\"author\":{\"name\":\"Lucas da Silva Machado\"},\"headline\":\"What is Fuzz Testing and How Does It Work?\",\"datePublished\":\"2022-08-23T19:05:20+00:00\",\"dateModified\":\"2022-08-30T14:26:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/\"},\"wordCount\":1385,\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg\",\"keywords\":[\"cybersecurity\",\"engineering\",\"quality assurance\"],\"articleSection\":[\"Engineering\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/\",\"name\":\"Fuzz Testing: the Complete Guide about Fuzzing\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg\",\"datePublished\":\"2022-08-23T19:05:20+00:00\",\"dateModified\":\"2022-08-30T14:26:23+00:00\",\"author\":{\"@type\":\"person\",\"name\":\"Lucas da Silva Machado\"},\"description\":\"What is fuzz testing and how does it work? Check out the definition, types of fuzz testing, and the benefits of using it.\",\"breadcrumb\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#primaryimage\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg\",\"width\":1920,\"height\":860,\"caption\":\"Fuzzing as a Software Testing method\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cheesecakelabs.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What is Fuzz Testing and How Does It Work?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/\",\"name\":\"Cheesecake Labs\",\"description\":\"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"name\":\"Lucas da Silva Machado\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/lucas-machado.png\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/lucas-machado.png\",\"caption\":\"Lucas da Silva Machado\"},\"url\":\"https:\/\/cheesecakelabs.com\/blog\/autor\/lucas-da-silva-machado\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fuzz Testing: the Complete Guide about Fuzzing","description":"What is fuzz testing and how does it work? Check out the definition, types of fuzz testing, and the benefits of using it.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/","og_locale":"en_US","og_type":"article","og_title":"Fuzz Testing: the Complete Guide about Fuzzing","og_description":"What is fuzz testing and how does it work? Check out the definition, types of fuzz testing, and the benefits of using it.","og_url":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/","og_site_name":"Cheesecake Labs","article_publisher":"https:\/\/www.facebook.com\/cheesecakelabs","article_published_time":"2022-08-23T19:05:20+00:00","article_modified_time":"2022-08-30T14:26:23+00:00","og_image":[{"width":1920,"height":860,"url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg","type":"image\/jpeg"}],"author":"Cheesecake Labs","twitter_card":"summary_large_image","twitter_creator":"@cheesecakelabs","twitter_site":"@cheesecakelabs","twitter_misc":{"Written by":null,"Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#article","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/"},"author":{"name":"Lucas da Silva Machado"},"headline":"What is Fuzz Testing and How Does It Work?","datePublished":"2022-08-23T19:05:20+00:00","dateModified":"2022-08-30T14:26:23+00:00","mainEntityOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/"},"wordCount":1385,"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg","keywords":["cybersecurity","engineering","quality assurance"],"articleSection":["Engineering"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/","url":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/","name":"Fuzz Testing: the Complete Guide about Fuzzing","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#primaryimage"},"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg","datePublished":"2022-08-23T19:05:20+00:00","dateModified":"2022-08-30T14:26:23+00:00","author":{"@type":"person","name":"Lucas da Silva Machado"},"description":"What is fuzz testing and how does it work? Check out the definition, types of fuzz testing, and the benefits of using it.","breadcrumb":{"@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#primaryimage","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/fuzz-testing.jpg","width":1920,"height":860,"caption":"Fuzzing as a Software Testing method"},{"@type":"BreadcrumbList","@id":"https:\/\/cheesecakelabs.com\/blog\/fuzz-testing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cheesecakelabs.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What is Fuzz Testing and How Does It Work?"}]},{"@type":"WebSite","@id":"https:\/\/cheesecakelabs.com\/blog\/#website","url":"https:\/\/cheesecakelabs.com\/blog\/","name":"Cheesecake Labs","description":"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","name":"Lucas da Silva Machado","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/lucas-machado.png","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2022\/08\/lucas-machado.png","caption":"Lucas da Silva Machado"},"url":"https:\/\/cheesecakelabs.com\/blog\/autor\/lucas-da-silva-machado\/"}]}},"_links":{"self":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/10625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/users\/81"}],"replies":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/comments?post=10625"}],"version-history":[{"count":10,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/10625\/revisions"}],"predecessor-version":[{"id":10701,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/10625\/revisions\/10701"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media\/10633"}],"wp:attachment":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media?parent=10625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/categories?post=10625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/tags?post=10625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}