Skip to content

v0.33.0

Latest

Choose a tag to compare

@github-actions github-actions released this 24 Jul 07:35

Added

  • Claude Code CLI as a text AI provider — subscription auth, no API key needed; drives synthesis, ask, deep pass and every other text-AI feature.
  • Codex CLI as a text AI provider — ambient auth, no API key needed; alternative to Claude Code CLI for text-AI work.
  • Deep Pass — full AI coverage of large, multi-host cases (#204) — analyst-triggered batched read of every graded event at a chosen severity floor, with a per-case cost/coverage preview before spending, run/cancel controls, and a dedicated dashboard section.
  • Help icon in the toolbar — opens the online user manual in a new tab.
  • Time scope for Velociraptor triage bundles — bound collection at the source to All time / last 24h-7d-30d-90d / a custom UTC range (#186).
  • Assignment & workflow status for findings — assign an analyst and set a triage status (New/In progress/In review/Resolved) per finding, survives re-synthesis (closes #87).
  • Hashed manifest in redacted report exportsexport-manifest.json with per-file sha256 for integrity verification (closes #79).
  • Time-bound graph filtering — Assets & IoC Graph / Evidence Chain honour the active timeline time filter (closes #83).
  • Kill-chain overlay on the Evidence Chain graph — recolour nodes by dominant ATT&CK tactic along the kill chain (closes #93).
  • Structured uncertainty ledger — synthesis separates confirmed/inferred/speculated/unknown claims; new dashboard section + report table (closes #73).
  • Login Graph — interactive Timesketch-style account→host logon graph from the super-timeline (#144).
  • Entity merging for duplicate assets/IOCs — fold duplicates onto a canonical node/indicator, reversible (closes #82).
  • Starred-events review workflow — server-side stars, whole-timeline starred filter, AI "Starred report" and "Summarize view" buttons.

Changed

  • Synthesis groups repeated detections; default event cap raised 300→600 (DFIR_AI_SYNTH_MAX_EVENTS) — full AI coverage of a detection-heavy import instead of just its first 300 rows; tunable via DFIR_SYNTH_GROUP, DFIR_SYNTH_GROUP_GAP_SECONDS, DFIR_SYNTH_GROUP_MIN_REPEATS.
  • Info-severity events no longer take synthesis prompt seats — frees budget for graded detections (DFIR_SYNTH_INCLUDE_INFO=1 restores the old behaviour).
  • Assets & IoC Graph and Evidence Chain now share the Login Graph's interactive Cytoscape view — same 5 layouts, live filter, fullscreen, PNG export, replacing the old static/bespoke layouts.
  • Velociraptor artifact catalog cached for 45s — avoids spawning the CLI on every interactive picker read.
  • Screenshot/vision AI vars renamed DFIR_AI_*DFIR_VISION_* — legacy names still work as a fallback.
  • User manual documents every AI run separately — one page per AI feature: what it's for, when to use it, which env vars control it.

Security

  • Web pages could drive the companion API via wildcard CORS (#211) — now trusts only the capture extension, loopback, the dashboard's own origin, or DFIR_ALLOWED_ORIGINS.
  • Live WebSocket subscriptions bypassed the case password (#212) — upgrades are now authorized before the handshake completes.
  • Template/view/bundle ids could escape their folder via path traversal (#213) — ids are now allowlisted and resolved paths verified to stay inside their store.
  • A malicious IP in imported evidence could run code in the dashboard (XSS) (#217) — IPs now travel as data attributes, not inline onclick strings.

Fixed

  • One unsendable capture no longer blocks every later one (#215) — the extension's offline queue now discards permanently-rejected captures instead of stalling on them.
  • The extension can be type-checked again, and CI now does it (#218) — @types/node added as a direct dependency; npm run typecheck runs in CI.
  • Concurrent ingestion no longer overwrites evidence (#214) — sequence-number allocation is serialized per case; evidence writes are create-exclusive.
  • Comments, tags, notebook entries and pins no longer vanish under concurrent edits (#216) — each store now serializes its own per-case critical section.
  • The AI status pill now says a deep pass is running, with live batch progress instead of reporting idle.
  • Claude Code provider: a long answer that hit the output cap no longer poisons the JSON parse — the continuation is stitched from the stream (not parsed as the tail alone), and an abandoned-and-rewritten retry is told apart from a valid continuation by which one actually parses.
  • A deep pass on a closed or archived case is refused instead of rewriting it (#204), matching the existing /synthesize lifecycle guard.
  • A MISP connectivity failure now names the likely cause (bad scheme, DNS, TLS, cert, auth) instead of just the raw HTTP status.
  • "Collect now" on an already-collecting hunt is coalesced into a follow-up pass instead of being silently discarded.
  • Saving an integration setting now takes effect without a restart/settings/reload and Settings → Save rebuild the live client, not just the environment.
  • Synthesis no longer sends an anchors-only prompt when Critical/High events exceed the event budget — earliest activity stays represented so the story keeps a beginning.
  • POST /bundles was silently dropping several fields on save (timeoutSeconds, expirySeconds, params, filters, superTimelineOnly), which could misroute a bundle's output.
  • Very large cases no longer fail with an opaque error, and save ~26% smallerinvestigation.json is now written compact, with an actionable error past the ~512MB load ceiling.
  • Text AI features no longer require the screenshot/vision provider — they now run off any configured synthesis provider (DFIR_AI_SYNTH_PROVIDER).