Files
IT-Nexus/SYSTEM_AUDIT_2026-05-07.md

217 lines
7.2 KiB
Markdown

# IT Nexus System Audit — 07.05.2026
**Erstellt von:** Claude (Read-Only, keine Änderungen)
**Status:** Offen — noch nicht bearbeitet
---
## Executive Summary
Das System läuft stabil. Frontend und Backend sind erreichbar, die letzten 10+ Tage alle grün im Health-Check. Es gibt aber konkrete Probleme in den Bereichen Sicherheit, Konsistenz und Wartbarkeit.
---
## 🟢 Was gut ist
| Bereich | Status |
|---|---|
| System erreichbar (HTTPS) | ✅ |
| Health: letzte 10 Tage | ✅ alle grün |
| Agent-Auth (X-Agent-Key) | ✅ korrekt |
| JWT-Auth auf geschützten Routes | ✅ korrekt |
| Rate-Limiting auf Login | ✅ vorhanden |
| DB-Migrations (try/catch) | ✅ idempotent |
| asyncHandler auf Controllern | ✅ konsistent |
---
## 🔴 Kritische Probleme (sofort)
### 1. Agent-Version Default falsch
- `AGENT_VERSION` Fallback im Code noch auf `'1.2.4'` — zieht sich durch 3 Stellen im Controller
- **Fix:** In docker-compose.yml `AGENT_VERSION=2.0.0` — bereits gesetzt ✅. Aber Fallback im Code noch `'1.2.4'` und `'1.2.3'` — sollte auf `'2.0.0'` geändert werden
- **Dateien:** `backend/src/controllers/monitoringAgent.controller.js` Zeilen 25, 113, 136
### 2. `/api/monitoring/agent-setup` ohne vollständige Auth
- Endpoint prüft Key im Controller, aber Route liegt vor Middleware — unkonventionell
- Kein HTTPS-erzwungener Download
### 3. SSE-Endpoints mit Token im Query-Parameter
- `/api/tickets/:id/events?token=xxx` — Token landet in Server-Logs und Browser-History
- `/api/network-monitor/sse?token=xxx` — gleiches Problem
- **Dateien:** `backend/src/routes/ticket.routes.js`, `backend/src/routes/networkMonitor.routes.js`
---
## 🟡 Hohe Priorität (diese Woche)
### 4. Kein Rate-Limiting außer Login
- `POST /api/tickets/public` — jeder kann Tickets erstellen, keine Limits
- `POST /api/tickets/:id/comments` — Spam möglich
- **Datei:** `backend/src/server.js` Zeilen 64-74
### 5. Keine Pagination auf großen Endpoints
- `GET /api/users` → alle User auf einmal
- `GET /api/assets` → alle Assets auf einmal
- `GET /api/tickets` → alle Tickets
- Bei Wachstum wird das ein Performance-Problem
### 6. E-Mail-Fehler werden ignoriert
- `.catch(err => console.error())` ohne Retry
- Bestätigungs-Mails, Onboarding-Mails könnten lautlos verloren gehen
- **Dateien:** `backend/src/controllers/ticket.controller.js` Zeilen 131, 137, 178
### 7. Kein Graceful Shutdown der DB
- SQLite wird beim Neustart nicht sauber geschlossen → mögliche Locks
- **Datei:** `backend/src/server.js` (fehlt: `process.on('SIGTERM')` Handler)
---
## 🟠 Mittlere Priorität (diesen Monat)
### 8. Kein strukturiertes Logging
- Überall `console.log/error` — kein Log-Level, kein JSON-Format
- Schwer zu debuggen in Produktion
- **Empfehlung:** Winston oder Pino einführen
### 9. Planner-Sync läuft alle 10 Sekunden
- Sehr aggressiv — sollte 5 Minuten sein
- **Datei:** `backend/src/server.js` Zeile 274-290
### 10. CORS in Dev auf `*`
- Alle Ursprünge erlaubt — sollte auch in Dev eingeschränkt sein
- **Datei:** `backend/src/server.js` Zeilen 46-53
### 11. Onboarding-PII unverschlüsselt
- `emp_phone`, `emp_address`, `emp_private_email` in Klartext in DB
- DSGVO-relevant bei DB-Leak
- **Tabelle:** `onboarding_protocols`
### 12. Schema-Inkonsistenz Asset-Typen
- DB-Schema kennt 4 Typen, seed.js seeded 9 Typen — CHECK-Constraint wird umgangen
- **Datei:** `backend/src/db/seed.js`
### 13. Audit-Logging unvollständig
- Password-Änderungen nicht gelogged
- Token-Generierungen nicht gelogged
- **Empfehlung:** Alle Auth-Events in `audit_log` schreiben
---
## 📊 Vollständige Route-Übersicht
### Auth Routes (`/api/auth`)
| Methode | Pfad | Auth |
|---|---|---|
| POST | /login | Public (Rate-Limited) |
| GET | /me | JWT |
| POST | /change-password | JWT |
| PUT | /notifications | JWT |
| PUT | /staff-notifications | JWT |
| GET | /microsoft | Public |
| GET | /microsoft/callback | Public |
| GET | /microsoft/addin | Public |
| GET | /microsoft/addin-callback | Public |
| GET | /microsoft/addin-result/:sessionId | Public |
### Monitoring Routes (`/api/monitoring`)
| Methode | Pfad | Auth |
|---|---|---|
| POST | /checkin | X-Agent-Key |
| POST | /announcements-poll | X-Agent-Key |
| GET | /agent-script | X-Agent-Key |
| GET | /agent-setup | X-Agent-Key (Controller) |
| GET | /statistics | JWT + Admin |
| GET | / | JWT + Admin |
| GET | /:id | JWT + Admin |
| DELETE | /:id | JWT + Admin |
### Patch Routes (`/api/patch`)
| Methode | Pfad | Auth |
|---|---|---|
| POST | /commands/result | X-Agent-Key |
| GET | /overview | JWT |
| GET | /groups | JWT + Admin |
| POST | /groups | JWT + Admin |
| PUT | /groups/:id | JWT + Admin |
| DELETE | /groups/:id | JWT + Admin |
| POST | /commands/trigger | JWT + Admin |
| POST | /commands/trigger-group | JWT + Admin |
| GET | /commands | JWT + Admin |
---
## 📋 Datenbank-Tabellen (38 gesamt)
| Tabelle | Zweck |
|---|---|
| roles | Benutzerrollen |
| users | Benutzerkonten |
| fido_keys | FIDO2-Schlüssel |
| assets | IT-Assets |
| asset_assignments | Asset-Zuweisungen |
| asset_inspections | Inspektionen |
| asset_movements | Bewegungshistorie |
| asset_types | Asset-Kategorien |
| onboarding_protocols | Onboarding |
| offboarding_protocols | Offboarding |
| tickets | Support-Tickets |
| ticket_comments | Kommentare |
| ticket_links | Ticket-Verknüpfungen |
| ticket_assignees | Mehrfach-Zuweisungen |
| ticket_routing | Auto-Routing |
| monitoring_agents | Windows Agenten |
| network_devices | Netzwerk-Monitoring |
| device_checks | Prüf-Ergebnisse |
| health_history | System-Health |
| patch_groups | Patch-Gruppen |
| patch_policies | Patch-Richtlinien |
| patch_agent_groups | Agent-Gruppen |
| patch_commands | Patch-Befehle |
| licenses | Softwarelizenzen |
| warehouse_locations | Lagerplätze |
| stock_thresholds | Mindestbestände |
| purchase_orders | Bestellungen |
| knowledge_base | Wissensdatenbank |
| ai_knowledge | KI-Wissensdatenbank |
| portal_guides | Portal-Guides |
| announcements | Ankündigungen |
| announcement_acks | Bestätigungen |
| external_alerts | Externe Warnungen |
| teams_channels | Teams-Kanäle |
| audit_log | Audit-Protokoll |
| unifi_config | Unifi-Konfiguration |
| unifi_devices | Unifi-Geräte |
| it_topics | IT-Übersicht |
---
## 📋 Priorisierte To-Do-Liste
| Prio | Aufwand | Was | Datei |
|---|---|---|---|
| 1 | 5 Min | Code-Fallback `'1.2.4'``'2.0.0'` | monitoringAgent.controller.js |
| 2 | 30 Min | Rate-Limiting auf public Ticket-Erstellung | server.js |
| 3 | 30 Min | Pagination auf /api/users, /api/assets, /api/tickets | controllers |
| 4 | 1h | Graceful Shutdown für SQLite | server.js |
| 5 | 2h | E-Mail Retry-Logic | ticket.controller.js |
| 6 | 2h | SSE Token aus Query absichern | routes |
| 7 | 1 Tag | Strukturiertes Logging einführen | server.js + alle |
| 8 | 1 Tag | PII-Felder verschlüsseln (DSGVO) | onboarding_protocols |
---
## Live-System Stand (07.05.2026)
| | |
|---|---|
| Health letzten 10 Tage | ✅ alle OK |
| Frontend erreichbar | ✅ |
| API erreichbar | ✅ |
| Agent v2.0.0 | ✅ IT-NB-02, TBO-NB-02, FAM102223 |
| Geräte mit altem Agent | ⚠️ ~41 Geräte noch v1.x |
| CT 110 (AI) | ✅ nach fsck repariert |
| CT 102, 103, 111 | ✅ alle healthy |
---
*Nächster Schritt: Priorisierung mit Simon besprechen, dann schrittweise abarbeiten.*