Science Score: 54.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: arxiv.org, zenodo.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.1%) to scientific vocabulary

Keywords from Contributors

fuzzing property-based-testing mesh sequences interactive hacking network-simulation
Last synced: 7 months ago · JSON representation ·

Repository

Basic Info
  • Host: GitHub
  • Owner: schemathesis
  • Language: Python
  • Default Branch: main
  • Size: 57 MB
Statistics
  • Stars: 13
  • Watchers: 3
  • Forks: 1
  • Open Issues: 10
  • Releases: 0
Created about 5 years ago · Last pushed almost 3 years ago
Metadata Files
Readme License Citation

README.md

Web API Fuzzing Project (WAFP)

The WAFP project is a test suite for evaluating various characteristics of Web API fuzzers. WAFP is fully runnable as a CLI tool that spins up fuzzing targets & runs fuzzers against them.

Citation

If you use WAFP in research, please cite our paper Deriving Semantics-Aware Fuzzers from Web API Schemas by Zac Hatfield-Dodds (@Zac-HD) and Dmitry Dygalo (@Stranger6667) - we built it to evaluate Schemathesis, it's designed to be extensible. Our goal was to make future studies as easy -- and easy to compare -- as possible.

Use it as-is, or extend it and contribute new tools, targets, or integrations back to our repo so that others can benefit from your hard work!

If you just want to grab results, see Zenodo: unprocessed data (23 GB) and processed data (263 MB).

Installation

WAFP is built around Docker and is tested against the 20.10.0 version. Check the official Docker docs for installation guide. Other dependencies are managed via poetry (check out the installation guide):

poetry install

It also automatically installs WAFP CLI to the current environment that is available via the wafp entry point.

Getting started

To run a fuzzer against a target, you need to pass their names in CLI:

wafp schemathesis:Default jupyter_server:Default --output-dir=./artifacts

The command above will run the Default variant of Schemathesis against the Jupyter Server target and will store all available artifacts in the ./artifacts directory.

Alternatively you can run it via poetry:

poetry run wafp schemathesis:Default jupyter_server --output-dir=./artifacts

If you want to run the whole suite, use the run.py script:

python run.py --output-dir=./artifacts --iterations=30

It will run all the defined combinations for 30 times and store the artifacts in the ./artifacts directory. The combinations are defined in the COMBINATIONS variable in the run.py file. It excludes combinations that are known to not work for some reason (usually due to fuzzer failures).

Fuzzing targets

Every fuzzing target is a web application that runs via docker-compose. WAFP provides an API on top of docker-compose that allows fuzzers to work with targets in a unified fashion.

A target is represented as a directory with at least two components:

  • __init__.py file. Contains target's Python API & metadata;
  • docker-compose.yml file. Docker-compose project for the target.

But generally, there could be any dependencies needed to build a docker-compose project. All available targets are located in src/wafp/targets/catalog.

You can run targets with the following command (replace <target-name> with any target name from the catalog):

python -m wafp.targets <target-name> --output-dir=./artifacts

Target structure

Python API for a target consists of one or more classes inherited from wafp.targets.BaseTarget. Each class requires implementing at least four methods:

  • get_base_url. Service base URL. All URLs used in API calls will extend this value;
  • get_schema_location. URL or a filesystem path to the API schema;
  • is_ready. Detects whether the target is ready for fuzzing. It is called on each stdout line emitted by the docker-compose stack;
  • get_metadata. Describes the programming language, API schema type, and other meta information.

Targets are parametrized with TCP ports, and by default, they start working on a random port that is available via the port attribute.

Here is an example of the httpbin target:

```python from wafp.targets import BaseTarget, Metadata

class Default(BaseTarget): def getbaseurl(self) -> str: # A common case that has no additional path return f"http://0.0.0.0:{self.port}/"

def get_schema_location(self) -> str:
    return f"http://0.0.0.0:{self.port}/spec.json"

def is_ready(self, line: bytes) -> bool:
    return b"Listening at: " in line

def get_metadata(self) -> Metadata:
    return Metadata.flasgger(
        flask_version="1.0.2",
        flasgger_version="0.9.0",
        openapi_version="2.0",
        validation_from_schema=False,
    )

```

Docker-compose:

version: '3' services: web: build: context: https://github.com/postmanlabs/httpbin.git#f8ec666b4d1b654e4ff6aedd356f510dcac09f83 init: true environment: - PORT=3000 ports: - '${PORT-3000}:80'

Compose files should support the PORT environment variable and provide a proper port mapping.

Running the target from the example above:

```python target = Default() target.start()

... Run fuzzing ...

target.stop() target.cleanup() ```

Some targets may require additional actions to be prepared for fuzzing, for example, creating a user and getting credentials. You can extract headers from docker-compose output via the get_headers method:

```python import re ...

class Default(BaseTarget): ... def get_headers(self, line: bytes) -> Dict[str, str]: match = re.search(b"token=(.+)", line) if match is None: return {} token = match.groups()[0] return {"Authorization": f"token {token.decode()}"} ```

