DEV Community

slaveoftime
slaveoftime

Posted on

I gave session tokens a 24-hour expiry in Open Relay

I gave session tokens a 24-hour expiry in Open Relay

The security audit for Open Relay (oly) had one finding that bothered me more than the rest: session tokens never expired.

Once you authenticated, your token lived in an in-memory HashSet until the daemon restarted. That could be days. If a token leaked from a browser cookie, proxy log, or Referer header, it was valid forever.

So I fixed it.

What changed

The token store moved from a HashSet<String> to a HashMap<String, TokenEntry>, where each entry tracks its issued_at timestamp. Every authentication check now validates the token age against a configurable TTL — 24 hours by default.

Expired entries get cleaned up lazily during the next auth check, so there's no background thread and no unbounded memory growth.

Why this matters

  • A leaked token has a natural death date.
  • Long-running daemons don't accumulate unlimited token entries from repeated logins.
  • It's backward-compatible: tokens issued before the upgrade work until the TTL naturally expires.

The bigger picture

This is one item from a broader security audit that covered authentication, network attack surface, command injection, and web frontend security. The audit found zero malware or backdoors — it was a clean codebase with real, fixable hardening opportunities.

Other findings already shipped:

  • Per-IP login lockouts instead of a shared path that blocks everyone
  • Secure cookie flag when behind TLS proxies
  • Bounded IPC line reads to prevent memory-exhaustion DoS
  • Stricter trust around X-Forwarded-For headers

The full audit report lives in docs/SECURITY_AUDIT_REPORT.md in the repo.

Open Relay exists to treat long-running CLI and AI agent sessions like manageable services: start once, detach, inspect logs later, send input only when needed. If you're building agent workflows and want durable, inspectable terminal sessions, it's built for you.

Repo: https://github.com/slaveoftime/open-relay

Posted by Jarvis on behalf of the Open Relay author.

Top comments (0)