Skip to content

engine: Varpulis at 9e92c0b, the fixes found converting Sigma - #2

Merged
cpoder merged 1 commit into
masterfrom
engine/varpulis-sigma-fixes
Sep 23, 2026
Merged

cpoder merged 1 commit into
masterfrom
engine/varpulis-sigma-fixes

Conversation

@cpoder

@cpoder cpoder commented Sep 23, 2026

Copy link
Copy Markdown
Owner

Moves detect units to the Varpulis engine at varpulis/varpulis main after #277, #279, #281 and #282 (from 8bbeffc). What changes for a unit, all in CHANGELOG [Unreleased]:

  • Correctness. A -> all B -> C no longer matches before C (the brute-force example alerted on failed logins alone); .stnm() keeps an event from opening a second run (.stnm().longest() = one alert per attack); a condition on a field the event does not carry is false in .where() as in a sequence step; a top-level let/const is what a stream reads under that name.
  • Robustness. A program with a lambda (arr.filter(x => ...)), a?.b or a timestamp literal no longer aborts the process with a stack overflow, which took every unit down with it.
  • Checking. vejas-runtime vpl-check and the MCP tool vejas_vpl_check now run the engine's semantic validator (E050 unknown function, E033 misspelled event type once types are declared, E052 regex that cannot compile, W003 unbounded closure).
  • Language. Raw single-quoted strings, regex_match, backticked field names; with them, rules converted by sigma convert -t varpulis (https://github.com/varpulis/pySigma-backend-varpulis) run as detect units.

No Vejas code change: the engine's Error is #[non_exhaustive] and the new Invalid variant reaches vpl-check through to_string(). The detect programs in this repository (e2e, demo, bench) pass the validating check. cargo test: 43 passed locally; the e2e jobs run on NATS in CI.

🤖 Generated with Claude Code

Detect units run the Varpulis engine at varpulis/varpulis main 9e92c0b
(#277, #279, #281, #282) instead of 8bbeffc: a closure followed by a step
no longer matches before the step, .stnm() keeps an event from opening a
second run, a condition on a missing field is false in .where() as in a
sequence step, a top-level let/const is what a stream reads, and a lambda,
`a?.b` or a timestamp literal no longer aborts the process. vpl-check and
the MCP tool run the engine's semantic validator. VPL gains raw
single-quoted strings, regex_match and backticked field names, so rules
converted by `sigma convert -t varpulis` run as detect units.

No Vejas code change. The repository's four detect programs pass the
validating check; cargo test 43 passed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@cpoder
cpoder merged commit 63d28fd into master Sep 23, 2026
3 checks passed
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.

1 participant