Skip to content

Add recursive final-bundle Mach-O audit - #343

Merged
wieslawsoltes merged 3 commits into
mainfrom
feature/recursive-macho-audit-328
Sep 18, 2026
Merged

wieslawsoltes merged 3 commits into
mainfrom
feature/recursive-macho-audit-328

Conversation

@wieslawsoltes

Copy link
Copy Markdown
Collaborator

The installed macOS packager only checked its known executable and WebGPU library, so native extensions or other Mach-O files could enter the final bundle with the wrong architecture, deployment target, install name, rpath, or unresolved dependency.

This adds a product-neutral installed SDK verifier that recursively inventories the final bundle without following symlinks, audits every architecture slice and dependency path, rejects unsafe paths and concurrent mutation, and emits bounded deterministic JSON evidence before the outer bundle signature. The versioned schema and tools-only install profile make the verifier reusable by external packagers.

Validation:

  • 15 portable adversarial contracts, including native extensions, fat/wrong architecture, malformed load commands, Unicode/case collisions, escaping/dangling/absolute/internal symlinks, special entries, mutation, and exact 10,000-entry time/FD/RSS/evidence bounds
  • real installed-SDK macOS consumer compiles a host, dylib, and .node bundle, completes 10 deterministic audits in about 1.6 seconds with 2,510-byte evidence, and rejects a mutated dangling dependency
  • dedicated Linux, Windows, and self-hosted macOS workflow

Closes #328

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.

Recursively audit packaged Mach-O ABI and dependency closure

1 participant