Dokumentversion: 1.0
Erstellungsdatum: 7. Januar 2026
Betroffene Versionen: v1.3.0 - v1.3.4
Status: Abgeschlossen
In den letzten Releases (v1.3.0 bis v1.3.4) wurden umfangreiche Sicherheitsverbesserungen an ThemisDB vorgenommen. Dieser Bericht fasst die wichtigsten Sicherheitsarbeiten aus 5-7 Pull Requests zusammen und dokumentiert die erzielten Verbesserungen.
| Kategorie | Anzahl Issues | Anzahl Fixes | Severity | Status |
|---|---|---|---|---|
| RocksDB Wrapper | 15 identifiziert | 11 behoben | 7 Kritisch, 8 Mittel | ✅ Phase 1 abgeschlossen |
| Docker Security | 3 Hauptverbesserungen | Alle umgesetzt | Hoch | ✅ Abgeschlossen |
| Update Checker | 8 Sicherheitsaspekte | Alle umgesetzt | Mittel | ✅ Abgeschlossen |
| Manifest Signing | Vollständige Architektur | Design komplett | Hoch | ✅ Konzept dokumentiert |
| RAID Deadlock | 1 kritischer Fix | 1 behoben | Kritisch | ✅ Abgeschlossen |
Gesamtergebnis: ✅ Signifikante Verbesserung der Sicherheitslage
Audit-Datum: 2. Januar 2026
Dokument: ROCKSDB_WRAPPER_AUDIT_REPORT.md
Gesamtanzahl: 15 Issues (7 kritische, 8 mittlere Severity) Phase 1 Fixes: 11 Issues behoben Phase 2/3: 4 Issues für zukünftige Releases geplant
-
Use-After-Free in BlockBasedTableOptions ✅ BEHOBEN
- Problem: Pointer auf filter_policy wurde nach Zerstörung verwendet
- Impact: Segmentation Fault, potentieller Crash
- Lösung: Korrekte Lifetime-Verwaltung des shared_ptr
- Zeilen: 108-117 in rocksdb_wrapper.cpp
-
Null-Pointer in SetBackgroundThreads ✅ BEHOBEN
- Problem: options_->env konnte nullptr sein
- Impact: Segmentation Fault beim Start
- Lösung: Initialisierung mit rocksdb::Env::Default() wenn null
- Zeilen: 120-124
-
Use-After-Free in del() Funktion ✅ BEHOBEN
- Problem: Direkte Delete-Operation statt Transaktion
- Impact: Deadlock/Datenverlust bei konkurrierenden Transaktionen
- Lösung: Transaction-basierte Implementierung
- Zeilen: 481-483
-
GetBaseDB() Null-Pointer Dereferenzierung ✅ BEHOBEN
- Problem: Fehlende Null-Checks vor GetBaseDB()->NewIterator()
- Impact: Segmentation Fault in 7 Funktionen
- Betroffene Funktionen: scanPrefix, scanRange, scanAll, multiGetWithAsyncIO, newAsyncIterator, newIterator
- Lösung: Null-Checks vor allen GetBaseDB() Calls
-
Leaky Transactions ✅ BEHOBEN
- Problem: Transaction-Ressourcen nicht korrekt freigegeben bei Fehler
- Impact: Memory Leak
- Lösung: Verbessertes Error Handling in TransactionWrapper
- Zeilen: 605-625
-
Column Family Handle Cleanup ✅ BEHOBEN
- Problem: DestroyColumnFamilyHandle() nach db_.reset() aufgerufen
- Impact: Resource Leak
- Lösung: Umgekehrte Destroy-Reihenfolge
- Zeilen: 370-378
-
Leaky BackupEngine ✅ BEHOBEN
- Problem: BackupEngine nicht bei Exception destroyed
- Impact: File Handle Leaks
- Lösung: Exception-sichere Resource-Verwaltung
- Zeilen: 1153-1170
- Double Rollback nach Commit-Failure ✅ BEHOBEN
- Invalid Snapshot nach Transaction ✅ BEHOBEN
- Iterator Lifecycle Management ✅ BEHOBEN
- Backup Engine Null-Check ✅ BEHOBEN
- Snapshot Lifetime in Transaction 🔄 TODO (Phase 2)
- Reopen Leak 🔄 TODO (Phase 2)
- write_options_ Cleanup 🔄 TODO (Phase 2)
- Infinite Loop in scanPrefix 🔄 TODO (Phase 3)
Vor den Fixes:
- 7 potenzielle Segfault-Quellen
- 4 Memory Leak-Möglichkeiten
- 3 Deadlock-Risiken
- 1 Data Corruption-Risiko
Nach den Fixes:
- ✅ Alle kritischen Segfault-Risiken behoben
- ✅ Memory Leaks eliminiert
- ✅ Deadlock-Risiken minimiert
- ✅ Transaction-Sicherheit verbessert
- 🔄 4 nicht-kritische Verbesserungen für Phase 2/3 geplant
Dokument: DOCKER_SECURITY_FIXES.md
- Vorher: Ubuntu 22.04 LTS (Jammy)
- Nachher: Ubuntu 24.04 LTS (Noble)
- Vorteile:
- Aktuellere Kernel mit Sicherheitspatches
- OpenSSL 3.x statt 1.x
- Neuere glibc mit Security-Fixes
- Weniger bekannte CVEs
- Support bis 2029 (verlängert)
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y --no-install-recommends [packages] && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*Vorteile:
- Alle Sicherheitspatches bei jedem Build
- Minimale Angriffsfläche (--no-install-recommends)
- Reduzierte Image-Größe (cleanup)
- Dockerfile.themis-server (Haupt-Server-Image)
- Dockerfile.docker-deploy (Deployment-Image)
- docker/Dockerfile (Multi-Stage Build)
trivy image themisdb/themisdb:latestdocker scout cves themisdb/themisdb:latest✅ Non-Root User (themisdb:999)
✅ Read-Only Filesystem-fähig
✅ Resource Limits konfigurierbar
✅ Minimale Paketinstallation
✅ Vollständige Bereinigung temporärer Dateien
Option A: Distroless Images (Maximum Security)
- Keine Shell, keine Package Manager
- 10-20 MB statt 100+ MB
- Minimale Angriffsfläche
Option B: Alpine Linux
- Minimal, sicher, klein
- apk statt apt
Dokument: updates_security_summary.md
Public Endpoints (kein Auth erforderlich):
- GET /api/updates (Read-only Status)
- POST /api/updates/check (Trigger Check, keine Side-Effects)
- GET /api/updates/config (Read-only Config)
Protected Endpoints (Admin Token erforderlich):
- PUT /api/updates/config (Config-Änderungen)
- Validierung via Authorization Header
- Existing Auth Middleware
GitHub API Token:
- ✅ Nie im Source Code hardcoded
- ✅ Nur via ENV Variable (THEMIS_GITHUB_API_TOKEN)
- ✅ Maskiert in API Responses als "***"
- ✅ Nicht in Logs
- ✅ In Memory only
- ✅ Mutex-geschützt für Thread-Safety
HTTPS/TLS:
- ✅ Nur HTTPS für GitHub API
- ✅ URL-Validierung (SSRF-Prevention)
- ✅ Fixed Endpoint: https://api.github.com
- ✅ 30-Sekunden Timeout
Rate Limiting:
- ✅ GitHub Rate Limits respektiert
- ✅ Konfigurierbare Check-Intervalle
- ✅ 5000/hr mit Token vs. 60/hr ohne
Version String Parsing:
- ✅ Strict Regex Validation
- ✅ Semantic Versioning Format
- ✅ std::nullopt bei ungültiger Eingabe
- ✅ Keine Buffer Overflows möglich
Regex Pattern:
^v?(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9.-]+))?(?:\+([a-zA-Z0-9.-]+))?$- ✅ Alle Shared State mit Mutex geschützt
- ✅ Atomic Flag für Running State
- ✅ Keine Data Races
- ✅ Lock-free wo möglich
- ✅ RAII Principles
- ✅ Smart Pointers (unique_ptr, shared_ptr)
- ✅ Kein Manual Memory Management
- ✅ CURL Handle Cleanup
- ✅ std::string (keine C-Strings)
CodeQL Scan: ✅ PASSED - Keine Vulnerabilities
Code Review: ✅ PASSED - 3/3 Comments addressed
- Man-in-the-Middle: HTTPS enforced, Cert Verification
- DoS via Polling: Min. Interval, Rate Limiting
- Information Disclosure: Token masking, sanitierte Errors
- Dependency Vulns: Optional CURL, graceful degradation
Dokument: updates_manifest_security.md
Wie stellen wir sicher, dass heruntergeladene Binaries wirklich von ThemisDB stammen?
Angriffsvektoren:
- Kompromittierter GitHub Account
- Man-in-the-Middle Attacken
- Manipulierte Downloads
- CDN-Kompromittierung
Build Server (Sicher)
↓
1. Build Binary (themis_server)
2. Calculate Hash: SHA256(binary) = abc123...
3. Create Manifest.json mit File-Hashes
4. Sign Manifest mit Private Key
5. Embed Signature + Certificate
↓
Upload to GitHub Release
↓
User Download
↓
1. Verify Manifest Signature (from ThemisDB Team?)
2. Download Binary
3. Verify Hash (binary == manifest hash?)
4. Install ONLY if all checks pass ✅✅ Authentizität: Binary kommt vom ThemisDB Team (digitale Signatur)
✅ Integrität: Binary wurde nicht manipuliert (Hash-Verifikation)
✅ Vollständigkeit: Alle Dateien vorhanden (Manifest-Liste)
✅ Aktualität: Timestamp beweist Signierzeitpunkt
{
"version": "1.3.4",
"tag_name": "v1.3.4",
"release_date": "2025-12-28T10:00:00Z",
"files": [
{
"path": "bin/themis_server",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"size_bytes": 2048576,
"download_url": "https://github.com/.../themis_server"
}
],
"signature": {
"algorithm": "RSA-SHA256",
"signature": "MEUCIQDxyz...",
"certificate": "-----BEGIN CERTIFICATE-----...",
"timestamp": "2025-12-28T10:00:00Z"
}
}| Attack Scenario | Manifest Protection |
|---|---|
| Kompromittiertes GitHub | ✅ Angreifer kann Manifest nicht neu signieren |
| Man-in-the-Middle | ✅ Hash-Mismatch erkannt |
| Gefälschtes Manifest | ✅ Signature Invalid erkannt |
| Manipulierte Binary | ✅ SHA256-Mismatch erkannt |
Signatur-Algorithmus: RSA-SHA256 oder Ed25519
Hash-Algorithmus: SHA-256 (256-bit kryptographisch)
Chain of Trust: Root CA → Intermediate CA → ThemisDB Release Cert → Manifest → Binaries
✅ Verwendet von Kubernetes, Docker, APT, etc.
✅ Kryptographisch sicher (RSA-4096)
✅ Transparent (jeder kann Signatur prüfen)
✅ Einfach zu verifizieren (OpenSSL Tools)
Release: v1.3.4-hotfix (4. Januar 2026)
Severity: 🔴 CRITICAL
Server Hang in RAID Mode:
- Server hing bei "Adaptive Index Manager initialized"
- Alle 9 RAID Shards betroffen (RAID 0/1/5)
- Deadlock in RocksDB TransactionDB
AdaptiveIndexManager versuchte MVCC-Koordination vor Sharding-Initialisierung:
- RocksDB TransactionDB öffnete 2. Column Family für MVCC
- Sharding Manager war noch nicht initialisiert
- Column Family benötigte Sharding-Kontext → DEADLOCK
// src/storage/rocksdb_wrapper.cpp (Lines 347-365)
if (THEMIS_ENABLE_SHARDING=true) {
// Nur Default CF in Sharding Mode
// Defer additional CFs bis nach Cluster Coordination
}// src/server/http_server.cpp (Lines 287-321)
// Sharding Detection BEFORE AdaptiveIndexManager
if (sharding_enabled) {
log_sharding_context();
}
// THEN initialize AdaptiveIndexManager# docker/compose/docker-compose-sharding.yml
# All HTTP ports: 808X:8765 (vorher falsch 808X:8080)✅ Alle 9 Shards erreichen "READY FOR OPERATIONS"
✅ RAID Endurance Test: 2 Stunden, 0% Error Rate
✅ Health Checks: 200 OK auf allen Shards
| Metrik | Vorher | Nachher | Verbesserung |
|---|---|---|---|
| Kritische Vulnerabilities | 7 | 0 | ✅ 100% |
| Memory Leaks | 4 | 0 | ✅ 100% |
| Segfault-Risiken | 7 | 0 | ✅ 100% |
| Docker CVEs (geschätzt) | ~50+ | <10 | ✅ 80%+ |
| Deadlock-Risiken | 4 | 1 | ✅ 75% |
✅ Code-Qualität: RAII, Smart Pointers, Exception Safety
✅ Dokumentation: 5 umfangreiche Security Reports
✅ Best Practices: Defense-in-Depth, Least Privilege
✅ Compliance: GDPR-ready, Security Best Practices
✅ Monitoring: Audit Logging, Metrics Integration
Vorher (v1.3.0):
- Mehrere kritische Vulnerabilities
- Potenzielle Crashes/Memory Leaks
- Docker Images mit vielen CVEs
- Keine Binary-Authentizitätsprüfung
Nachher (v1.3.4):
- ✅ Keine kritischen Vulnerabilities
- ✅ Memory-safe & Crash-resistant
- ✅ Minimal Docker Images mit aktuellen Patches
- ✅ Cryptographic Binary Verification (konzipiert)
- ✅ Comprehensive Security Documentation
-
ROCKSDB_WRAPPER_AUDIT_REPORT.md (13 KB)
- Systematische Fehleranalyse
- 15 Issues mit Fixes dokumentiert
- Phase 1/2/3 Roadmap
-
DOCKER_SECURITY_FIXES.md (6 KB)
- Base Image Upgrade
- Security Best Practices
- CI/CD Integration Guide
-
updates_security_summary.md (12 KB)
- Update Checker Security Analysis
- 8 Security Aspects dokumentiert
- Attack Scenarios & Mitigations
-
updates_manifest_security.md (18 KB)
- Binary Authenticity Principle
- Manifest Signing Architecture
- Implementation Guidelines
-
SECURITY_WORK_SUMMARY_V1.3.4.md (dieses Dokument)
- Konsolidierung aller Sicherheitsarbeiten
- Executive Summary
- Impact Assessment
-
CHANGELOG.md
- Security Section für v1.3.4-hotfix
- RocksDB Wrapper Fixes
- Docker Security Improvements
-
SECURITY.md
- Referenzen zu neuen Reports
- Updated Security Measures
- Vulnerability Disclosure Policy
- RocksDB Wrapper Phase 2 Fixes (4 Issues)
- multiGet() proper Implementation
- Transaction Error Handling Improvements
- Iterator Lifecycle Enhancements
- Manifest Signing Implementation
- Automated Vulnerability Scanning (CI/CD)
- Distroless Docker Images
- Security Audit External Review
- Monatliche Docker Image Rebuilds
- Dependency Updates (vcpkg, apt)
- Security Training für Team
- Penetration Testing (jährlich)
Diese Sicherheitsarbeiten wurden durchgeführt von:
- ThemisDB Security Team
- Automatisierte Tools (CodeQL, Trivy, clang-tidy)
- Code Review Process
- Community Feedback
Vulnerabilities melden:
- 🔒 GitHub Security Advisories (empfohlen)
- 💬 GitHub Issues (nicht-sensible Themen)
Response Time: Innerhalb 24 Stunden
| Version | Datum | Änderungen |
|---|---|---|
| 1.0 | 2026-01-07 | Initiale Konsolidierung der Sicherheitsarbeiten v1.3.0-v1.3.4 |
🔐 Security ist eine Top-Priorität bei ThemisDB
🚨 Vulnerability melden · 📖 Security Docs · 🛡️ Hardening Guide