Credentials can be obtained in the after_start hook. At this moment, the target is ready to accept network requests:

```python import requests ...

class Default(BaseTarget): ... def afterstart(self, stdout: bytes, headers: Dict[str, str]) -> None: baseurl = self.getbaseurl() # Authorize & get the token response = requests.post( f"{base_url}/authorizations/token", json={"username": "root", "password": "test"} ) token = response.json()["token"] headers["Authorization"] = f"token {token}" ```

Sentry integration

Some targets provide Sentry integration, and it is possible to collect all errors reported during a fuzzing run. To enable the integration, you need to pass the sentry_dsn argument during the target initialization or provide the --sentry-dsn CLI option. To collect errors from the used Sentry instance you need to provide more info:

```python

Target initialization

target = target.Default( sentry_dsn="https://c4715cd284cf4f509c32e49f27643f30@sentry.company.com/42" )

Load all artifacts including errors reported to Sentry

artifacts = target.collectartifacts( # Your Sentry instance base URL sentryurl="https://sentry.company.com", # Sentry access token sentrytoken="7a7d025aafe34326b789356b62d2b6dc01af594c33ca48a3a0f76421a137ef9a", # The slug of the organization the target project belongs to sentryorganization="myorg", # The slug of the project sentryproject="target", ) ```

The artifacts variable will contain container logs and Sentry events as Python dictionaries wrapped into the Artifact class.

WAFP uses the GET /api/0/projects/{organization_slug}/{project_slug}/events/ endpoint to retrieve events data. See more info in Sentry documentation - https://docs.sentry.io/api/events/list-a-projects-events/

If you'd like to use the run.py file to run all combinations, you'll need to add sentry_dsn keys to the desired combinations in the COMBINATIONS variable in the run.py file.

As Sentry does not process events immediately, you'll need to download them separately, when the processing is done in your Sentry instance.

To load the events you need the latest stable Rust version (see the rustup docs for the installation instructions) and run the following command in the sentry_events directory:

cargo run --release <path-to-artifacts> --token <your Sentry API token> --url <your Sentry instance URL>

It will load all the events relevant to the artifacts and store them in the same artifacts directory. Note, it might take a while to download all the events.

Fuzzers

API fuzzers are also run via docker-compose and are available via a similar interface:

python -m wafp.fuzzers schemathesis:Default \ --schema=<Schema file or URL> \ --base-url=<Service base URL> \ --output-dir=./artifacts

Each fuzzer can be represented as one or more variants - you can have different running modes as different variants. For example, there are four different variants for Schemathesis:

  • schemathesis:Default - checks only for 5xx HTTP response codes
  • schemathesis:AllChecks - runs all available checks
  • schemathesis:StatefulOld - additionally execute stateful tests via Schemathesis's deprecated approach
  • schemathesis:StatefulNew - utilizes the state-machine-based stateful testing

Fuzzers' names are derived from Python packages they are in - you can find them in the ./src/wafp/fuzzers/catalog directory.

Artifacts processing

To process the artifacts you need the latest stable Rust version (see the rustup docs for the installation instruction).

Run the following command in the postprocessing directory:

cargo run --release <path-to-artifacts> <output-directory>

The output directory will have the same top-level structure as the input one. Sub-directories named by the following pattern - <fuzzer>-<target>-<iteration-number>. Then, each directory may have the following files:

  • metadata.json. Metadata about a test run - tested fuzzer name, run duration, etc
  • fuzzer.json - Structured fuzzer output
  • deduplicated_cases.json - Deduplicated reported failures, when fuzzers provide it
  • sentry.json - Cleaned Sentry events for this run
  • target.json - Parsed stdout for Gitlab & Disease.sh targets that are tested without Sentry integration

Related projects

  • HypoFuzz. Putting smart fuzzing into the world's best testing workflow for Python. HypoFuzz runs your property-based test suite, using cutting-edge fuzzing techniques and coverage instrumentation to find even the rarest inputs which trigger an error.
  • Schemathesis.io. A modern API testing tool that allows you to find bugs faster without leaving your browser. Schemathesis.io be available soon!

Owner

  • Name: Schemathesis.io
  • Login: schemathesis
  • Kind: organization
  • Email: support@schemathesis.io
  • Location: Czech Republic

Run thousands of test scenarios based on your API specification and always be sure your API works as expected.

Citation (CITATION.cff)

cff-version: 1.2.0
message: |
  We built the Web API Fuzzing Project (WAFP) to evaluate our
  own tool, but designed it to be extensible: our goal was to
  make future studies as easy -- and easy to compare -- as
  possible.

  Use it as-is, or extend it and contribute new tools, targets,
  or integrations back to our repo so that others can benefit
  from your hard work!

  Useful links:
    - https://arxiv.org/abs/2112.10328 (our paper)
    - https://github.com/schemathesis/web-api-fuzzing-project (repo)
    - https://zenodo.org/record/5339649 (unprocessed data, 23 GB)
    - https://zenodo.org/record/5392010 (processed data, 263 MB)


