Files
cairnobs/hack/windows-fixture
jcoffey-dev 200f801e2c Clear the Dependabot findings
Dependabot alerts were switched on for this repo today and reported 12 open
findings. Ten are fixed here; the other two are addressed below.

gRPC 1.83.0 -> 1.83.1, in all nine modules that require it. This is
GHSA-vp52-pcj8-j9qc / CVE-2026-84304, heap memory exhaustion via HTTP/2 DATA
frame fragmentation, affecting <= 1.83.0. It matters more than the version
delta suggests: ingest/ is a gRPC listener deliberately exposed to the internet
on :4317, so a remote OOM is reachable. mTLS narrows that to holders of a
client certificate, which is why this was not an emergency, but the fix is one
patch release away and there is no reason to carry it.

golang.org/x/oauth2 0.21.0 -> 0.27.0 in deploy/operator, an indirect
dependency (GHSA-6v2p-p543-phr9). enterprise/ was already past it at 0.36.0.

npm cookie 0.6.0 -> 0.7.2, via an overrides entry rather than a dependency
bump. @sveltejs/kit requires ^0.6.0 and still does at 2.70.3, the latest
release, so there is no version of kit that resolves this on its own -- an
override is the only route that does not involve waiting on upstream.

Three incidental changes came out of `go mod tidy` and are not mine:
genproto/googleapis/rpc moved forward as a transitive of the new grpc; pgx/v5
was reclassified from indirect to direct in enterprise/, which is simply
correct, since audit.go and cmd/enterprise-auth import it; and the proto
replace directive shuffled between require blocks at the same version.

The twelfth finding, lru (GHSA-rhfx-m35p-ff5j), is not fixed and is not
fixable here -- see the note in the pull request. It is CVSS 0, a Stacked
Borrows soundness issue in IterMut, and reaching a patched version means
tantivy 0.22 -> 0.26, which is a search engine migration rather than a
dependency bump.

Verified: all ten Go modules build, 40 test packages pass, the web app builds
and svelte-check reports 0 errors across 288 files.
2026-09-03 11:12:35 -07:00
..
2026-09-03 11:12:35 -07:00
2026-09-03 11:12:35 -07:00
2026-08-21 20:53:32 -07:00

windows-fixture

Sends synthetic Windows Event Log-shaped PushBatchRequests directly to ingest's gRPC endpoint, bypassing the actual Windows agent entirely.

What this does and doesn't test

Tests: can the pipeline (ingest → ClickHouse → search → api → web) correctly handle Windows-shaped data — the winevt.* attributes, the record_id join between SQL and full-text search, Windows severity levels mapping onto the right column values? This is exactly what's automatable without a Windows host, and it's genuinely exercised: five realistic, well-known Windows events (failed/successful logon, a service state change, an application crash, an unexpected reboot) with real EventIDs and providers.

Does not test: whether the real Windows agent's EvtSubscribe/ETW integration actually works, whether Windows service registration succeeds, whether ETW session creation/provider enabling works. Those are fundamentally different questions — they need a real or virtualized Windows host, and nothing here pretends otherwise. See /docs/phase-1-runbook.md for exactly which is which.

Running

Requires the docker-compose stack up (ingest reachable, dev certs generated):

cd hack/windows-fixture
go run . --count 5
sent 5 synthetic Windows-shaped records, ingest accepted 5
  [SEVERITY_WARN] An account failed to log on. (event_id=4625 provider=Microsoft-Windows-Security-Auditing)
  ...

Then confirm both query paths see it:

curl -s -X POST http://localhost:8080/query -H 'Content-Type: application/json' \
  -d '{"sql": "SELECT host, severity, message, attributes['"'"'winevt.event_id'"'"'] AS event_id FROM logs WHERE host = '"'"'WIN-FIXTURE-01'"'"' ORDER BY timestamp DESC"}'

curl -s -X POST http://localhost:8080/search -H 'Content-Type: application/json' \
  -d '{"query": "notepad"}'

Flags: --addr (default localhost:4317), --ca/--cert/--key (default to ../dev-certs/out/{ca,client,client-key}.pem), --count (default 5, cycles through the fixed event list if higher).