docs/security/assurance-case.md
This document provides a security assurance case for the Jaeger project, demonstrating how security requirements are met through the application of secure design principles and mitigation of common implementation weaknesses.
Jaeger is a distributed tracing system that collects, stores, and visualizes trace data from instrumented applications. The primary security concerns are:
| Actor | Motivation | Capability |
|---|---|---|
| Malicious Internal Service | DoS, data injection | Network access to collector |
| External Attacker | Data exfiltration, reconnaissance | Varies based on deployment |
| Unauthorized User | Access to sensitive traces | UI/API access |
For detailed threat analysis, see threat-model.md.
┌─────────────────────────────────────────────────────────────────┐
│ External Network │
│ ┌──────────────┐ │
│ │ Instrumented │ │
│ │ Applications │ ─────────── BOUNDARY 1 ───────────────────┐ │
│ │ (OTel SDK) │ │ │
│ └──────────────┘ ▼ │
│ ┌────────────┤
│ │ Jaeger │
│ │ Collector │
│ └─────┬──────┤
│ │ │
│ ─────── BOUNDARY 2 ─────────┤ │
│ ▼ │
│ ┌────────────┤
│ │ Storage │
│ │ Backend │
│ └─────┬──────┤
│ │ │
│ ─────── BOUNDARY 3 ─────────┤ │
│ ▼ │
│ ┌──────────────┐ ┌────────────┤
│ │ Users │ ─────────── BOUNDARY 4 ────────▶│ Jaeger │
│ │ (Browser) │ │ Query/UI │
│ └──────────────┘ └────────────┤
└─────────────────────────────────────────────────────────────────┘
| Boundary | From | To | Security Controls |
|---|---|---|---|
| 1 | OTel SDK | Collector | TLS/mTLS, rate limiting |
| 2 | Collector | Storage | TLS, authentication |
| 3 | Storage | Query | TLS, authentication |
| 4 | Users | Query/UI | TLS, bearer tokens, RBAC |
insecure_skip_verify must be explicitly set to disable verification| Weakness | Mitigation |
|---|---|
| Injection (CWE-89, CWE-79) | Structured data formats (protobuf/OTLP), parameterized storage queries |
| Broken Authentication (CWE-287) | Bearer tokens, OAuth2, mTLS support |
| Sensitive Data Exposure (CWE-200) | TLS for all communications, no credentials in traces |
| XML External Entities | Not applicable - uses protobuf/JSON |
| Broken Access Control (CWE-284) | RBAC support in Query service |
| Security Misconfiguration | Secure defaults where possible, configuration validation |
| Cross-Site Scripting (CWE-79) | UI built with React (auto-escaping), CSP headers |
| Insecure Deserialization (CWE-502) | Uses protobuf with schema validation |
| Insufficient Logging | Comprehensive logging in all components |
| SSRF (CWE-918) | No user-controlled URLs in backend requests |
| Practice | Implementation |
|---|---|
| Memory Safety | Go's inherent memory safety |
| Integer Overflow | Go's bounds checking |
| Race Conditions | Go's race detector in CI |
| Dependency Security | Dependabot, daily vulnerability scans |
| Control | Implementation |
|---|---|
| Signed Commits | DCO required for all contributions |
| Signed Releases | GPG-signed tags and artifacts |
| SBOM | Generated for each release |
| Container Security | Minimal base images (alpine/scratch) |
| Supply Chain | Harden-Runner, pinned dependencies |
| Control | Implementation |
|---|---|
| TLS/mTLS | Configurable for all connections |
| Authentication | Bearer tokens, OAuth2, Kerberos |
| Rate Limiting | Configurable at collector |
| Input Validation | OTLP schema validation, size limits |