preferred-citation:
  title: 'Deriving Semantics-Aware Fuzzers from Web API Schemas'
  date-released: 2021-12-20
  type: article
  doi: 10.48550/ARXIV.2112.10328
  authors:
    - family-names: Hatfield-Dodds
      given-names: Zac
      orcid: https://orcid.org/0000-0002-8646-8362
      affiliation: Australian National University
    - family-names: Dygalo
      given-names: Dmitry
      affiliation: Schemathesis.io

# Citation metadata for the software itself, as required by the CFF spec
doi: 10.5281/zenodo.5171795  # Version-independent DOI for the software archive
title: 'Web API Fuzzing Project (WAFP)'
repository-code: https://github.com/schemathesis/web-api-fuzzing-project
license: MIT
authors:
    - family-names: Hatfield-Dodds
      given-names: Zac
      orcid: https://orcid.org/0000-0002-8646-8362
      affiliation: Australian National University
    - family-names: Dygalo
      given-names: Dmitry
      affiliation: Schemathesis.io

GitHub Events

Total
  • Watch event: 1
Last Year
  • Watch event: 1

Committers

Last synced: 9 months ago

All Time
  • Total Commits: 153
  • Total Committers: 4
  • Avg Commits per committer: 38.25
  • Development Distribution Score (DDS): 0.183
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Dmitry Dygalo d****o@g****m 125
Denis Moiseev 1****k 16
dependabot[bot] 4****] 10
Zac Hatfield-Dodds z****s@g****m 2

Issues and Pull Requests

Last synced: 9 months ago

All Time
  • Total issues: 10
  • Total pull requests: 23
  • Average time to close issues: about 1 year
  • Average time to close pull requests: 5 days
  • Total issue authors: 2
  • Total pull request authors: 4
  • Average comments per issue: 0.0
  • Average comments per pull request: 0.13
  • Merged pull requests: 19
  • Bot issues: 0
  • Bot pull requests: 11
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • Stranger6667 (7)
  • kachnamalir (3)
Pull Request Authors
  • dependabot[bot] (11)
  • Stranger6667 (7)
  • lobziik (4)
  • kachnamalir (1)
Top Labels
Issue Labels
Pull Request Labels
dependencies (11) rust (8) python (2)

Dependencies

postprocessing/Cargo.lock cargo
  • aho-corasick 0.7.18
  • ansi_term 0.11.0
  • atty 0.2.14
  • autocfg 1.0.1
  • bitflags 1.2.1
  • bstr 0.2.16
  • cfg-if 1.0.0
  • clap 2.33.3
  • console 0.14.1
  • crossbeam-channel 0.5.1
  • crossbeam-deque 0.8.1
  • crossbeam-epoch 0.9.5
  • crossbeam-utils 0.8.8
  • either 1.6.1
  • encode_unicode 0.3.6
  • fnv 1.0.7
  • form_urlencoded 1.0.1
  • globset 0.4.8
  • heck 0.3.3
  • hermit-abi 0.1.18
  • idna 0.2.3
  • indicatif 0.16.2
  • itoa 0.4.7
  • lazy_static 1.4.0
  • libc 0.2.97
  • log 0.4.14
  • matches 0.1.8
  • memchr 2.4.0
  • memoffset 0.6.4
  • num_cpus 1.13.0
  • number_prefix 0.4.0
  • percent-encoding 2.1.0
  • proc-macro-error 1.0.4
  • proc-macro-error-attr 1.0.4
  • proc-macro2 1.0.27
  • quote 1.0.9
  • rayon 1.5.1
  • rayon-core 1.9.1
  • regex 1.5.5
  • regex-syntax 0.6.25
  • ryu 1.0.5
  • scopeguard 1.1.0
  • serde 1.0.126
  • serde_derive 1.0.126
  • serde_json 1.0.64
  • strsim 0.8.0
  • structopt 0.3.21
  • structopt-derive 0.4.14
  • syn 1.0.73
  • terminal_size 0.1.17
  • textwrap 0.11.0
  • tinyvec 1.2.0
  • tinyvec_macros 0.1.0
  • unicode-bidi 0.3.5
  • unicode-normalization 0.1.19
  • unicode-segmentation 1.7.1
  • unicode-width 0.1.8
  • unicode-xid 0.2.2
  • url 2.2.2
  • vec_map 0.8.2
  • version_check 0.9.3
  • winapi 0.3.9
  • winapi-i686-pc-windows-gnu 0.4.0
  • winapi-x86_64-pc-windows-gnu 0.4.0
postprocessing/Cargo.toml cargo
  • globset 0.4
  • indicatif 0.16.2
  • lazy_static 1.4
  • rayon 1.5
  • regex 1.5
  • serde 1
  • serde_json 1
  • structopt 0.3
  • url 2.2.2
sentry_events/Cargo.lock cargo
  • 132 dependencies
