Security
How Sleuvo protects confidential investigations
Everything below describes a control that exists in the product today. Where something is planned rather than built, this page says so rather than implying otherwise.
Infrastructure
Sleuvo runs on AWS. The application and its background workers run as containers on ECS Fargate in private subnets, behind an Application Load Balancer, CloudFront and AWS WAF.
The database is Amazon Aurora PostgreSQL in isolated subnets with no public address and no route to an internet gateway. The cache is Amazon ElastiCache Redis, also private. No security group permits the public internet to reach a data port.
Infrastructure is defined as code with the AWS CDK, so every environment is reproducible and reviewable rather than assembled by hand in a console.
Encryption
Data at rest is encrypted with AWS KMS customer-managed keys: the database, its snapshots and backups, and every object bucket. Traffic to the database and the cache is encrypted in transit, and the public application is HTTPS only with HSTS.
Provider refresh tokens and outgoing webhook secrets are encrypted with per-purpose derived keys before they are stored, so a database read alone does not yield a usable credential.
Access control
Identity is handled by Amazon Cognito. Sessions are server-side records referenced by an encrypted, HttpOnly, Secure cookie; identity-provider tokens never reach the browser, so a cross-site scripting bug cannot yield a portable credential.
Authorization is centralised. Every route, background job and assistant tool resolves the same authorizer with an explicit actor, organization, resource and action. Five roles run from owner to read-only viewer, and multi-factor authentication is supported and can be required for a workspace.
Tenant isolation
Every record that belongs to a workspace carries its organization identifier, and the active organization is resolved from the server-side session, never from a URL or a request body. Queries go through scoped helpers, so omitting the organization filter is a visible exception rather than an easy mistake.
A request for another workspace’s record returns "not found" rather than "forbidden", because confirming that a record exists is itself a disclosure. Automated tests attempt cross-workspace access against every tenant-owned resource on each build.
Evidence storage
Evidence files and generated reports live in private S3 buckets with Block Public Access enabled, KMS encryption, versioning and access logging. Nothing in Sleuvo can produce a permanent public link to them.
Downloads are authorized first and signed second: the permission check runs against the session, the workspace, the case and the item before a pre-signed URL exists, and that URL expires within five minutes. Uploads are validated on size, declared type, extension and the file’s own magic bytes, and are stored under generated names rather than the name a user supplied.
Audit logging
Sensitive actions write an immutable audit record: who acted, in which workspace, on what, from which address, with which request identifier. Sign-in, case access, exports, evidence downloads, report downloads, role changes, key creation and every assistant tool call are covered.
Passwords, API secrets, session tokens and authorization headers are never written to audit records or to application logs. Log output is structured JSON and passes through a redactor that also removes confidential investigation text.
The AI assistant
The investigation assistant has no database access. It can only call a fixed set of tools, each of which validates its arguments, runs the same authorization check as any other caller, and inherits the requesting session’s workspace and case. It cannot name another organization, and only one tool writes anything at all.
On-chain text, uploaded documents and investigator notes are treated as untrusted data. They are never placed into the assistant’s instructions, and every tool result is delivered inside an explicit untrusted-data envelope. Every call, including a refused one, is recorded.
Resilience
Aurora runs with automated backups, point-in-time recovery and deletion protection in production. Object storage is versioned. A restore drill is run and recorded quarterly, because a backup that has never been restored is a hypothesis.
Background work runs on durable queues with dead-letter queues and idempotent handlers, so a retried message cannot create a duplicate alert, trace or report.
What we do not claim
Sleuvo is not SOC 2 certified and not ISO certified. We do not describe our encryption as bank-grade or military-grade. Where a control is planned rather than in place, our documentation says so.
Sleuvo never takes custody of client funds and cannot freeze, seize or recover assets. It identifies service interactions and potential intervention points; acting on them is a matter for you and the relevant service or authority.
Reporting a vulnerability
Email security@trace.example with what you found and how to reproduce it. Please do not open a public issue. We will acknowledge your report and keep you updated on the fix.