# 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.*