sentry_events/Cargo.toml cargo
  • glob 0.3
  • parse_link_header 0.2
  • rayon 1.5
  • reqwest 0.11
  • serde_json 1
  • structopt 0.3
poetry.lock pypi
  • coverage 5.5 develop
  • atomicwrites 1.4.0
  • attrs 20.3.0
  • bcrypt 3.2.0
  • certifi 2020.12.5
  • cffi 1.14.5
  • chardet 4.0.0
  • colorama 0.4.4
  • cryptography 3.4.7
  • distro 1.5.0
  • docker 5.0.3
  • docker-compose 1.29.1
  • dockerpty 0.4.1
  • docopt 0.6.2
  • idna 2.10
  • iniconfig 1.1.1
  • jsonschema 3.2.0
  • packaging 20.9
  • paramiko 2.10.1
  • pluggy 0.13.1
  • py 1.10.0
  • pycparser 2.20
  • pynacl 1.4.0
  • pyparsing 2.4.7
  • pyrsistent 0.17.3
  • pytest 6.2.3
  • pytest-mock 3.5.1
  • python-dotenv 0.17.0
  • pywin32 227
  • pyyaml 5.4.1
  • requests 2.25.1
  • six 1.15.0
  • structlog 21.1.0
  • texttable 1.6.3
  • toml 0.10.2
  • urllib3 1.26.5
  • websocket-client 0.58.0
pyproject.toml pypi
  • coverage ^5.5 develop
  • pytest ^6.2.2 develop
  • attrs ^20.3.0
  • colorama ^0.4.4
  • docker-compose >=1.28.0
  • pytest-mock ^3.5.1
  • python ^3.9
  • requests ^2.25.1
  • structlog ^21.1.0
src/wafp/targets/catalog/age_of_empires_2_api/requirements.txt pypi
  • Flask ==1.1.2
  • Flask-RESTful ==0.3.8
  • Flask-SQLAlchemy ==2.5.1
  • Jinja2 ==2.11.3
  • MarkupSafe ==1.1.1
  • PyYAML ==5.4.1
  • SQLAlchemy ==1.3.24
  • SQLAlchemy-Utils ==0.36.8
  • Werkzeug ==1.0.1
  • aniso8601 ==9.0.1
  • attrs ==20.3.0
  • certifi ==2020.12.5
  • chardet ==4.0.0
  • click ==7.1.2
  • coverage ==5.5
  • flasgger ==0.9.5
  • greenlet ==1.0.0
  • idna ==2.10
  • iniconfig ==1.1.1
  • itsdangerous ==1.1.0
  • jsonschema ==3.2.0
  • mistune ==0.8.4
  • numpy ==1.20.2
  • packaging ==20.9
  • pandas ==1.2.3
  • pluggy ==0.13.1
  • py ==1.10.0
  • pyparsing ==2.4.7
  • pyrsistent ==0.17.3
  • pytest ==6.2.3
  • python-coveralls ==2.9.3
  • python-dateutil ==2.8.1
  • pytz ==2021.1
  • requests ==2.25.1
  • six ==1.15.0
  • toml ==0.10.2
  • uWSGI ==2.0.19.1
  • urllib3 ==1.26.4
src/wafp/targets/catalog/pslab_webapp/requirements.txt pypi
  • Flask ==1.1.2
  • Flask-Cors ==3.0.10
  • Flask-SQLAlchemy ==2.5.1
  • Jinja2 ==2.11.3
  • MarkupSafe ==1.1.1
  • PyYAML ==5.4.1
  • SQLAlchemy ==1.3.24
  • Werkzeug ==0.16.1
  • attrs ==20.3.0
  • click ==7.1.2
  • flasgger ==0.9.5
  • greenlet ==1.0.0
  • gunicorn ==19.6.0
  • importlib-metadata ==3.10.0
  • itsdangerous ==1.1.0
  • jsonschema ==3.2.0
  • mistune ==0.8.4
  • numpy ==1.19.5
  • psycopg2 ==2.6.2
  • pyrsistent ==0.17.3
  • six ==1.15.0
  • typing-extensions ==3.7.4.3
  • zipp ==3.4.1
.github/workflows/build.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
.github/workflows/fuzz_demo.yaml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • actions/upload-artifact v3 composite
src/wafp/fuzzers/catalog/api_fuzzer/Dockerfile docker
  • python 3.8.6-slim build
src/wafp/fuzzers/catalog/cats/Dockerfile docker
  • maven 3.6.3-jdk-8-slim build
src/wafp/fuzzers/catalog/fuzz_lightyear/Dockerfile docker
  • python 3.8.6-slim build
src/wafp/fuzzers/catalog/fuzzy_swagger/Dockerfile docker
  • python 3.6.13-slim build
src/wafp/fuzzers/catalog/got_swag/Dockerfile docker
  • node 15.3.0-buster-slim build
src/wafp/fuzzers/catalog/restler/Dockerfile docker
  • mcr.microsoft.com/dotnet/core/aspnet 3.1-alpine build
  • mcr.microsoft.com/dotnet/core/sdk 3.1-alpine build
