Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
.. image:: https://github.com/jtpereyda/boofuzz/raw/master/artwork/boo-logo-dark.svg :width: 60% :alt: boofuzz logo
.. image:: https://github.com/jtpereyda/boofuzz/workflows/Test/badge.svg?branch=master :target: https://github.com/jtpereyda/boofuzz/actions?query=workflow%3ATest+branch%3Amaster .. image:: https://readthedocs.org/projects/boofuzz/badge/?version=latest :target: https://boofuzz.readthedocs.io/ :alt: Documentation Status .. image:: https://img.shields.io/pypi/v/boofuzz.svg :target: https://pypi.org/project/boofuzz/ .. image:: https://badges.gitter.im/jtpereyda/boofuzz.svg :alt: Join the chat at https://gitter.im/jtpereyda/boofuzz :target: https://gitter.im/jtpereyda/boofuzz .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/psf/black
Boofuzz is a fork of and the successor to the venerable Sulley
_ fuzzing
framework. Besides numerous bug fixes, boofuzz aims for extensibility.
The goal: fuzz everything.
.. figure:: https://github.com/jtpereyda/boofuzz/raw/master/_static/boofuzz-screenshot.png :alt: boofuzz screenshot
Sulley has been the preeminent open source fuzzer for some time, but has fallen out of maintenance.
Like Sulley, boofuzz incorporates all the critical elements of a fuzzer:
Unlike Sulley, boofuzz also features:
documentation
_.Sulley is affectionately named after the giant teal and purple creature from Monsters Inc. due to his fuzziness. Boofuzz is likewise named after the only creature known to have scared Sulley himself: Boo!
.. figure:: https://github.com/jtpereyda/boofuzz/raw/master/_static/boo.png :alt: Boo from Monsters Inc
Boo from Monsters Inc
::
pip install boofuzz
Boofuzz installs as a Python library used to build fuzzer scripts. See
INSTALL.rst
_ for advanced and detailed instructions.
Documentation is available at https://boofuzz.readthedocs.io/, including nifty quickstart guides.
Pull requests are welcome, as boofuzz is actively maintained (at the
time of this writing ;)). See CONTRIBUTING.rst
_.
For questions that take the form of “How do I… with boofuzz?” or “I got
this error with boofuzz, why?”, consider posting your question on Stack
Overflow. Make sure to use the fuzzing
tag.
If you’ve found a bug, or have an idea/suggestion/request, file an issue here on GitHub.
For other questions, check out boofuzz on gitter
_ or Google Groups
_.
For updates, follow @b00fuzz
_ on Twitter.
.. _Sulley: https://github.com/OpenRCE/sulley .. _Google Groups: https://groups.google.com/d/forum/boofuzz .. _gitter: https://gitter.im/jtpereyda/boofuzz .. _@b00fuzz: https://twitter.com/b00fuzz .. _documentation: https://boofuzz.readthedocs.io/ .. _INSTALL.rst: INSTALL.rst .. _CONTRIBUTING.rst: CONTRIBUTING.rst
Features ^^^^^^^^
Fixes ^^^^^
default_value
from string to bytes for FromFile
.s_update
primitive was out of date.BitField
primitive.Session.fuzz(name=name)
.dep_value
argument of Block
to bytes and added type checks.Features ^^^^^^^^
NETCONFConnection
class.Session
arg db_filename
to modify the location of the log database.Fixes ^^^^^
FuzzableBlock
.Bytes
primitive to prevent incorrect use.s_binary
initialization.Features ^^^^^^^^
Simple
primitive that uses only the specified values for fuzzing.Float
primitive with support for IEEE 754 encoding.Fixes ^^^^^
Checksum
primitive.random
.Features ^^^^^^^^
Aligned
block: Aligns content length to multiple of certain number of bytes.Checksum
, Size
, etc. now resolve absolute and relative names. Block and primitive
names no longer need to be globally unique within a message, they only need to be locally unique within a block.TestCaseContext
object to which one can save data to be used
later in the test case. TestCaseSessionReference
can be passed as a default value in a protocol definition. The name
it references must have been saved by the time that message in the protocol is reached.Fuzzable
rewrite: Simpler definitions for new fuzz primitives. See static.py
for an example of a very simple primitive.ProcessMonitorLocal
allows running procmon as part of fuzzer process.UnixSocketConnection
class.current_message
, previous_message
.Fixes ^^^^^
Group
primitives.Features ^^^^^^^^
Fixes ^^^^^
Features ^^^^^^^^
SocketConnection
is now deprecated. Use the classes derived from BaseSocketConnection
instead.connections
submodule.SessionInfo
has had attributes renamed; procmon_results and netmon_results are deprecated and now aliases for monitor_results and monitor_data respectively.BoofuzzFailure
exception type allows callback methods to signal a failure that should halt the current test case.capture_output
option to process monitor to capture target process stderr/stdout .FileConnection
to dump messages to files.fuzz_data_logger
, log_level
, logfile
, logfile_level
and log()
.FuzzLoggerFile
.crc32c
is no longer a required package. Install manually if needed.Fixes ^^^^^
requests
folder to request_definitions
because it shadowed the name of the requests
python module.Features ^^^^^^^^
s_bytes
which fuzzes an arbitrary length binary value (similiar to s_string
).Black
for code style standardization.Fixes ^^^^^
s_group
primitive was not accepting empty default value.examples/fuzz-ssl-server.py
and examples/fuzz-ssl-client.py
.boo open
.fuzz_logger_curses
.sudo
is no longer recommended, use the --user
option of pip instead.ignore_connection_ssl_errors
session attribute that can
be set to True to ignore SSL-related error on a test case.s_from_file
decoding in Python 2 (the encoding parameter is now depreciated).s_checksum
. It is possible to use a custom algorithm with this block.Features ^^^^^^^^
console_gui
to enable it.
This has not been tested under Windows!keep_web_open
to allow analyzing the test results after test completion.taskkill -F
if taskkill
fails.Fixes ^^^^^
Features ^^^^^^^^
restart_callbacks
, pre_send_callbacks
, and post_test_case_callbacks
to hand over custom callback functions.fuzz_db_keep_only_n_pass_cases
. This allowes saving only n test cases preceding a failure or error to the database.Fixes ^^^^^
Features ^^^^^^^^
Target
recv
function now accepts a max_recv_bytes
argument.Fixes ^^^^^
Features ^^^^^^^^
Fixes ^^^^^
Features ^^^^^^^^
boo open
command can open and inspect saved database log files.REQUESTS
map available in top level boofuzz package.Fixes ^^^^^
Features ^^^^^^^^
Session
parameter receive_data_after_fuzz
. Controls whether to execute a receive step after sending
fuzz messages. Defaults to False. This significantly speeds up tests in which the target tends not to respond to
invalid messages.Fixes ^^^^^
Features ^^^^^^^^
FuzzLoggerDB
Session.open_test_run()
to read test results database from previous test run.Session.feature_check()
method to verify protocol functionality before fuzzing.proc_name
to support asynchronously started target processes.post_send()
is called, reducing redundant error messages.Target
open()
and close()
operations are now logged.callback
methods.Session
& Connection Options
Session
receive_data_after_each_request
option to enable disabling of data receipt after messages are sent.Session
skip
argument replaced with index_start
and index_end
.Session
now has separate crash thresholds for elements/blocks and nodes/messages.SocketConnection
separate timeouts for send()
/recv()
.Target.recv()
now has a default max_bytes
value.DEFAULT_PROCMON_PORT
constant.Session.post_send()
's sock
parameter now deprecated (use target
instead).Fixes ^^^^^
BitField
blocks with ASCII format reported incorrect sizes.s_update
.get_max_udp_size()
was crashing in Windows.String
padding was not always being applied.String
was not accepting unicode strings in value
parameter.String
was skipping valid mutations and reporting wrong num_mutations()
when size
parameter was used.Development ^^^^^^^^^^^
BitField
.Features ^^^^^^^^
fuzz_by_name
and fuzz_single_node_by_path
Fixes ^^^^^
fuzz_single_case
Features ^^^^^^^^
check_data_received_each_request
to False to disable receive after send.Fixes ^^^^^
Features ^^^^^^^^
Fixes ^^^^^
Features ^^^^^^^^
s_size
is now fuzzable by default.Fixes ^^^^^
Features ^^^^^^^^
--help
parameter to process monitor.procmon
and procmon_options
in constructor.Fixes ^^^^^
--crash_bin
optional (as documented).Features ^^^^^^^^
with s_block("my-block"):
Fixes ^^^^^
Features ^^^^^^^^
Request.original_value()
function to render the request as if it were not fuzzed.
This will help enable reuse of a fuzz definition to generate valid requests.SocketConnection
can now send and receive UDP broadcast packets using the udp_broadcast
constructor
parameter.Target.recv()
now logs an entry before receiving data, in order to help debug receiving issues.Fixes ^^^^^
SocketConnection
class now handles more send and receive errors: ECONNABORTED
, ECONNRESET
,
ENETRESET
, and ETIMEDOUT
.Development ^^^^^^^^^^^
BoofuzzTargetConnectionReset
and BoofuzzTargetConnectionAborted
.sessions.py
and may be thrown by any ITargetConnection
implementation.Fixes ^^^^^
Session.__init__
restart_sleep_time
from 5 minutes to 5 seconds.Continuous deployment with Travis.
Development ^^^^^^^^^^^
Development ^^^^^^^^^^^
Fixes ^^^^^
boofuzz.request.Request
now implemented.Fixes ^^^^^
session_filename
is now optional.New features ^^^^^^^^^^^^
Now on PyPI! pip install boofuzz
API is now centralized so all classes are available at top level
boofuzz.*
boofuzz.MyClass
instead of boofuzz.my_file.MyClass
.Added EzOutletReset
class to support restarting devices using an
ezOutlet EZ-11b.
Backwards-incompatible ^^^^^^^^^^^^^^^^^^^^^^
ITargetConnection
. This separates
responsibilities and makes our code more flexible with different
kinds of connections.Fixes ^^^^^
Bugs fixed:
helpers.udp_checksum
was failing with oversized messages.setup.py
was previously installing around five mostly unwanted
packages. Fixed.Checksum.render()
for UDP was not handling dependencies
properly.Back-end Improvements ^^^^^^^^^^^^^^^^^^^^^
This section took the most work. It has the least visible impact, but all of the refactors enable new features, fixes, and unit tests.
Primitives and Blocks:
IFuzzable
which properly defines interface for
Block
, Request
, and all BasePrimitive
classes.exhaust()
function. It was used only once and was
primarily a convoluted break statement. Now it's gone. :)Many Unit tests added.
Other ^^^^^
[dev]
Much easier install experience!
Support for arbitrary communications mediums.
Extensible instrumentation/failure detection.
Better recording of test data.
Improved functionality in checksum blocks.
Self-referential size and checksum blocks now work.
post_send
callbacks can now check replies and log failures.
Far fewer bugs.
Numerous refactors within framework code.
FAQs
A fork and successor of the Sulley Fuzzing Framework
We found that boofuzz demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.