From 43e2948965935337a0adfb191ea7bbe557de5827 Mon Sep 17 00:00:00 2001 From: Evan Richter Date: Fri, 17 Jun 2022 21:35:01 -0500 Subject: [PATCH] mayhem integration --- .github/workflows/mayhem.yml | 60 ++++++++++++++++++++++++++++++++++++ mayhem/.dockerignore | 3 ++ mayhem/Dockerfile | 26 ++++++++++++++++ mayhem/from_der.mayhemfile | 7 +++++ 4 files changed, 96 insertions(+) create mode 100644 .github/workflows/mayhem.yml create mode 100644 mayhem/.dockerignore create mode 100644 mayhem/Dockerfile create mode 100644 mayhem/from_der.mayhemfile diff --git a/.github/workflows/mayhem.yml b/.github/workflows/mayhem.yml new file mode 100644 index 000000000..30b4e434e --- /dev/null +++ b/.github/workflows/mayhem.yml @@ -0,0 +1,60 @@ +name: Mayhem +on: + push: + pull_request: + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build: + name: 'build mayhem fuzzing container' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Log in to the Container registry + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker image + uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + with: + context: . + file: mayhem/Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + outputs: + image: ${{ steps.meta.outputs.tags }} + + mayhem: + needs: build + name: 'fuzz ${{ matrix.mayhemfile }}' + runs-on: ubuntu-latest + strategy: + matrix: + mayhemfile: + - mayhem/from_der.mayhemfile + + steps: + - uses: actions/checkout@v2 + + - name: Start analysis for ${{ matrix.mayhemfile }} + uses: ForAllSecure/mcode-action@v1 + with: + mayhem-token: ${{ secrets.MAYHEM_TOKEN }} + args: --image ${{ needs.build.outputs.image }} --file ${{ matrix.mayhemfile }} --duration 300 + sarif-output: sarif diff --git a/mayhem/.dockerignore b/mayhem/.dockerignore new file mode 100644 index 000000000..078639e87 --- /dev/null +++ b/mayhem/.dockerignore @@ -0,0 +1,3 @@ +/target +.git +mayhem/Dockerfile diff --git a/mayhem/Dockerfile b/mayhem/Dockerfile new file mode 100644 index 000000000..cd3941349 --- /dev/null +++ b/mayhem/Dockerfile @@ -0,0 +1,26 @@ +# Build Stage +FROM ghcr.io/evanrichter/cargo-fuzz:latest as builder + +RUN git clone --depth=1 https://github.com/openssl/openssl.git +RUN cp -r openssl/fuzz/corpora/x509 /testsuite + +## Add source code to the build stage. +ADD . /src +WORKDIR /src + +RUN echo building instrumented harnesses && \ + bash -c "pushd x509-certificate/fuzz && cargo +nightly -Z sparse-registry fuzz build && popd" && \ + mv x509-certificate/fuzz/target/x86_64-unknown-linux-gnu/release/from_der /from_der && \ + echo done + +RUN echo building non-instrumented harnesses && \ + export RUSTFLAGS="--cfg fuzzing -Clink-dead-code -Cdebug-assertions -C codegen-units=1" && \ + bash -c "pushd x509-certificate/fuzz && cargo +nightly -Z sparse-registry build --release && popd" && \ + mv x509-certificate/fuzz/target/release/from_der /from_der_no_inst && \ + echo done + +# Package Stage +FROM rustlang/rust:nightly + +COPY --from=builder /from_der /from_der_no_inst / +COPY --from=builder /testsuite/ /testsuite/ diff --git a/mayhem/from_der.mayhemfile b/mayhem/from_der.mayhemfile new file mode 100644 index 000000000..6c3d6e211 --- /dev/null +++ b/mayhem/from_der.mayhemfile @@ -0,0 +1,7 @@ +project: PyOxidizer +target: from-der + +cmds: + - cmd: /from_der + - cmd: /from_der_no_inst @@ + libfuzzer: false