You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Go, Rust and native binaries: inventory from build metadata, hits via uprobes #76
Part of #51. Go, Rust and other compiled binaries have no runtime to hook into, so this probe works differently: most of it runs from the sensor (#67), outside the app, with no app change.
Go: read the module list embedded in the binary (the data behind go version -m / debug.ReadBuildInfo) from the running process's executable (/proc/<pid>/exe on Linux, or the image path elsewhere).
Rust: read the dependency list that cargo auditable embeds. Without it, report inventory: unavailable rather than guessing.
Function hits, Linux only, opt-in:
The sensor attaches eBPF uprobes to the watched symbols (OSV Go advisories list symbols reliably; Build a vulnerable-function watchlist from advisories #52 notation golang.org/x/net/html.Parse). Each probe only increments a counter keyed by symbol, and grabs a user stack on the first hit. It never reads registers holding arguments.
No uretprobes, because Go stacks move.
Needs CAP_BPF and CAP_PERFMON, and to see the app's processes: a host daemon, or a sidecar with shareProcessNamespace: true. Document this clearly, and fall back to inventory-only when the capabilities are missing.
Routes (#69), opt-in library: a small secfoo-probe-go middleware for net/http, chi, gin and echo. It records the route template and auth state and sends through #73. The same idea applies to Rust (tower layer for axum) as a follow-up.
Done when: a Go sample app with a vulnerable dependency shows Loaded with no app change on Linux, macOS and Windows; uprobe mode reports Executed in a Linux CI job; and the middleware passes the #73 conformance kit.
Activity