Security
waxcut parses untrusted, attacker-controllable binary input (arbitrary MP3 files) with no external decoder in the loop, so the parser itself is the attack surface. Here's how that risk is managed, and how to report a problem.
Reporting a vulnerability
Please report security vulnerabilities privately using GitHub's private vulnerability reporting rather than filing a public issue.
You should receive an initial response within 14 days. If the report is confirmed, a fix will be prepared and a security advisory published once a patched release is available.
waxcut is pre-1.0, and only the latest released version is supported with security fixes — see SECURITY.md in the repository for the current policy.
Continuous fuzzing
The frame parser is fuzzed continuously with
ClusterFuzzLite,
via the
cflite_pr.yml
workflow. Every pull request is fuzzed against the parsing entry points with
malformed and adversarial byte sequences — truncated headers, corrupted
sync words, bogus bitrate/sample-rate indices, malformed ID3v2/Xing/Info/VBRI
tags — looking for crashes, hangs, or memory issues rather than correctness
per se. This matters specifically because load_audio_stream and
scan_frames read raw, untrusted bytes directly (offsets, lengths, and tag
fields all come from attacker-controlled header bits).
Supply-chain and process posture
waxcut's security posture is checked and scored by two independent, automated programs:
- OpenSSF Scorecard — evaluates the repository against a set of automated security health checks (branch protection, dependency pinning, CI configuration, and more) and publishes a score.
- OpenSSF Best Practices — a self-assessed but publicly verifiable checklist covering the OpenSSF Best Practices Badge criteria (change control, quality, security). waxcut is currently at 100% passing.
Ordinary CI — build, lint, and the full test suite, including the
mutagen/ffmpeg cross-validation described in
How It Works — runs on every pull request
via the ci.yml
workflow.