src/wafp/fuzzers/catalog/schemathesis/docker-compose.yml docker
  • schemathesis/schemathesis stable
src/wafp/fuzzers/catalog/swagger_conformance/Dockerfile docker
  • python 3.8.6-slim build
src/wafp/fuzzers/catalog/swagger_fuzzer/Dockerfile docker
  • python 3.5-slim build
src/wafp/fuzzers/catalog/swagger_fuzzer/docker-compose.yml docker
  • halverneus/static-file-server latest
src/wafp/fuzzers/catalog/tnt_fuzzer/Dockerfile docker
  • python 3.8.6-alpine build
src/wafp/fuzzers/catalog/tnt_fuzzer/docker-compose.yml docker
  • halverneus/static-file-server latest
src/wafp/targets/catalog/age_of_empires_2_api/Dockerfile docker
  • python 3.7-slim build
  • tiangolo/uwsgi-nginx-flask python3.7 build
src/wafp/targets/catalog/cccatalog_api/Dockerfile docker
  • python 3.7-stretch build
src/wafp/targets/catalog/cccatalog_api/docker-compose.yml docker
  • cccatalog_api latest
  • docker.elastic.co/elasticsearch/elasticsearch 7.1.0
  • postgres 10.3-alpine
  • redis 4.0.10
  • willnorris/imageproxy latest
src/wafp/targets/catalog/covid19_japan_web_api/Dockerfile docker
  • python 3.6.12-slim build
src/wafp/targets/catalog/disease_sh/docker-compose.yml docker
  • redis 5.0.8-buster
src/wafp/targets/catalog/gitlab/docker-compose.yml docker
  • gitlab/gitlab-ce 12.6.3-ce.0
src/wafp/targets/catalog/httpbin/Dockerfile docker
  • ubuntu 18.04 build
src/wafp/targets/catalog/jupyter_server/Dockerfile docker
  • python 3.8.6-slim build
src/wafp/targets/catalog/jupyterhub/Dockerfile docker
  • jupyterhub/jupyterhub 1.4.dev build
src/wafp/targets/catalog/kubernetes_kcp/docker-compose.yml docker
  • ghcr.io/kcp-dev/kcp f10dbc1
src/wafp/targets/catalog/mailhog/Dockerfile docker
  • alpine 3 build
  • golang 1.18-alpine build
src/wafp/targets/catalog/open_fec/Dockerfile docker
  • python 3.7.9-slim build
src/wafp/targets/catalog/open_fec/docker-compose.yml docker
  • library/elasticsearch 7.10.1
  • postgres 10-alpine
src/wafp/targets/catalog/opentopodata/Dockerfile docker
  • python 3.7.9-slim-buster build
src/wafp/targets/catalog/otto_parser/Dockerfile docker
  • debian buster-slim build
  • rust 1.48-slim build
src/wafp/targets/catalog/pslab_webapp/Dockerfile docker
  • python 3.6.12-stretch build
src/wafp/targets/catalog/pslab_webapp/docker-compose.yml docker
  • postgres 13.7-alpine
src/wafp/targets/catalog/pulpcore/Dockerfile docker
  • python 3.8.6-slim build
src/wafp/targets/catalog/pulpcore/docker-compose.yml docker
  • postgres alpine
src/wafp/targets/catalog/request_baskets/docker-compose.yml docker
  • darklynx/request-baskets v1.1.0
src/wafp/targets/catalog/restler_demo/Dockerfile docker
  • python 3.8-slim build
src/wafp/targets/catalog/worklog/Dockerfile docker
  • python 3.7-alpine build
src/wafp/targets/catalog/worklog/docker-compose.yml docker
  • mongo latest
test/fuzzers/fuzzers_catalog/example_fuzzer/Dockerfile docker
  • python 3.9-alpine build
test/targets/targets_catalog/example_target/Dockerfile docker
  • python 3.9-slim build
src/wafp/targets/catalog/cccatalog_api/Pipfile pypi
  • Django ==2.2.13
  • Pillow ==7.2.0
  • PyJWT ==1.7.1
  • aws-requests-auth ==0.4.3
  • boto3 ==1.15.11
  • deepdiff ==5.0.2
  • django-braces ==1.14.0
  • django-cors-headers ==3.5.0
  • django-oauth-toolkit ==1.1.2
  • django-redis ==4.12.1
  • django-sslserver ==0.22
  • django-storages ==1.10.1
  • django-uuslug ==1.2.0
  • djangorestframework ==3.11.1
  • djangorestframework-xml ==2.0.0
  • drf-yasg ==1.17.1
  • elasticsearch-dsl ==7.2.1
  • future ==0.18.2
  • gevent ==22.10.2
  • grequests ==0.6.0
  • hvac ==0.10.5
  • ipaddress ==1.0.23
  • piexif ==1.1.3
  • psycopg2-binary ==2.8.6
  • pytest-django ==3.9.0
  • python-xmp-toolkit ==2.0.1
  • python3-openid ==3.2.0
  • redlock-py ==1.0.8
  • requests-oauthlib ==1.3.0
  • wsgi-basic-auth ==1.1.0
