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