Skip to main content

Openapi3 fuzzer

Project description

Simple fuzzer for OpenAPI 3 specification based APIs

What does this fuzzer do?

  1. Sends various attack patterns to all the paths defined in an OpenAPI 3 definition file, using the OAS3 definition to create populate requests.
  2. Verifies if the responses matches those defined in the OAS3 definition file, complains and exit(2) if it doesn't.
  3. Complains loudly and exit(1) if a path returns an internal server error (status code 500 and higher)

Why does this OpenAPI fuzzer exist?

To make it easy to integrate an OpenAPI 3 fuzzer in an existing API.

How do I use this?

  1. Install the fuzzer using its pip package
  2. Add at least the following packages to requirements-test.txt:
coverage==5.0.3
openapi3-fuzzer
adal==1.2.2
Flask-Testing==0.7.1
  1. Generate OpenAPI (https://github.com/OpenAPITools/openapi-generator)
  2. Create a test_fuzzing file in the test location using the template below:
import adal

import config
from openapi3_fuzzer import FuzzIt
from openapi_server.test import BaseTestCase


def get_token():
    """
    Create a token for testing
    :return:
    """
    oauth_expected_authenticator = authenticatoruri
    client_id = appid
    client_secret = secret
    resource = resource/audience

    # get an Azure access token using the adal library
    context = adal.AuthenticationContext(oauth_expected_authenticator)
    token_response = context.acquire_token_with_client_credentials(
        resource, client_id, client_secret)

    access_token = token_response.get('accessToken')
    return access_token


class TestvAPI(BaseTestCase):

    def test_fuzzing(self):
        FuzzIt("openapi.yaml", get_token(), self)
  1. Run using our unittest container or via the Python Unittest Framework

What OAS3 items are supported?

Based on OpenAPI specification 3.0.2:

Operation Supported
GET Yes
POST Yes
PUT Yes
DELETE Yes
HEAD Yes
OPTIONS no
PATCH no
TRACE no
Parameter in Supported
path Yes
query no
header no
cookie no
Property types Supported
string Yes
integer Yes
number Yes
array Yes
none Yes
boolean no

Example output

Internal server error:

GET fuzzing /managers/expenses/{expenses_id}/attachments

* INTERNAL SERVER ERROR
  Endpoint returned 500 but expected one of [200]
  GET https://dev.myapi.example/managers/expenses/99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999/attachments

Response doesn't conform to the OAS3 spec:

--------------------------------------------
GET fuzzing /employees/expenses/{expenses_id}

- Unexpected status code
  Endpoint returned 404 but expected one of [200, 'default']
  GET https://dev.myapi.example/employees/expenses/)$#***^
POST fuzzing /employees/expenses/{expenses_id}

- Unexpected status code
  Endpoint returned 400 but expected one of [201, 'default']
  POST https://dev.myapi.example/employees/expenses
{
    "amount": "123",
    "cost_type": "123",
    "note": ";sleep 10",
    "transaction_date": "123"
}

LICENSE

GPL3

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openapi3-fuzzer-1.2.3.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openapi3_fuzzer-1.2.3-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

Details for the file openapi3-fuzzer-1.2.3.tar.gz.

File metadata

  • Download URL: openapi3-fuzzer-1.2.3.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.5.2

File hashes

Hashes for openapi3-fuzzer-1.2.3.tar.gz
Algorithm Hash digest
SHA256 1d297fa515d59d3eb718d965416c04db7e3cff705c5032c1ee60eb292064c8da
MD5 929c1a222e922adaf86722d462de0e6d
BLAKE2b-256 14e8d367f723d10313890422792c66355bfc6855ec949a66b037e0c7163fa073

See more details on using hashes here.

File details

Details for the file openapi3_fuzzer-1.2.3-py3-none-any.whl.

File metadata

  • Download URL: openapi3_fuzzer-1.2.3-py3-none-any.whl
  • Upload date:
  • Size: 20.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.5.2

File hashes

Hashes for openapi3_fuzzer-1.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e92e837a0a91dd44164c7eb4c3cc07388bd3ec44f77d6ef2ab057560bee46fb9
MD5 a7a55821d0dd27ace1e5dae77c98d405
BLAKE2b-256 68b476d20301819862c20342b00e249e2f2b32e014431b2b0f739535b1a62d11

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page