src/wafp/targets/catalog/cccatalog_api/Pipfile.lock pypi
  • async-timeout ==4.0.2
  • attrs ==22.2.0
  • aws-requests-auth ==0.4.3
  • boto3 ==1.15.11
  • botocore ==1.18.18
  • certifi ==2022.12.7
  • charset-normalizer ==3.0.1
  • coreapi ==2.3.3
  • coreschema ==0.0.4
  • deepdiff ==5.0.2
  • defusedxml ==0.7.1
  • django ==2.2.13
  • django-braces ==1.14.0
  • django-cors-headers ==3.5.0
  • django-oauth-toolkit ==1.1.2
  • django-redis ==4.12.1
  • django-sslserver ==0.22
  • django-storages ==1.10.1
  • django-uuslug ==1.2.0
  • djangorestframework ==3.11.1
  • djangorestframework-xml ==2.0.0
  • drf-yasg ==1.17.1
  • elasticsearch ==7.17.8
  • elasticsearch-dsl ==7.2.1
  • exceptiongroup ==1.1.0
  • future ==0.18.2
  • gevent ==22.10.2
  • greenlet ==2.0.2
  • grequests ==0.6.0
  • hvac ==0.10.5
  • idna ==3.4
  • inflection ==0.5.1
  • iniconfig ==2.0.0
  • ipaddress ==1.0.23
  • itypes ==1.2.0
  • jinja2 ==3.1.2
  • jmespath ==0.10.0
  • markupsafe ==2.1.2
  • oauthlib ==3.2.2
  • ordered-set ==4.1.0
  • packaging ==23.0
  • piexif ==1.1.3
  • pillow ==7.2.0
  • pluggy ==1.0.0
  • psycopg2-binary ==2.8.6
  • pyjwt ==1.7.1
  • pytest ==7.2.1
  • pytest-django ==3.9.0
  • python-dateutil ==2.8.2
  • python-slugify ==7.0.0
  • python-xmp-toolkit ==2.0.1
  • python3-openid ==3.2.0
  • pytz ==2022.7.1
  • redis ==4.4.2
  • redlock-py ==1.0.8
  • requests ==2.28.2
  • requests-oauthlib ==1.3.0
  • ruamel.yaml ==0.17.21
  • ruamel.yaml.clib ==0.2.7
  • s3transfer ==0.3.7
  • setuptools ==67.0.0
  • six ==1.16.0
  • sqlparse ==0.4.3
  • text-unidecode ==1.3
  • tomli ==2.0.1
  • uritemplate ==4.1.1
  • urllib3 ==1.25.11
  • webob ==1.8.7
  • wsgi-basic-auth ==1.1.0
  • zope.event ==4.6
  • zope.interface ==5.5.2
src/wafp/targets/catalog/httpbin/requirements.txt pypi
  • Flask ==2.0.3
  • Jinja2 ==3.0.3
  • MarkupSafe ==2.0.1
  • PyYAML ==4.2b1
  • SecretStorage ==2.3.1
  • Werkzeug ==2.0.3
  • asn1crypto ==0.24.0
  • blinker ==1.5
  • brotlipy ==0.7.0
  • certifi ==2022.6.15
  • cffi ==1.11.5
  • click ==8.0.4
  • cryptography ==2.1.4
  • dataclasses ==0.8
  • decorator ==4.3.0
  • distlib ==0.3.5
  • filelock ==3.4.1
  • flasgger ==0.9.0
  • gevent ==1.3.4
  • greenlet ==0.4.13
  • gunicorn ==19.9.0
  • idna ==2.6
  • importlib-metadata ==4.8.3
  • importlib-resources ==5.4.0
  • itsdangerous ==2.0.1
  • jsonschema ==2.6.0
  • keyring ==10.6.0
  • keyrings.alt ==3.0
  • meinheld ==0.6.1
  • mistune ==0.8.3
  • pipenv ==2018.7.1
  • platformdirs ==2.4.0
  • pycparser ==2.18
  • pycrypto ==2.6.1
  • pygobject ==3.26.1
  • pyxdg ==0.25
  • raven ==6.10.0
  • sentry-sdk ==1.8.0
  • six ==1.11.0
  • typing-extensions ==4.1.1
  • urllib3 ==1.26.10
  • virtualenv ==20.15.1
  • virtualenv-clone ==0.5.7
  • zipp ==3.6.0
