Giter VIP home page Giter VIP logo

fuzzinator's Introduction

docs/img/fuzzinator-black-on-trans-289x49.png

Fuzzinator: Random Testing Framework

https://img.shields.io/pypi/v/fuzzinator?logo=python&logoColor=white https://img.shields.io/pypi/l/fuzzinator?logo=open-source-initiative&logoColor=white https://img.shields.io/github/actions/workflow/status/renatahodovan/fuzzinator/main.yml?branch=master&logo=github&logoColor=white https://img.shields.io/readthedocs/fuzzinator?logo=read-the-docs&logoColor=white https://img.shields.io/gitter/room/inbugwetrust/fuzzinator?color=blueviolet&logo=gitter&logoColor=white

Fuzzinator is a fuzzing framework that helps you to automate tasks usually needed during a fuzz session:

  • run your favorite test generator and feed the test cases to the software-under-test,
  • catch and save the unique issues,
  • reduce the failing test cases,
  • ease the reporting of issues in bug trackers (e.g., Bugzilla or GitHub),
  • regularly update SUTs if needed, and
  • schedule multiple SUTs and generators without overloading your workstation.

All the above features are fully customizable either by writing a simple config file or by implementing Python snippets to cover special needs. Check out some slides about Fuzzinator for a general overview, or see the Tutorial for a detailed walk-through. There is also a repository collecting configurations for various real-life SUTs and fuzzers.

To help tracking the progress of the fuzzing, Fuzzinator provides three interfaces:

  • an interactive Web UI (WUI) (supported on all platforms) that gives a continuously updated overview about the currently running tasks, statistics about the efficacy of the test generators, and the found issues (and also supports reporting them);
  • an interactive Text UI (TUI) (supported on Linux and Mac OS X only) that supports the same functionality as the WUI, but as a retro-style console interface; and
  • a dump-mode (supported on every platform) that displays the news on line-based consoles.

Requirements

  • Python >= 3.7
  • MongoDB >= 3.6 (either local installation or access to remote database)
  • Java SE >= 7 JRE or JDK (optional, required if the Picireny test case reducer is used)

Install

To install the latest release of Fuzzinator from PyPI, use pip:

pip install fuzzinator

Alternatively, for the development version, clone the project and perform a local install:

pip install .

Usage

A common form of Fuzzinator's usage:

fuzzinator --wui <path/to/the/config.ini>

Compatibility

Fuzzinator was tested on:

  • Linux (Ubuntu 14.04 / 16.04 / 18.04 / 20.04)
  • OS X / macOS (10.11 / 10.12 / 10.13 / 10.14 / 10.15 / 11)
  • Windows (Server 2012 R2 / Server version 1809 / Windows 10)

Acknowledgement and Citations

The authors are immensely grateful to Dr. Heinz Doofenshmirtz for the continuous inspiration.

Background on Fuzzinator is published in:

  • Renata Hodovan and Akos Kiss. Fuzzinator: An Open-Source Modular Random Testing Framework. In Proceedings of the 11th IEEE International Conference on Software Testing, Verification and Validation (ICST 2018), pages 416-421, Vasteras, Sweden, April 2018. IEEE. https://doi.org/10.1109/ICST.2018.00050

Copyright and Licensing

Licensed under the BSD 3-Clause License.

fuzzinator's People

Contributors

akosthekiss avatar bzsolt avatar elecro avatar pmatos avatar renatahodovan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fuzzinator's Issues

Question: Differential Fuzzing with Fuzzinator?

Hi,

I feel that there's no way to achieve differential fuzzing with fuzzinator. Have you thought about this?
The use of this for us would be to run different versions of JSC and check if the console output of the SUT (if it doesn't) crash, is the same as other versions.

Could you add some comments on this? If not possible at the moment, how hard do you think it would be add this feature?

Fighting with ini configuration

I do have a fuzzer=fuzzinator.fuzzer.RandomContent working, and I also were able to run half of a fuzzer with grammar:

grammarinator is called, but my SUT not. Help would be great :)

[sut.jerry]
call=fuzzinator.call.SubprocessCall
#call.decorate(0)=fuzzinator.call.ExitCodeFilter
#call.decorate(11)=fuzzinator.call.FileReaderDecorator

[sut.jerry.call]
command=/media/detlef/Fast/KALI/fuzzer/gecko-dev/js/src/fuzzbuild_OPT.OBJ/dist/bin/js
#command=/media/detlef/Fast/KALI/fuzzer/ASTFuzz/a.out

cwd=.

# Parameter section for ExitCodeFilter.
[sut.jerry.call.decorate(0)]
exit_codes=[3]

[fuzz.jerryscript-grammarinator]
sut=sut.jerry
fuzzer=fuzzinator.fuzzer.SubprocessRunner

