Skip to main content
Internal red-team · April 2026 · no third-party pentest yet

Security
Posture Report

We publish our security posture openly — internal red-team results, CVE history, architecture controls, and SOC 2 progress. No marketing spin. Just the numbers.

0
Open critical / high
3.12%
Held-out FPR
7
Findings fixed
H2 2026
SOC 2 audit

Numbers an attacker has to defeat, not adjectives we picked for marketing.

0
Open critical / high
Apr 2026 internal red-team
7
Findings fixed
each with a regression test
3.12%
False-positive rate
2,084 held-out benign prompts
HMAC
Audit chain
deployment-keyed
TLS 1.2+
In transit
HSTS preload
600K
PBKDF2 iters
OWASP 2024 spec
Gitleaks
Required merge check
secret scanning
7yr
WORM retention
when S3 Object Lock is configured
Internal Red-Team Self-Assessment · April 2026

What Our Internal Red-Team Found and Fixed

An internal red-team self-assessment, April 2026. No third-party penetration test has been done yet. Every finding below is fixed and has a regression test in the repository.

0
Critical

None found

5
High · Fixed

Each fix has a regression test

2
Medium · Fixed

Each fix has a regression test

All 7 Findings — Disposition

High

Audit hash chain forgeable without a key

Disposition: Genesis and entry hashes are HMAC-keyed per deployment. Regression test: backend/tests/unit/test_hash_chain_service_coverage.py

Fixed
High

Code execution via a crafted ML model file (pickle)

Disposition: Restricted unpickler, and no model loads without its SHA-256 file. Regression test: backend/tests/modules/services/ai_business_logic/test_ml_detector.py

Fixed
High

JWT replay from a different client

Disposition: Tokens carry client IP and user-agent hashes; strict mode refuses a mismatch. Regression test: backend/tests/security/test_device_binding.py

Fixed
High

MCP transitive permission bypass

Disposition: The tool-call graph refuses a chain that reaches a tool the session was never granted. Regression test: backend/tests/modules/mcp/test_tool_call_graph_extra.py

Fixed
High

Prompt injection split across requests

Disposition: Fragments are correlated per client across requests. Regression test: backend/tests/agentic/test_prompt_security.py

Fixed
Medium

ReDoS in the HTML-comment threat pattern

Disposition: Bounded quantifiers; a 50,000-character pathological input completes in under 20 ms. Regression test: backend/tests/unit/threat_detection/test_pattern_loader.py

Fixed
Medium

WebSocket rate limiter trusted X-Forwarded-For from any client

Disposition: X-Forwarded-For is honoured only from TRUSTED_PROXY_IPS. Regression test: backend/tests/middleware/test_client_ip_extra.py

Fixed

The full internal red-team write-up is in the data room and available to prospects on request. Request report →

Held-Out Test · Measured 2026-09-11

Detection Quality, Scored On Held-Out Data

Detection is scored on a frozen 2,580-sample held-out set it was never trained on: 0.788 recall, 0.857 precision, 3.12% false-positive rate. The test lives at backend/tests/security/test_detector_heldout_external.py and fails the build on any regression.

65 of 2,084 held-out benign prompts flagged
99.71% threat-analysis success under load (2,424 concurrent requests)
Cache-hit detection overhead under 1 ms
Recall
0.788
391 / 496 held-out attacks caught
Precision
0.857
65 false positives on 2,084 benign prompts
Held-out set
2,580
never used in training
Why It Matters

G8KEPR vs Typical SaaS Security

Most SaaS security is checkbox compliance — bolted on after the fact. G8KEPR built security into the core architecture from day one.