src/wafp/targets/catalog/jupyterhub/requirements.txt pypi
  • MarkupSafe ==1.1.1
  • Pygments ==2.12.0
  • Send2Trash ==1.8.0
  • argon2-cffi ==21.3.0
  • argon2-cffi-bindings ==21.2.0
  • asttokens ==2.0.5
  • backcall ==0.2.0
  • beautifulsoup4 ==4.11.1
  • bleach ==5.0.1
  • debugpy ==1.6.2
  • decorator ==5.1.1
  • defusedxml ==0.7.1
  • executing ==0.8.3
  • fastjsonschema ==2.16.1
  • ipykernel ==6.15.1
  • ipython ==8.4.0
  • jedi ==0.18.1
  • jupyter-client ==7.3.4
  • jupyter-core ==4.11.1
  • jupyterlab-pygments ==0.2.2
  • matplotlib-inline ==0.1.3
  • mistune ==0.8.4
  • nbclient ==0.6.6
  • nbconvert ==6.5.0
  • nbformat ==5.4.0
  • nest-asyncio ==1.5.5
  • notebook ==6.4.12
  • packaging ==21.3
  • pandocfilters ==1.5.0
  • parso ==0.8.3
  • pexpect ==4.8.0
  • pickleshare ==0.7.5
  • prompt-toolkit ==3.0.30
  • psutil ==5.9.1
  • ptyprocess ==0.7.0
  • pure-eval ==0.2.2
  • pycurl ==7.43.0.2
  • pyparsing ==3.0.9
  • python-dateutil ==2.8.2
  • pyzmq ==23.2.0
  • sentry-sdk ==1.8.0
  • soupsieve ==2.3.2.post1
  • stack-data ==0.3.0
  • terminado ==0.15.0
  • tinycss2 ==1.1.1
  • wcwidth ==0.2.5
  • webencodings ==0.5.1
src/wafp/targets/catalog/open_fec/requirements.txt pypi
  • Faker ==13.15.1
  • Flask ==1.1.1
  • Flask-Cors ==3.0.9
  • Flask-RESTful ==0.3.7
  • Flask-SQLAlchemy ==2.4.1
  • Flask-Script ==2.0.6
  • GitPython ==3.1.0
  • Jinja2 ==2.11.3
  • MarkupSafe ==1.1.1
  • PyYAML ==5.4.1
  • SQLAlchemy ==1.3.19
  • WebOb ==1.8.7
  • WebTest ==2.0.34
  • Werkzeug ==0.16.1
  • amqp ==2.6.1
  • aniso8601 ==9.0.1
  • apispec ==0.39.0
  • atomicwrites ==1.4.1
  • attrs ==21.4.0
  • beautifulsoup4 ==4.11.1
  • billiard ==3.6.4.0
  • blinker ==1.5
  • boto ==2.49.0
  • boto3 ==1.24.36
  • botocore ==1.27.36
  • bz2file ==0.98
  • celery ==4.3.0
  • celery-once ==3.0.0
  • certifi ==2020.11.8
  • cfenv ==0.5.2
  • chardet ==3.0.4
  • click ==8.1.3
  • codecov ==2.1.7
  • coverage ==6.4.2
  • decorator ==5.1.1
  • elasticsearch ==7.6.0
  • elasticsearch-dsl ==7.3.0
  • factory-boy ==2.8.1
  • flake8 ==4.0.1
  • flask-apispec ==0.7.0
  • furl ==2.1.3
  • gevent ==1.4.0
  • gitdb ==4.0.9
  • greenlet ==0.4.16
  • gunicorn ==19.10.0
  • icalendar ==4.0.2
  • idna ==2.8
  • importlib-metadata ==4.2.0
  • importlib-resources ==5.9.0
  • invoke ==0.15.0
  • itsdangerous ==1.1.0
  • jmespath ==1.0.1
  • jsonschema ==4.7.2
  • kombu ==4.6.3
  • marshmallow ==2.16.3
  • marshmallow-sqlalchemy ==0.15.0
  • mccabe ==0.6.1
  • more-itertools ==8.13.0
  • networkx ==1.11
  • nplusone ==0.8.0
  • openapi-schema-validator ==0.2.3
  • openapi-spec-validator ==0.4.0
  • orderedmultidict ==1.0.1
  • packaging ==21.3
  • pluggy ==0.13.1
  • prance ==0.20.0
  • psycopg2 ==2.9.3
  • psycopg2-binary ==2.7.4
  • py ==1.11.0
  • pycodestyle ==2.8.0
  • pyflakes ==2.4.0
  • pyparsing ==3.0.9
  • pyrsistent ==0.18.1
  • pytest ==5.2.0
  • pytest-cov ==2.5.1
  • pytest-flake8 ==1.0.6
  • python-dateutil ==2.8.1
  • pytz ==2022.1
  • redis ==3.2.0
  • requests ==2.22.0
  • requests-aws4auth ==1.0.0
  • s3transfer ==0.6.0
  • semver ==2.13.0
  • sentry-sdk ==1.8.0
  • six ==1.16.0
  • smart-open ==1.8.0
  • smmap ==5.0.0
  • soupsieve ==2.3.2.post1
  • sqlalchemy-postgres-copy ==0.3.0
  • typing-extensions ==4.3.0
  • ujson ==1.33
  • urllib3 ==1.25.11
  • vine ==1.3.0
  • waitress ==2.1.2
  • wcwidth ==0.2.5
  • webargs ==5.5.3
  • zipp ==3.8.1
