Troubleshooting
Common errors and the footguns behind them. For the authoritative field/keyword detail, see the Language Reference.
"not a .rsl script file"
--script points at a file without the .rsl extension. Source checks must be
.rsl; compiled bytecode must be .rbc. Rename the file or use the right flag
(--bytecode for .rbc).
The check never detects (or always detects)
This is the single most important thing to rule out — test against both a
vulnerable and a safe target (Testing Your Checks). A check
that fires unconditionally usually has a match that's too loose (e.g. matching
the mere presence of a service rather than the vulnerable behaviour).
HTTP probe ignores the host I set
HTTP probes take their host from --target (the base URL); the host field in a
probe block is for socket probes (tcp/udp/dns). For sockets, interpolate
the scan target:
tcp redis { host "{{scan_host}}" port 6379 }
DNS matches never work
DNS has two modes with different match fields:
hostonly → OS resolver → match on.answer.host+port/payload→ DNS wire → match on.response/.banner.
Using .answer on a wire probe (or .response on a resolver probe) never
matches. See DNS modes.
evidence home.body errors on a TCP probe
.body is HTTP-only. For sockets use .response, or a probe-scoped regex:
evidence home.response
evidence home regex 'PONG'
Certificate verification failed
The target presents a certificate Ruso won't trust. If you intentionally trust
it (a self-signed lab box), pass --insecure on the CLI, or set
verify_ssl false on that specific HTTP probe. Never disable verification for
real targets.
A target shows up as skipped
A required port was already seen closed earlier in the same ruso process —
results are cached for ~30 seconds per run to avoid hammering a dead port. It's a
performance optimisation, not an error.
repeat fails to parse
repeat N … end was removed from the language. Use for item in <list> to
iterate, or retry <probe> <n> to re-send a probe.
Publish rejected: missing version / bad family
- Publishing requires a
version(SemVer) in metadata — localvalidate/compiledon't. familymust be one of the registry's curated set (auth,cloud,database,dns,mail,misc,network,tls,web). The language accepts any string; the registry enforces the set at publish time.
Authentication failures against the registry
Confirm you're logged in to the right registry — credentials are stored per
registry URL. Check with ruso whoami, and remember --registry /
$RUSO_REGISTRY_URL override the default. Re-login if a token expired.
Still stuck?
Run with -v / -vv for per-probe detail, and consult the
CLI Reference for exact flag behaviour. Bugs go to the
relevant repository's issue tracker.