Transparency about how ThreatMeld protects your data โ what we run, where it lives, who processes it, and what we've validated.
ThreatMeld runs entirely on Microsoft Azure (East US 2 region) with Cloudflare providing edge security. Here's what's actually deployed:
WorkOS AuthKit โ OAuth 2.0 with PKCE; RS256 JWT tokens validated via JWKS. HttpOnly session cookies with 2-hour idle timeout and proactive token refresh. SCIM 2.0 provisioning. Token blacklist on logout; refresh endpoint checks blacklist before issuing new tokens (AUTH-02/03 remediated).
โ ActiveAzure Functions (Python/FastAPI) โ API layer with persistent rate limiting (Cosmos DB-backed), security headers (HSTS, CSP, X-Frame-Options), and 10 MB request size limit.
โ ActiveAzure Functions โ Timer-triggered fetcher orchestrator (hourly) ingests advisories from 48 vendor fetchers. Service Bus topics pipeline enrichment โ matching โ notifications.
โ ActiveAzure Cosmos DB (NoSQL, serverless) โ encrypted at rest (AES-256) and in transit. Session consistency. Partition-key-based tenant isolation. Continuous 7-day point-in-time recovery (PITR). Retry with exponential backoff.
โ ActiveAzure Static Web Apps โ React/TypeScript SPA. No server-side rendering, no customer data in the hosting layer.
โ ActiveAzure Service Bus โ topic/subscription model for advisory pipeline stages (raw โ enriched โ matched โ notifications). 24-hour message TTL.
โ ActiveMicrosoft Sentinel โ SIEM for centralized security event monitoring, threat detection, and audit logging across the Azure environment.
โ ActiveTLS 1.3 enforced across all endpoints (TLS_AES_256_GCM_SHA384 / X25519). ECDSA certificates via Cloudflare. HSTS preload enabled. No legacy cipher suites.
โ VerifiedAzure Cosmos DB uses AES-256 encryption at rest (Microsoft-managed keys). All application secrets stored in Azure Key Vault โ zero hardcoded secrets in source code.
โ EnforcedCloudflare provides DNS, CDN, DDoS protection, WAF, and TLS termination. Full (Strict) SSL mode with mTLS origin verification.
โ EnforcedAzure Key Vault for all application secrets. Authentication tokens and keys managed by Entra. Application data in Cosmos DB. No secrets in source code, environment variables sourced from Key Vault references.
โ EnforcedComprehensive 431-line defense-in-depth sanitizer: 20+ regex-based prompt injection detectors, HTML tag stripping, invisible Unicode removal, shell metacharacter filtering, SQL fragment detection, and HTML entity encoding. Advisory content redaction for supply-chain poisoning defense.
โ ActiveSeven-role model: Owner, BillingAdmin, AdvisoriesAdmin, SecOpsAdmin, SecOps, ReadOnlySecOps, Member. Least-privilege by default โ ReadOnlySecOps and Member are read-only; SecOps uses write_own ownership scoping (enforced in #713). Plan-based limits enforced per tier (Free โ Team).
Azure Communication Services (ACS) for transactional email. HMAC-SHA256 authentication. SPF, DKIM, and DMARC (reject policy) configured. Bounce/unsubscribe suppression list.
โ ActivePersistent rate limiting backed by Cosmos DB (survives restarts), request size limits, CORS allowlisting, security headers middleware. Stripe webhook signature verification is mandatory (no bypass possible).
โ ActiveAutomated security scanning on every pull request and push to main: pip-audit (Python CVE detection), npm audit (JavaScript dependency scanning), Semgrep SAST (static analysis), and CodeQL (GitHub's semantic code analysis for Python + JavaScript/TypeScript; runs as a separate workflow on every PR and weekly). Build fails on high/critical findings. GitHub Dependabot handles dependency patch PRs.
โ ActiveAll customer data is stored within Microsoft Azure's East US 2 region (Virginia, United States):
Credentials and sensitive data follow strict separation of concerns:
| Data Type | Classification | Storage Location | Retention |
|---|---|---|---|
| User credentials (passwords, MFA) | Confidential | WorkOS AuthKit (separate tenant) | Per Entra retention policy |
| User profiles (email, role, tenant) | Confidential | Cosmos DB (East US 2) | Account lifetime + 30 days |
| Tenant configurations | Internal | Cosmos DB (East US 2) | Account lifetime + 30 days |
| Product subscriptions & triage | Internal | Cosmos DB (East US 2) | Account lifetime + 90 days |
| Advisory data (CVEs, bulletins) | Public | Cosmos DB (East US 2) | Indefinite |
| Billing records | Confidential | Stripe (US) + Cosmos DB | Per legal requirements |
| Application logs | Internal | Log Analytics (East US 2) | 90 days |
| Security events | Internal | Microsoft Sentinel (East US 2) | Per retention policy |
| Session tokens (JWT) | Confidential | Client-side only (not stored server-side) | 1 hour TTL |
Validated through automated testing, CI/CD security scanning, and independent adversarial audit:
sanitizeUrl) and ingestion (base_fetcher.py URL validation).All Azure infrastructure is defined in Bicep IaC templates โ Cosmos DB, Key Vault, Functions (API + Background), Service Bus, Static Web Apps, and Application Insights. No manual Azure portal configuration.
Security intelligence that is hours stale is worse than useless โ it creates a false sense of coverage. v0.10.1 introduced a multi-layer reliability pattern to ensure enrichment failures surface within an hour, not days.
ok / empty / failed) to the enrichment_metadata container via a try/finally, so a partial failure is never silent.GET /api/enrichment/public/status exposes last_attempt_at, overall_status, and per_source.{epss, kev, vulncheck_kev} with entry counts and hours-since-update. Customers and external monitoring tools can poll this without authentication.| Source | Purpose | Target freshness |
|---|---|---|
| CISA KEV | Active exploitation signal | < 24 hours from CISA publish |
| FIRST.org EPSS | Exploit probability scoring | < 24 hours from daily EPSS publish |
| VulnCheck KEV | Secondary exploitation signal (when API key configured) | < 24 hours |
| Vendor advisories | Primary CVE feed (48 fetchers) | Hourly sweep from vendor feeds |
Data freshness is best-effort against upstream source availability. If a vendor feed is down, our status endpoint surfaces that โ we do not fall back to stale data silently.
Every deployment to production passes through 9 automated security checks (8 CI-gated + 1 periodic independent adversarial pentest). These results update with each successful release โ what you see below reflects exactly what is running in production right now.
Loading scan results...
How this works: Our CI/CD pipeline runs all security checks on every code change. If any check fails, the deployment is blocked โ code never reaches production with known vulnerabilities. This page auto-updates only on successful deployments, so these results always match what's live. View our CI/CD pipeline โ
Stripe handles all payment processing. ThreatMeld never sees, stores, or processes payment card numbers.
Third-party services that process data on behalf of ThreatMeld. All are contractually bound to data protection obligations.
| Processor | Purpose | Data Processed | Location |
|---|---|---|---|
| Microsoft Azure | Primary cloud โ Cosmos DB, Functions, Service Bus, Key Vault, Static Web Apps, Log Analytics, Sentinel | All application data | East US 2 (Virginia, US) |
| WorkOS AuthKit | Identity provider โ user authentication, CIAM tenant, SCIM provisioning | User email, display name, authentication state | United States |
| Cloudflare | DNS, CDN, DDoS protection, WAF, TLS termination | HTTP request metadata, static asset caching. No customer data stored at edge. | Global edge network |
| GitHub | Source code hosting, CI/CD (GitHub Actions), dependency scanning (Dependabot), security scanning (Semgrep SAST) | Application source code only โ no customer data | United States |
| Processor | Purpose | Data Processed | Location |
|---|---|---|---|
| Stripe | Payment processing, subscription management, billing portal | Payment card details (PCI DSS Level 1 โ ThreatMeld never sees card numbers), billing email, plan selections | United States |
| Azure Communication Services | Transactional email delivery (alerts, invitations) | Recipient email address, email content | United States |
| Anthropic | AI-powered remediation guidance generation | Advisory content (public CVE data) sent for analysis. No customer-specific data is sent to Anthropic. Input is sanitized to strip any embedded PII and prompt injection attempts. | United States |
Public data sources that ThreatMeld ingests. No customer data flows to these sources โ we only read from them.
| Source | Purpose | Data Flow |
|---|---|---|
| NIST NVD | CVE vulnerability database | Inbound only |
| CISA KEV | Known Exploited Vulnerabilities catalog | Inbound only |
| FIRST.org EPSS | Exploit Prediction Scoring | Inbound only |
| Vendor RSS/CSAF feeds | Security advisories from 48 vendors (Cisco, Palo Alto, Fortinet, Microsoft, Juniper, Sophos, etc.) | Inbound only |
__cf_bm (bot management, strictly necessary, exempt from consent requirements). No third-party analytics, no advertising pixels, no behavioral tracking. See our Cookie Policy for full details.| Control | Status | Notes |
|---|---|---|
| Security Best Practices | โ Implemented | Encryption, RBAC, continuous monitoring, CI/CD security scanning |
| TLS 1.3 / ECDSA-only | โ Verified | Enforced at Cloudflare edge |
| HSTS Preload | โ Complete | max-age=31536000; includeSubDomains |
| Cloudflare Full (Strict) + mTLS | โ Complete | Origin certificate verification |
| SPF / DKIM / DMARC (reject) | โ Complete | All email domains |
| Input Sanitization | โ Complete | 431-line sanitizer, 20+ detectors |
| Secret Management (Key Vault) | โ Complete | Zero hardcoded secrets |
| CI/CD Security Scanning | โ Complete | pip-audit, npm audit, Semgrep SAST |
| RBAC (6-role model) | โ Complete | Least-privilege by default |
| Infrastructure as Code | โ Complete | Bicep IaC, no manual config |
| Automated Testing (2,182 tests) | โ Complete | CI/CD on every commit |
| Cosmos DB PITR | โ Complete | Continuous 7-day point-in-time recovery |
| Security Monitoring (Sentinel) | โ Complete | SIEM for threat detection & audit |
| Zero First-Party Cookies | โ Complete | MSAL via localStorage, no tracking |
| Penetration Testing (first engagement) | โ Complete | Shannon AI adversarial audit, April 14, 2026 โ 17 Critical/High/Medium findings, all remediated + verified. Ongoing: quarterly cadence. |
| GDPR Data Processing Agreement | โ In Progress | Target: 2026 Q3 |
In the event of a security incident affecting customer data:
If you discover a security vulnerability in ThreatMeld, please report it to [email protected]. We commit to acknowledging reports within 24 hours and providing an initial assessment within 72 hours.
For questions about data handling, privacy, or compliance:
ThreatMeld is operated by RedEye AI Labs
Phoenix, AZ, United States