src/wafp/targets/catalog/pulpcore/requirements.txt pypi
  • Django *
  • PyYAML >=5.1.1,<5.4.0
  • aiodns *
  • aiofiles ==0.6.0
  • aiohttp *
  • backoff *
  • django-currentuser *
  • django-filter *
  • django-guardian *
  • django-guid <3.0
  • django-import-export *
  • django-lifecycle *
  • djangorestframework *
  • djangorestframework-queryfields *
  • drf-access-policy *
  • drf-nested-routers ==0.92.1
  • drf-spectacular ==0.11.0
  • dynaconf *
  • gunicorn >=19.9,<20.1
  • jinja2 *
  • psycopg2 >=2.7,<2.9
  • pygtrie *
  • python-gnupg *
  • redis >=3.4.0
  • rq ==1.8.1
  • setuptools >=39.2.0
  • whitenoise >=5.0.0,<5.3.0
src/wafp/targets/catalog/restler_demo/requirements.txt pypi
  • Flask ==1.1.2
  • Flask-SQLAlchemy ==2.4.4
  • Jinja2 ==2.11.3
  • MarkupSafe ==1.1.1
  • SQLAlchemy ==1.3.24
  • Werkzeug ==0.16.0
  • aniso8601 ==9.0.1
  • attrs ==21.4.0
  • blinker ==1.5
  • certifi ==2022.6.15
  • click ==8.1.3
  • flask-restplus ==0.13.0
  • greenlet ==1.1.2
  • importlib-resources ==5.9.0
  • itsdangerous ==1.1.0
  • jsonschema ==4.7.2
  • pyrsistent ==0.18.1
  • pytz ==2022.1
  • sentry-sdk ==1.8.0
  • six ==1.16.0
  • urllib3 ==1.26.10
  • zipp ==3.8.1
src/wafp/targets/catalog/worklog/requirements.txt pypi
  • Flask ==1.0.2
  • Flask-Cors ==3.0.6
  • Jinja2 ==3.0.3
  • MarkupSafe ==2.1.1
  • PyYAML ==3.13
  • Werkzeug ==2.1.2
  • attrs ==21.4.0
  • blinker ==1.5
  • certifi ==2022.6.15
  • charset-normalizer ==2.1.0
  • click ==8.1.3
  • decorator ==4.3.0
  • docker ==3.5.0
  • docker-pycreds ==0.4.0
  • flasgger ==0.9.1
  • idna ==3.3
  • importlib-metadata ==4.12.0
  • importlib-resources ==5.9.0
  • itsdangerous ==2.0.1
  • jsonschema ==4.7.2
  • mistune ==2.0.4
  • pycrypto ==2.6.1
  • pymongo ==3.7.1
  • pyrsistent ==0.18.1
  • requests ==2.28.1
  • sentry-sdk ==1.8.0
  • simple-crypt ==4.1.7
  • six ==1.16.0
  • typing_extensions ==4.3.0
  • urllib3 ==1.26.10
  • websocket-client ==1.3.3
  • zipp ==3.8.1
src/wafp/fuzzers/catalog/api_fuzzer/docker-compose.yml docker
src/wafp/fuzzers/catalog/cats/docker-compose.yml docker
src/wafp/fuzzers/catalog/fuzz_lightyear/docker-compose.yml docker
src/wafp/fuzzers/catalog/fuzzy_swagger/docker-compose.yml docker
src/wafp/fuzzers/catalog/got_swag/docker-compose.yml docker
src/wafp/fuzzers/catalog/restler/docker-compose.yml docker
src/wafp/fuzzers/catalog/schemathesis/Dockerfile docker
  • schemathesis/schemathesis v3.19.5 build
src/wafp/fuzzers/catalog/swagger_conformance/docker-compose.yml docker
src/wafp/targets/catalog/age_of_empires_2_api/docker-compose.yml docker
src/wafp/targets/catalog/covid19_japan_web_api/docker-compose.yml docker
src/wafp/targets/catalog/httpbin/docker-compose.yml docker
src/wafp/targets/catalog/jupyter_server/docker-compose.yml docker
src/wafp/targets/catalog/jupyterhub/docker-compose.yml docker
src/wafp/targets/catalog/mailhog/docker-compose.yml docker
src/wafp/targets/catalog/opentopodata/docker-compose.yml docker
src/wafp/targets/catalog/otto_parser/docker-compose.yml docker
src/wafp/targets/catalog/restler_demo/docker-compose.yml docker
test/fuzzers/fuzzers_catalog/example_fuzzer/docker-compose.yml docker
test/targets/targets_catalog/example_target/docker-compose.yml docker
src/wafp/fuzzers/catalog/schemathesis/ablation-mutation-requirements.txt pypi
src/wafp/fuzzers/catalog/schemathesis/empty-requirements.txt pypi