Catch malicious software before you install it.

app-audit runs candidate applications in an instrumented sandbox, watches everything they do, and produces a defensible report that supports your approve / reject decision. Zero unknowns. All evidence.

See the demo → 16 famous compromises caught Enterprise-ready today

285 unit tests · 43 corpus assertions · 16 published audit reports for historical compromises · audits 18 formats: ELF, PE, container images, npm, PyPI, NuGet, Cargo, RubyGems, Composer, JARs, Go modules, Helm, Conda, Hex, VSCode / Chrome / Firefox extensions · SSO / RBAC / Slack / Jira · all green in CI

Enterprise-ready today. Not "on the roadmap." Not "contact sales." Shipping in v1.9.
18 submission formats SSO behind any OAuth2 proxy RBAC (3 roles) API tokens Meta-audit log → NIST 800-53 Slack + Jira + webhooks Zero new deps
See the enterprise stack →

Every week, somebody wants to install something new.

A vendor's marketing page is not evidence. A privacy policy is not evidence. Behavior under instrumentation is evidence.

Static analysis

Looks at the binary on disk. Doesn't see what it does at runtime.

Insufficient

Package scanners

Catches known-CVE deps in the supply chain. Doesn't see what the binary actually transmits.

Insufficient

app-audit

Runs the candidate. Observes every syscall, every TLS payload (decrypted), every network destination. Produces a signed report with evidence.

Defensible

How it works

  1. 1

    Submit a binary

    Upload a binary, container image, or package through the web UI. Or paste a URL — the system fetches it for you. 18 formats auto-detected: Linux ELF, Windows .exe, Docker / OCI container images, npm .tgz, PyPI sdist + wheel, NuGet .nupkg, Cargo .crate, RubyGems .gem, Composer, Maven JAR, Go modules, Helm charts, Conda packages, Hex packages, VS Code / Chrome / Firefox extensions. Detection is structural — we peek inside archives for ecosystem-specific manifest files rather than trusting filename extensions. Each format routes through the appropriate audit path: install commands run under instrumentation for npm / PyPI / Maven JAR, with broader runtime support landing per release.

  2. 2

    Sandbox + instrument

    Run the binary in a privileged Linux container with eBPF tracepoints on every syscall, uprobes on libssl + Go's crypto/tls (capturing plaintext before encryption), and a TLS-terminating proxy at the container egress (catches TLS libraries we don't have hooks for). 18 unique-per-run honeytokens are planted in ~/.aws/credentials, ~/.ssh/id_rsa, browser cookie stores, env vars.

  3. 3

    Detect

    Every event flows through 13 streaming detectors + 3 post-enrichment detectors: HoneytokenHit (smoking gun — a planted token observed in outbound traffic), VendorDiff (unauthorized destination), SandboxDetection (probing for VM markers), HostFingerprint, TimeManipulation, Persistence (write-shape opens of cron / systemd / shell rc files), PII (Luhn-validated CC numbers, JWT, email), Beaconing (regular-interval phone-home), CryptoMining (Stratum-port connects), KnownBadASN, KnownBadDomain, GeoPolicy.

  4. 4

    Report

    Markdown + HTML report with a recommended decision: REJECT / REVIEW / APPROVE. Severity-grouped findings with evidence references back to the JSONL event log. Network-destinations table enriched with PTR / ASN / country. SHA-256 sidecar for tamper-evident sign-off. Auditor signs off through the web UI; baseline saved for re-audit on the next vendor release.

16 famous compromises — every one caught in CI

Synthetic clones modeled after public disclosures. The audit pipeline positively identifies each one (43-assertion test suite passing). Click any tile to read the actual REJECT report.

Highlighted tiles are HoneytokenHit findings — the strongest possible signal. The candidate read our planted credential and transmitted it. There's no benign interpretation.

Run a simulated audit

Pick a candidate and watch the audit pipeline identify it. Each scenario reproduces a real-world attack pattern; the verdicts and findings shown are exactly what the production tool produces against the synthetic clone.

Choose a candidate to audit:

Pick a candidate above to begin.

18 formats. One pipeline. One report shape.

Most security tools are platform- or ecosystem-specific — a binary scanner here, an npm scanner there, a container scanner over there. app-audit is one pipeline: upload anything, get the same defensible REJECT/REVIEW/APPROVE report. Detection is structural (we peek inside archives for ecosystem manifests), not extension-based, so a mislabelled file gets routed correctly anyway.

Linux ELF

