Trust

Thulpar’s own security is auditable.

Thulpar sits in front of the organisation’s most sensitive traffic. Its own security posture is therefore part of the product. This page states where it connects, what it stores, how it proves its identity and the defaults it installs with.

Zero egress

No outbound connection at run time.

There is no telemetry, no licence ping, no remote generation and no crash reporting. The one outbound connection is the model download; it opens only when the host explicitly allows it and an administrator picks a model in the panel, and it reaches allow-listed hosts only. The no-egress gate in CI verifies this on every PR.

The closed-circuit topology →
Offline licence

The licence is a signed document verified offline.

The licence is an Ed25519-signed JSON document. The verification keys are compiled into the image; no environment variable can add one. The installation keeps a clock mark that never moves backwards, and transaction metering is chained into the ledger.

The licence model →
Supply chain

Signed images, SBOMs and a kit that verifies its own signature.

Every image is built for amd64 and arm64, published to GHCR by digest and carries an SBOM per architecture. Images are signed keyless with cosign; every checksum file is signed. The install kit verifies its own signature.

The full security posture →
Closed circuit

Everything inside the perimeter talks; nothing crosses it at run time.

ORGANISATION NETWORK · CLOSED CIRCUIT Application / agentOpenAI SDK · thp_live_… MCP clienttools/list · tools/call Aginies Platformexecutor hooks THULPAR thulpar-gateway/v1/* · /mcp/:server · :8053 thulpar-api/v1/check · policy · ledger thulpar-detectorsCPU: ONNX, llama.cpp · GPU: vLLM console:8050 · OIDC Postgres · Valkeyledger · state Model endpointsvLLM · your own hosts MCP serversschemas pinned OIDC · SPIREusers · workloads evidence ledger · daily anchor · signed evidence packs · verify offlineKVKK · BDDK · SEDDK · public · EU AI Act · ISO 42001 · DORA INTERNET telemetry licence server vendor API remote generation × no connection at run time install only: ghcr.io · by digest or air-gap media ×
Security posture

Where it connects, what it stores, how it proves its identity.

Zero runtime egress

There is no telemetry, no licence ping, no remote generation and no crash reporting. The one outbound connection is the model download. It opens only when the host explicitly allows it and an administrator picks a model in the panel. It reaches allow-listed hosts only. Compose networks are internal. Only the edge network routes out, for the api and the gateway. The no-egress gate in CI verifies on every PR that the product source carries no telemetry SDK and no model-vendor host.

Supply chain

Every image is built on native runners for amd64 and arm64. It is published to GHCR by digest and carries an SBOM per architecture. Images are signed keyless with cosign. Third-party images (Postgres, Valkey, vLLM, SPIRE) come from the vendor’s mirror with byte-identical digests. Every checksum file is signed. The install kit verifies its own signature. A release is a git tag. The same workflow dry-runs before the tag.

Licence

The licence is an Ed25519-signed JSON document. The verification keys are compiled into the image. No environment variable can add one. Signing is a single workflow in a reviewer-gated GitHub environment. The installation keeps a clock mark that never moves backwards. Clock rollback is refused. Transaction metering is chained into the ledger. Deleting rows can only raise the count. The document may bind to the installation id. A foreign document is refused.

Identity

People sign in with the organisation’s OIDC provider (discovery, PKCE, role mapping, front- and back-channel logout). Installs without an IdP use local accounts and TOTP, which also serve as break-glass. Callers hold tenant-bound API keys. Workloads present SPIFFE X.509 and JWT SVIDs. These are verified from trust-bundle files only. MCP servers can be pinned by SPIFFE id. Optional mTLS runs between the api and the detectors. XFCC is accepted only from named trusted proxies.

Safe defaults

The .env templates are production-safe and every secret is generated. The bootstrap token is single use. No session exists before the first administrator. Postgres, Valkey and the detectors are not published to the host. Prometheus listens on loopback only. Security rails ship with a closed posture. The sector templates’ critical rails are locked. Tenant isolation applies on every table. A foreign row returns 404.

Isolation

File analysis runs in a separate child process per file, with memory and time limits. YARA’s pe/elf/dotnet modules load only in that child. CodeShield’s Semgrep half runs in its own process group without network. The detector sidecar can run under gVisor. Model weights are verified against the signed manifest at start.

Logs and data

Logs carry no raw content. pino redacts. The ledger stores hashes in place of content. The redacted sample is at most 2 KB and is deleted at the end of retention. Unless a tenant pack opts in, no prompt is written to disk in plain text. A tenant leaving receives a signed certificate of deletion.

Continuous verification

Every PR runs the backend, frontend, detector, eval, red-team, contract-validation, no-egress and image-build jobs. Every e2e suite runs on real Postgres. The acceptance job runs the install kit end to end. The security audits (policy integrity, licence integrity, SSRF/ReDoS, gateway and MCP) were closed in 0.5.0. Their findings are written up in the decision records.

Disclosure

Reporting a vulnerability

If you find a vulnerability, write to info@thulpar.com. We answer within 72 hours. We support coordinated disclosure. The product is not open source. Customers can obtain source access by contract and an escrow arrangement.

info@thulpar.com

See it in your own environment.

A one-hour technical demo: your scenario, your policy pack, on a closed-circuit install. Then the install kit and a trial licence for a pilot.