[fuzz.jerryscript-grammarinator.fuzzer.init]
outdir=./jerryscript/grammarinator/{uid}/
command=grammarinator-generate
        --unlexer=./ecma_unparser/ECMAScriptUnlexer.py
        --unparser=./ecma_unparser/ECMAScriptUnparser.py
        --max-depth=20
        --out=./fuzzgrammar/%d.js
        -n=100
        --population=./pop
        --tree-transformers=grammarinator.runtime.simple_space_transformer
contents=False

# Test cases are defined here as file paths but they should be saved as content.
[sut.jerryscript]
call.decorate(11)=fuzzinator.call.FileReaderDecorator

Deal with maximum issue title size

'title': new_issue.attributes['description'],

In Gitlab maximum issue title size is 256, so I am seeing that when we create an issue with a long title - which could be the assertion failure message, the issue is just not reported at all. Pressing report does nothing to it. My suggestion here is to trim the title to 256, and check the result of the issue create to see if creation was successful because at the moment there's no failure message when something goes wrong.

I will look into this if nobody else has time.

Question: What is Job Validation doing?

Hi!

Great piece of software - I am evaluating fuzzinator to understand if we can use it as the fuzzing framework of the 32bits port of JSC at Igalia.

I am running into this error:

[14:36:55] fuzzinator.ui.cli.cli_listener warning():40	#41: Exception in <fuzzinator.job.validate_job.ValidateJob object at 0x7fd2002b8040>: 'id'
Traceback (most recent call last):
  File "/home/pmatos/dev/fuzzinator/fuzzinator/controller.py", line 415, in _run_job
    for issue in job.run():
  File "/home/pmatos/dev/fuzzinator/fuzzinator/job/validate_job.py", line 29, in run
    _, new_issues = self.validate()
  File "/home/pmatos/dev/fuzzinator/fuzzinator/job/validate_job.py", line 43, in validate
    if issue['id'] == self.issue['id'] and not self.issue.get('invalid'):
KeyError: 'id'

Also, and probably unrelated this line suspiciously looks like a debug line that should have been removed but never was.

issue['test'] = self.issue['test']

Do you have any idea what could be triggering the above error?

SyntaxError: invalid syntax

Good day,

I'm trying to test fuzzinator but I get this error after pip installing it and trying to run it:

Traceback (most recent call last): File "/usr/local/bin/fuzzinator", line 11, in <module> load_entry_point('fuzzinator==16.10', 'console_scripts', 'fuzzinator')() File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 565, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2631, in load_entry_point return ep.load() File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2291, in load return self.resolve() File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2297, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "/usr/local/lib/python2.7/dist-packages/fuzzinator/__init__.py", line 8, in <module> from .controller import Controller File "/usr/local/lib/python2.7/dist-packages/fuzzinator/controller.py", line 21, in <module> from .mongo_driver import MongoDriver File "/usr/local/lib/python2.7/dist-packages/fuzzinator/mongo_driver.py", line 77 exec=0) ^ SyntaxError: invalid syntax

I have put 'alias python='python3.5' in my .bashrc so that the requirements of python 3.5 are fullfiled for fuzzinator. Could you assist?

Reporting bugs from WUI interface sometimes fails

Unsure what's going on - web interface returns 500. Backtrace in logs is:

fuzzer_1  | Uncaught exception GET /issues/60a2395c856c6217330862aa/report (192.168.10.14)
fuzzer_1  | HTTPServerRequest(protocol='http', host='localhost:8080', method='GET', uri='/issues/60a2395c856c6217330862aa/report', version='HTTP/1.1', remote_ip='192.168.10.14')
fuzzer_1  | Traceback (most recent call last):
fuzzer_1  |   File "/jscfuzz/venv/lib/python3.7/site-packages/tornado/web.py", line 1702, in _execute
fuzzer_1  |     result = method(*self.path_args, **self.path_kwargs)
fuzzer_1  |   File "/jscfuzz/venv/lib/python3.7/site-packages/fuzzinator/ui/wui/ui_handlers.py", line 119, in get
fuzzer_1  |     duplicates = tracker.find_issue(issue['id'])
fuzzer_1  |   File "/jscfuzz/venv/lib/python3.7/site-packages/fuzzinator/tracker/gitlab.py", line 24, in find_issue
fuzzer_1  |     'url': issue.attributes['web_url']} for issue in issues]
fuzzer_1  |   File "/jscfuzz/venv/lib/python3.7/site-packages/fuzzinator/tracker/gitlab.py", line 24, in <listcomp>
fuzzer_1  |     'url': issue.attributes['web_url']} for issue in issues]
fuzzer_1  | AttributeError: 'dict' object has no attribute 'attributes'
fuzzer_1  | 500 GET /issues/60a2395c856c6217330862aa/report (192.168.10.14) 285.30ms

Again - I will look into this soon.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.