Direct exec under eBPF

Full dynamic audit

Windows PE (.exe)

Wrapped in Wine

Full dynamic audit

Docker / OCI image

Sibling container, shared net ns

Full dynamic audit

npm package (.tgz)

npm install under instrumentation

Postinstall hooks audited

PyPI sdist (.tar.gz)

pip install under instrumentation

setup.py audited

PyPI wheel (.whl)

pip install + force-import

__init__ audited

Maven JAR

java -jar under instrumentation

Full dynamic audit

Helm chart (.tgz)

helm template render

Static + render audit

NuGet (.nupkg)

Extract + scan

Static — dotnet runtime in v1.13

Cargo crate

Extract + scan

Static — rustc in v1.14

RubyGem (.gem)

Extract + scan

Static — gem runtime in v1.13

Composer (.zip)

Extract + scan

Static — PHP in v1.13

Go module

Extract + scan

Static — Go runtime in v1.13

Conda package

Extract + scan (gzip / bzip2)

Static

Hex (Erlang/Elixir)

Extract + scan

Static

VS Code (.vsix)

Extract + manifest analysis

Static — headless harness in v1.13

Chrome (.crx)

Cr24 strip → ZIP scan

Static — headless Chromium in v1.13

Firefox (.xpi)

Extract + manifest analysis

Static — headless Firefox in v1.13

All formats produce the same Markdown + HTML report shape — Recommended decision, Summary, severity-grouped findings, evidence, coverage caveats. The web UI's renderer doesn't need a special case per ecosystem.

Enterprise-ready out of the box, not on a roadmap.

Most security tools call themselves "enterprise" and mean we plan to support SSO eventually. app-audit ships the full enterprise-deployment plumbing today, in the open, tested in CI — SSO behind any OAuth2/OIDC proxy you already run, three-role RBAC enforced per handler, hashed API tokens, append-only meta-audit log, Slack + Jira + generic webhook fanout. Zero new third-party dependencies in the entire enterprise layer — your security team can audit it in an afternoon.

SSO & RBAC

Sits behind any OAuth2 / OIDC reverse proxy (oauth2-proxy, Pomerium, Authentik, Keycloak). Identity is forwarded via standard X-Forwarded-Email / X-Forwarded-Groups headers. Three roles map to handler privileges: submitter, auditor, approver. Group membership at the IdP drives role assignment.

Production-ready

API tokens

Issue revocable API tokens for CI/CD pipelines and dashboards. Tokens are stored hashed (SHA-256); the plaintext is shown once. Manage with audit-token create / list / revoke. Use as Authorization: Bearer aat_… against the JSON API.

Production-ready

Meta-audit log

Every request through the server — submission, view, sign-off, policy view — lands in an append-only JSONL log with actor, source, roles, action, target, status, IP. Maps directly to NIST 800-53 AU-2/AU-3 audit-event controls.

Production-ready

Slack notifications

On every REJECT verdict, post a coloured attachment to your security channel: target, decision, finding counts, link to the full report. Configurable per event type — fire on all runs, only rejected runs, or only on sign-off.

Production-ready

Jira ticket creation

Auto-create a Jira issue for each REJECT verdict with the finding evidence in the description. Configurable project key, issue type, and assignee. Uses Atlassian REST API v3 — no plugin install on the Jira side.

Production-ready

Generic webhooks

Multiple destinations, per-event filters, custom headers (HMAC signing keys, auth tokens). Subscribe ServiceNow, PagerDuty, custom workflow engines, or your own SIEM intake. JSON payload includes the canonical Event shape — same data Slack and Jira receive.

Production-ready

Two ways to deploy

Cloud-hosted (SaaS)

Subscribe and log in

  • We host the audit infrastructure
  • You submit binaries via web UI, get signed reports
  • Tenant-isolated; binaries never persist beyond the audit window
  • Threat-intel feeds maintained for you
  • Per-audit billing, no infra to operate

Best for teams that want fast answers without standing up sandboxing infra.

Subscribe →

Self-hosted

Run on your own infrastructure

  • Same audit pipeline, same UI, same report format
  • Every byte stays on your network
  • Docker, Kubernetes, or bare metal
  • Source-available; commercial use needs a license
  • Air-gapped / regulated environments supported

Best for HIPAA, PCI, FedRAMP, or other settings where binaries can't leave your network.

Get deployment instructions →

Stop trusting marketing pages.

Submit a binary. Get evidence. Sign off with confidence.