fix(security): close fail-open paths in four example verifiers, add ClusterFuzzLite - #128
Merged
Merged
Conversation
…rFuzzLite controller.py accepted a NaN speed and let OverflowError escape. validate_artifacts.py checked everything with assert, so python -O passed tampered artifacts, and it accepted unsigned top-level manifest fields. verify_purchase.py accepted non-positive or non-integer amounts, a NaN ceiling, string allow-lists and evidence from a runtime other than the grant's delegate. verify_receipts.py accepted signatures with junk base64 characters and crashed on malformed fixtures. The cA2A scenario verified chains without a trusted root. Each has a regression test. README fixes: the attestation gate in healthcare and financial-services fires only on "unknown", not on software-only; ards no longer says every TRACE record proves a TEE run; ca2a documents the root check. Adds ClusterFuzzLite with three targets (Scorecard FuzzingID #26) and a hashed lock for the receipts CI job (PinnedDependencies #49). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Every bug below was reproduced with a failing test before the fix.
industrial-embodied-ai
controller.py: a NaNmax_speed_mpscompared false against both bounds and the controller accepted the motion.json.loadstakes a bareNaN, so it arrives over the wire. An integer past the float range raisedOverflowErrorinstead ofSafetyRejected. Tests:test_non_finite_speed_is_rejected,test_speed_too_large_for_float_is_rejected.validate_artifacts.py: every check was anassert. Underpython -Oa tamperedsystem-prompt.txtprinted "valid" on all four lines. Now explicit checks, and every top-level manifest field must be insigned_fields(an injected unsigned field used to pass). Checked by hand with-Oagainst a tampered copy;test_validate_artifacts.pypins the no-assert property.agentic-commerce-accountability
verify_purchase.pyaccepted a negative, zero, float or boolean amount, a NaN ceiling, a string allow-list (membership became a substring test), and runtime evidence from an agent other than the grant'sdelegate. Four new tests.embodied-action-receipts
verify_receipts.py: the lenient base64 decoder let!!!!or extra padding inside a signature still verify. Malformed fixtures escaped asKeyError,TypeErrororbinascii.Error; they now returninvalid/malformed. Three new tests.ca2a-delegation called
verify_chainwithouttrusted_root_issuers, which the library documents as structural only. A chain an attacker signs from their own key passed. The scenario now pins the platform root. Test:test_chain_from_an_untrusted_root_is_rejected.Docs. The healthcare and financial-services READMEs said PHI and
mnpidata only flow through attested runtimes. The Cedar rule fires only onattestation_platform == "unknown", and the committed dev-mode records show four PHI calls allowed onsoftware-only. The text now says what the rule does.ards/README.mdno longer says every TRACE record proves a TEE run.Scorecard
.clusterfuzzlite/with three targets (receipts, purchase, controller), seeded from the committed fixtures. Before the fixes they find the controller overflow, the purchase acceptances and the receipt crashes; after, 23,828 driven inputs are clean. Atheris has no Windows wheel, so the local run droveTestOneInputthrough a shim.requirements/receipts-tests.txt.Tests: 49 before, 60 after, all passing across the seven unittest jobs. actionlint 1.7.12 clean.
Generated with Claude Code