Skip to content

ci: fuzz every libfuzzer target, not just three#14

Merged
0xEthamin merged 1 commit into
mainfrom
ci/fuzz-all-targets
Jun 17, 2026
Merged

ci: fuzz every libfuzzer target, not just three#14
0xEthamin merged 1 commit into
mainfrom
ci/fuzz-all-targets

Conversation

@0xEthamin

Copy link
Copy Markdown
Member

The fuzz job and the local ci-local.sh mirror both looped over a hardcoded list of three targets (parse_l2_response, decrypt_l3_result, parse_handshake_resp). Three attacker-facing decoders added later were never added to that list, so CI fuzzed none of them on any push or weekly run. The cert-store STPUB parser, the X.509 chain verifier, and the firmware-image blob decoder are exactly the inputs an attacker controls, so leaving them unfuzzed defeats the purpose of the job.

Enumerate the targets with cargo fuzz list instead of naming them, in both the workflow and the local script. All six targets now run, and any target added in the future is picked up automatically without touching the CI, which is the class of drift that caused this gap.

Per-target time is unchanged (60 seconds on push, 900 on the weekly schedule), so a push now spends about six minutes in the fuzz job and the weekly run about ninety. All six targets run crash free locally.

The fuzz job and the local ci-local.sh mirror both looped over a hardcoded list
of three targets (parse_l2_response, decrypt_l3_result, parse_handshake_resp).
Three attacker-facing decoders added later were never added to that list, so CI
fuzzed none of them on any push or weekly run. The cert-store STPUB parser, the
X.509 chain verifier, and the firmware-image blob decoder are exactly the inputs
an attacker controls, so leaving them unfuzzed defeats the purpose of the job.

Enumerate the targets with cargo fuzz list instead of naming them, in both the
workflow and the local script. All six targets now run, and any target added in
the future is picked up automatically without touching the CI, which is the
class of drift that caused this gap.

Per-target time is unchanged (60 seconds on push, 900 on the weekly schedule), so
a push now spends about six minutes in the fuzz job and the weekly run about
ninety. All six targets run crash free locally.
@0xEthamin 0xEthamin merged commit 496a2fc into main Jun 17, 2026
16 checks passed
@0xEthamin 0xEthamin deleted the ci/fuzz-all-targets branch June 17, 2026 20:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant