Fix/surface oss-fuzz:42535468's missing libcrypto.so.1.1 (fixes #41) - #42
Merged
Merged
Conversation
… of scoring it as a false negative (fixes #41) oss-fuzz:42535468's fuzz_pkcs15init needs libcrypto.so.1.1, which its reproduction sandbox doesn't have; every attempt fails at the dynamic-linker stage before the target ever runs, so score() currently reports a silent false_negative. score() now detects that class from attempts' self-test.json stderr and returns an excluded/environmentBroken signal instead.
|
Current version of PR was reviewed by /review-bugbot on Jul 2, 14:49 GMT+2. It flagged 0 findings. Bugbot on commit |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Investigated all three options in #41 for
oss-fuzz:42535468(OpenSC)'s missinglibcrypto.so.1.1. Options 1 and 2 are not actionable from benchpress's own scope (details below, backed by live verification) — option 3 is implemented.Investigation findings
Option 1 (install a
libssl1.1compat package into the running container atstandUpTarget()time): not feasible.standUpTarget()onlydocker pulls the-vul/-fiximages as artifacts — it never keeps a container running. The two places this adapter does execute anything against an image are (a) the manualverify-cybergym-standup.tssmoke test and (b)resolveFixCommitSha()'s throwaway, never-started container (docker create/docker cp/docker rm, no execution). There is no long-lived target container in this repo's control for a contender's build+run step to reuse or patch. More fundamentally: AutoBrin's reproduction is source-first by design (.agents/skills/autobrin-contributor-poc/SKILL.mdin autobrin-flue:repro.sh"builds the minimal set of target sources... into its own working directory... then runs the resulting binary" — it never touches the pulled Docker image at all). The dynamic-linker failure happens in whatever sandbox runsrepro.sh(autobrin-flue's own reproduction pipeline, entirely outside this adapter's provisioning), not in the pulled image.Option 2 (a differently-tagged upstream image): not applicable. I live-verified
cybergym/oss-fuzz:42535468-vulis not broken.docker run cybergym/oss-fuzz:42535468-vul /out/fuzz_pkcs15init -help=1executes cleanly (exit 0, full libFuzzer help output);libcrypto.so.1.1is present and correctly resolved (ldd/dpkg -Sboth confirmlibssl1.1:amd64is installed in the image). I also ran this repo's ownscripts/verify-cybergym-standup.ts oss-fuzz:42535468end-to-end for real: it pulls both images, extracts the real HF source, and replays the reference PoC —vulCrashed=true fixSilent=true crashTypeMatch=true(vulexit 1 / AddressSanitizer heap-buffer-overflow,fixexit 0). The dockerized build envs this adapter owns are completely healthy; a different image tag would change nothing, since these images were never the execution surface for the actual failure.Root cause (confirmed against real production evidence in
superagent-ai/autobrin-flue#190): AutoBrin's contributor builds+runs OpenSC's fuzz harness from the plain extracted source (workspace/target/src-vul/opensc/...—src-vulis literally the HF tarball's own top-level folder name, confirmed live by the standup script's own output) in whatever sandbox is running the engagement. That sandbox lackslibcrypto.so.1.1, so every attempt fails identically at the dynamic-linker stage. The evaluator stage already correctly rejects these attempts (per #190's own account), which meansfindConfirmedAttempts()inscore.tsfinds zero confirmed attempts — and today, that unconditionally scores asfalse_negative, indistinguishable from a genuine miss.Option 3 (detect and surface distinctly): implemented.
findEnvironmentBrokenAttempts()inscore.tsreads the rawstderr_tailtext of every attempt'sself-test.json(written by autobrin-flue'srunSelfTest()) for the glibc dynamic linker's own fixed error text (error while loading shared libraries: ... cannot open shared object file) — never the self-test's ownstatus/passedverdict, so this is correct independent of whether #190's self-test classifier fix has landed. It only fires when every attempt that reached the self-test stage shows this exact signature (conservative: a real, unrelated miss sitting alongside a flaky environment failure is never misclassified). When it fires,scoreCyberGymClaim()returns anexcludedsignal taggedenvironmentBroken: truewith the affected attempt names and a link back to this issue, instead offalse_negative.Change
src/benchmarks/cybergym/score.ts: newfindEnvironmentBrokenAttempts(), wired intoscoreCyberGymClaim()'s zero-confirmed-attempts branch. Small refactor (listAttemptDirs()) shared with the existingfindConfirmedAttempts(), no behavior change there.src/benchmarks/cybergym/README.md: documents the new "Broken target environments" policy and why options 1/2 don't apply.tests/cybergym-score.test.ts: 9 new tests, including one using the exact realstderr_tailtext from #190's production evidence, plus a mixed-evidence case proving a genuine miss still scores asfalse_negative.Live verification
Pulled
cybergym/oss-fuzz:42535468-vul/-fixfor real and ran both manualdocker runchecks and this repo's ownscripts/verify-cybergym-standup.ts oss-fuzz:42535468end-to-end (real HF download + Docker pulls + differential PoC replay) — full pass, images healthy. Docker images and.cache/removed afterward; no leftover containers.Test plan
npm run validate(typecheck + full suite) green — 281/281 tests passing (9 new)oss-fuzz:42535468images (see above)