Topic
Typical SaaS
G8KEPR
Penetration testing
Annual checkbox — findings rarely tied to regression tests
Internal red-team self-assessment, April 2026: 5 high and 2 medium findings, each fixed with a regression test. No third-party test yet.
Audit logs
Mutable database rows — editable or deletable post-hoc
Append-only table (DELETE blocked by trigger); authentication and domain events HMAC-SHA256 hash-chained per tenant, verified daily (since 2026-09-13)
Tenant isolation
A single WHERE org_id = ? filter in app code, with no second layer
Application-layer organization filter on tenant queries. Self-hosted installs add PostgreSQL RLS as a second layer: the Helm chart connects as the NOBYPASSRLS g8kepr_service role. The hosted instance relies on the application-layer filter
Security headers
Basic HSTS + X-Frame-Options — CSP often missing or report-only
A+ SSL Labs — nonce CSP, Trusted Types, SRI, ModSecurity WAF, Brotli + HTTP/3
Dependency scanning
Periodic manual review or no process
Dependabot opens update pull requests for Python, Node and GitHub Actions dependencies. pip-audit and npm audit are configured but not running as CI gates today
Secrets detection
Hope developers do not commit secrets
Gitleaks scans every pull request as a required merge check. Runtime secret-leak detector in the backend pipeline
Field encryption
Full-disk encryption only — PII readable in the database
AES-256-GCM field-level encryption of stored credentials and secrets; the previous key stays readable during a rotation
CVE response
Discovered during next sprint, patched weeks later
Next.js CVE-2025-29927 patched same day. P1 patch SLA is 72 hours
Defense in Depth

Four Independent Layers

A breach must defeat every layer independently. Each layer is operated and verified separately — there is no single point of failure.

Layer 1

nginx TLS Termination

Edge

TLS 1.2+ terminated by nginx; the application listens on localhost only

TLS 1.2 / 1.3nginxLocalhost-only app
Layer 2

ModSecurity + OWASP CRS

Web

926 OWASP Core Rule Set rules active — blocks SQLi, XSS, RCE, path traversal

926 rulesSQLi/XSS blockOWASP Top 10
Layer 3

G8KEPR API Gateway

App

Rate limiting, JWT validation, scoped API keys, circuit breakers, MCP tool-call interception

JWT hardeningRate limitsMCP interception
Layer 4

RLS + Field Encryption

Data

Application-layer organization filter enforces tenant isolation; PostgreSQL row-level security adds defence-in-depth on self-hosted installs

RLS defence-in-depthAES-256-GCMBYOK / DEK
What Each Capability Does by Default

Four Capabilities, Marked Honestly

Each card says what the capability does on a default install: whether it blocks, only records, or waits for you to switch it on.

Tool Definition Hash Registry

Rug-pull detection. Tool definitions hashed at tools/list time, re-verified on every tools/call. A malicious MCP server cannot silently swap a safe tool for a malicious one mid-session.

ENFORCINGSHA-256modules/mcp/tool_registry.py

Adaptive Z-Score Breaker

Statistical baselines per provider per hour-of-day, not static thresholds. 4 rolling windows. Progressive recovery 10/25/50/100%. Off by default; enable with ADAPTIVE_CB_ENABLED.

OPT-IN3σ · 4 windowsgateway/router.py

Cross-Pillar Correlation

All four pillars publish findings to one internal threat event bus, and a correlator scores the ones that occur together into incidents. It joins findings that share a correlation ID (the same request) or come from the same client IP within an organization (separate requests).

ADVISORYone bus · 4 pillarsmodules/compound_correlator/

Append-Only Audit Log

Security events are written to an append-only audit table. Authentication and domain events are HMAC-SHA256 hash-chained per tenant (full, single entry, last-N verification) and verified daily since 2026-09-13.

ADVISORYaudit_logs + triggerHMAC-SHA256 chain (auth + domain events)
Every Header — Passing

Security Headers & TLS Configuration

Verified against SSL Labs, securityheaders.com, and Mozilla Observatory. TLS 1.2 and 1.3 only — TLS 1.0 and 1.1 are not offered. All headers are enforced server-side, not just report-only.

SSL LabsA+
Mozilla ObservatoryA+
securityheaders.comA
SSL/TLS Grade
A+
Content Security Policy
Strict
HSTS
max-age=31536000
X-Frame-Options
DENY
Permissions-Policy
Strict
Subresource Integrity
Enforced
Trusted Types
Enforced
ModSecurity WAF
OWASP CRS
Cryptographic Primitives

The Crypto Underneath

Concrete primitives, not vague "industry-standard" promises. Algorithm choices match OWASP 2024 guidance.

TLS 1.2 and 1.3
AES-256-GCM · ChaCha20-Poly1305

HSTS preload · mTLS between sensor and collector

