{"id":31041029,"url":"https://github.com/qarmin/Automated-Fuzzer","last_synced_at":"2025-09-14T09:03:00.495Z","repository":{"id":153101851,"uuid":"619188096","full_name":"qarmin/Automated-Fuzzer","owner":"qarmin","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-11T21:15:52.000Z","size":1246,"stargazers_count":3,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-11T23:56:40.956Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qarmin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-26T14:30:11.000Z","updated_at":"2025-09-11T21:15:55.000Z","dependencies_parsed_at":"2023-09-27T12:25:16.728Z","dependency_job_id":"48515449-e979-4316-896b-2ec7678dbac0","html_url":"https://github.com/qarmin/Automated-Fuzzer","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/qarmin/Automated-Fuzzer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qarmin%2FAutomated-Fuzzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qarmin%2FAutomated-Fuzzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qarmin%2FAutomated-Fuzzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qarmin%2FAutomated-Fuzzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qarmin","download_url":"https://codeload.github.com/qarmin/Automated-Fuzzer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qarmin%2FAutomated-Fuzzer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275082376,"owners_count":25402339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-14T09:01:57.054Z","updated_at":"2025-09-14T09:03:00.450Z","avatar_url":"https://github.com/qarmin.png","language":"Rust","funding_links":[],"categories":["Dynamic Checkers"],"sub_categories":[],"readme":"## Automated Fuzzer\n\nThis repo contains simple tool to create broken files and checking them with special apps(biome, ruff, mypy and many\nmore already are implemented, but it is easy to add support for any different app).\n\nThis small tool I created mainly for my own use without much vision, so you can easily compile app without changing\nsource code\nif you want to use already implemented fuzzers, but if you want to test your own app\n\nThis tool is designed for fast iterations, so it works really great if your app can test/lint several files per second(\ne.g. ruff on my pc can test even 50 middle size files per second in one core). If you use slower tool(I had this problem\nmypy), you may want to manually generate broken files\nvia [create_broken_files](https://crates.io/crates/create_broken_files) and test this files in chunks manually.\n\n## How to use it?\n\n- Install tool to create broken files and minimizer(rust and cargo can be installed directly from https://rustup.rs/ via simple\n  command)\n\n```\ncargo install create_broken_files minimizer\n```\n\n- Create file inside `apps` folder and customize class name\n- Customize run command, broken messages or created files\n- Add to MODE enum your app and point at new file in `main.rs` in match statement\n- Create setting inside `fuzz_settings.toml`\n- Create required folders used inside `fuzz_settings.toml`\n- Find \"valid\" files - you can find a lot of files in github by cloning big repos and checking its\n  files - https://github.com/search?q=stars%3A%3E50++language%3ARust+size%3A%3E1000\u0026type=repositories\n- Run app via `cargo run --release`\n\n## How this works\n\n- At start app take n valid files from folder\n- Depending on settings invalid files are created\n- In loop, different app(`ruff`, `biome`, `mypy` etc.) check this file\n- Basing on output messages like `RUST_BACKTRACE`, `crashed`, `error`, `internal bug`, file is checked if caused some\n  bugs(this allow to find not only crashes).\n- If it found it, then this file is copied to special folder\n- If minimization is enabled, app tries to minimize output to produce bug(this may take some time, but output files are\n  usually smaller 2x-100x times)\n\nVideo, how output should look:\n\nhttps://user-images.githubusercontent.com/41945903/227783281-a73112ee-b564-41f3-9d6a-f63b294abbce.mp4\n\n## How it is different from other fuzzers?\n\nCompared to cargo fuzz:\n\n- runs applications through the CLI, rather than using its API\n- automatically minimizes output files(if of course you have checked this in the settings) - cargo fuzz requires running a separate tool\n- automatic running of tested application on multiple threads\n- not using advanced input modification techniques\n- worse performance, due to overhead associated with running applications via CLI\n- automatic generation of a report that can be uploaded to github as an issue\n- possibility to collect multiple results at one time, cargo fuzz aborts after the first error found\n\n## So when to use it?\n- you have a tool that can be run from the command line (if you have a library, you can create a simple CLI wrapper)\n- tool uses file content as input, without needing to setup a complex environment\n\nI is very useful, especially when starting fuzzing a new project.  \nI recommend to use two tools at the same time - cargo fuzz and this tool to get best results.  \nAutomated fuzzer is good to find and group a lot of simpler bugs, while cargo fuzz is good to find more complex bugs one by one.\n\nIf you are using rust applications, remember to compile them with release flag, debug symbols enabled, overflow checks and address sanitizer support(you can find in github ci how to do it).\n\n## Modes\n\nCurrently, app only search for specific messages in output or checks for specific exit codes.\n\nI plan to add also mode to compare stability of output, sorted output and file content after 2 or more iterations.\n\n## It really works?\n\nYes, it found thousands of crashes in several projects(some are checked daily in CI):\n\n- Selene - https://github.com/Kampfkarren/selene/issues/505 (1375 files)\n- Rome - https://github.com/rome/tools/issues/4323 (\u003e2000 files)\n- Ruff - https://github.com/charliermarsh/ruff/issues/3721 (\u003e2000 files)\n- Symphonia - https://github.com/pdeljanov/Symphonia/issues/201, https://github.com/pdeljanov/Symphonia/issues/200 (30 files)\n- Lofty - https://github.com/Serial-ATA/lofty-rs/issues/174 - (1 file)\n- Deno lint - https://github.com/denoland/deno_lint/issues/1145 - (873 files)\n- Oxc - https://github.com/Boshen/oxc/issues/232 - (\u003e300 files)\n- Static Check Go Tools - https://github.com/dominikh/go-tools/issues/1393 - (10 files)\n- Quick Lint js - https://github.com/quick-lint/quick-lint-js/issues/974 - (81 files)\n\nit found a lot of more bugs, but I'm lazy to add them all here.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqarmin%2FAutomated-Fuzzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqarmin%2FAutomated-Fuzzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqarmin%2FAutomated-Fuzzer/lists"}