AES-256-GCM at Rest
96-bit nonce · 128-bit auth tag

Application-level encryption for API keys, OAuth secrets, TOTP, webhooks, MCP secrets

PBKDF2-HMAC-SHA256
600,000 iterations

Per OWASP 2024 password storage guidance · 256-bit output

bcrypt Passwords
Cost factor 12+

Timing-safe comparisons via hmac.compare_digest() everywhere

HMAC-SHA256 Audit Chain
Deployment-keyed

DB access alone cannot forge an entry · request-chain genesis derived from the key; event-chain genesis all zeros

API Key Format
gk_org_sk_...

Prefix in transit · SHA-256 hash at rest · timing-safe lookup

JWT Secret Rotation
90-day cycle

Decryption keeps previous key as fallback · zero-downtime rotation

Encryption Key Rotation
Annual policy, operator-run

Previous key kept for reads during the roll · Vault transit or AWS KMS KEK on customer installs

CVE Response & Dependency Hygiene

Dependabot watches Python, Node and GitHub Actions dependencies; pip-audit and npm audit are configured but not running as CI gates today

Gitleaks
Required merge check

Secret scanning runs on every pull request and every push to main. A merge cannot land without it

Bandit
Backend pull-request gate

Fails a backend pull request on any high-severity, high-confidence finding in production code

Dependabot
Dependency updates

Opens update pull requests for Node dependencies weekly and for Python and GitHub Actions dependencies monthly

8 Security Scanners Configured in CI

Gitleaks is a required check on every merge. Bandit runs on backend pull requests. The other six are configured but not running today.

Gitleaks

Secret detection · required check

Bandit

Python high-severity findings

CodeQL

SAST · Python + TypeScript · not running today

Trivy

Container CVE scanning · not running today

pip-audit

Python dependency CVEs · not running today

npm audit

Node dependency CVEs · not running today

OWASP ZAP

Dynamic AppSec testing · not running today

Semgrep

Custom-rule SAST · not running today

The two running scanners execute on a self-hosted CI runner and fail the pull request on a finding. The other six have workflows in the repository that are switched off.

7 of 9 Controls Complete

SOC 2 Type II Readiness

All technical controls are implemented and independently verifiable. We are not SOC 2 certified — we say so plainly. External auditor engagement is scheduled H2 2026. We disclose our actual status, not a vaporware claim.

Controls complete7 / 9
Technical controlsExternal audit H2 2026
Access Control (CC6)
Done
Encryption at Rest (CC6.7)
Done
Encryption in Transit (CC6.7)
Done
Audit Logging (CC7)
Done
Monitoring & Alerting (CC7.2)
In Progress
Incident Response (CC7.3)
Done
Change Management (CC8)
Done
Vendor Risk (CC9)
In Progress
Formal SOC 2 Type II Audit
H2 2026
Coordinated Disclosure Policy

Responsible Disclosure

Found a vulnerability? We want to hear from you. Report privately to security@g8kepr.com and we will acknowledge within 48 hours with an initial severity assessment and remediation timeline.

Security contactsecurity@g8kepr.com
Acknowledge SLA< 48 hours
P1 patch SLA< 72 hours
RecognitionCredit in release notes

Disclosure Steps

1

Report privately

Email security@g8kepr.com — description, reproduction steps, and impact.

2

We acknowledge within 48h

You receive confirmation and an initial severity assessment. We commit to a remediation timeline.

3

We patch and keep you updated

P1/P2 issues are patched before public disclosure. We will keep you in the loop on progress.

4

Coordinated public disclosure

We work with you on timing and credit for public disclosure after the fix is deployed and verified.

Incident Response SLAs

Response and resolution targets per severity, as published on the service levels page

P1 — Critical
Respond1 hour (4 on Starter)
Resolve4 hours
Data breach, full outage
P2 — High
Respond4 hours
Resolve24 hours
Auth failure, partial outage
P3 — Medium
Respond24 hours
Resolve7 days
Performance degradation
P4 — Low
Respond24 hours
ResolveBest effort
Non-critical bug
Open Security Posture

Security questions? Ask them directly.

We publish our posture because we have nothing to hide. Need the full red-team write-up, an architecture review session, or a call with our security team — reach out.