📑 Marktanalyse-Report — Inhaltsverzeichnis: 2-spaltiges TOC mit klickbaren Sprung-Ankern für alle 14 Sektionen. scroll-margin für saubere Anchor-Positionierung. Print-CSS-Safe (heller TOC-Style im PDF).
🔧 Reproducible-Builds:tests/e2e/package-lock.json committed — lockt Playwright-Versionen für deterministische E2E-CI-Runs. base_path()-Test-Fix (Funktion lebt in auth.php mit Session-Side-Effects, nicht im Test-Bootstrap).
v2026.05.1515. Mai 2026🚀 Major Update — Security + Webhooks + Newsletter
📬 Changelog-Newsletter (DSGVO Double-Opt-In): Public-Subscribe-Page changelog-subscribe.php, Mail-Verify via Token, Auto-Cleanup unverifizierter Subscriber nach 7 Tagen. Bei jedem Changelog-Save automatischer Mail-Versand an alle verifizierten Abonnenten mit personalisiertem Unsubscribe-Link pro Mail. Admin-UI admin-subscribers.php für CRUD-Operationen. Audit-Log: subscribe_requested, verify_attempt, unsubscribe_attempt (email-hash statt klartext fuer Privacy).
📧 Freitext-E-Mail-Versand: Neuer Senden-Button im Freitext-Panel. Multi-Select-Checkboxen pro Doc + 'Alle auswählen'. PDF-Anhang mit allen ausgewählten Dokumenten via SimplePdf. Modal-UX: ESC-Close, Backdrop-Click-Close, Auto-Focus auf Empfänger-Feld. Max 20 Empfänger pro Call (Anti-Spam). Audit-Log: freitext.docs_mailed.
🛡 Security-Patches — 17+ echte Bugs gefixt: CSRF auf 134 API-Endpoints via _csrf_bootstrap.php, Session-Fixation-Fix in 2FA-Email-Pfad (session_regenerate_id(true)), CSRF + per-User-Rate-Limit + timing-attack-mitigation auf forgot_password.php, JSON_SORT_KEYS-non-existence (Hash-Chain non-deterministic), 3x write_log wrong-args, 4x undefined-variable nach try/catch, password_verify(null)-Bug in 2FA, 2x string-int type-juggling. require_admin_or_403() Helper auf 56/56 Admin-Gates = 100% Audit-Log-Coverage.
⚡ Performance-Optimierungen:load_config() static-cache via \$GLOBALS (~50-200 disk-I/Os/Request gespart, 124 Call-Sites), Sessions-Index-Cache includes/session_store.php für 7 Endpoints (metrics, risk-heatmap, compliance-dashboard, ...), dashboard-builder nested-array_map-double-read fix, gzip für JSON-APIs via mod_deflate.
🛡 Rate-Limiting + Anomaly-Detection: Global Rate-Limit (60 POST/min, 200 GET/min pro IP) via includes/rate_limit.php mit Sliding-Window-Counter + Auto-Cleanup. Login-IP-Anomaly-Detection (kein externer GeoIP-Service): rolling-window letzte 20 Login-IPs pro User, alert bei neuer /24-Range (IPv4) bzw. /64 (IPv6). Audit-Log + Sentry-Warning bei Anomalie.
📜 Audit-Log-Rotation + Key-Rotation-Monitor:includes/log_rotation.php rotiert admin_audit.log bei >10 MB nach data/audit_archive/admin_audit.YYYY-MM-DD_HHMMSS.log.gz, Retention 365 Tage (NIS2-Empfehlung). Cron-Endpoint api/audit-log-rotate.php. Key-Rotation-Monitor (includes/rotation_monitor.php) warnt bei data/secrets.json mtime >90 Tage via Sentry + admin_log.
🔒 Hardening: Content-Security-Policy mit Sentry-allowlist, Cross-Origin-Resource-Policy: same-origin, HSTS preload-eligible, SameSite-Cookie Lax → Strict, X-Frame-Options DENY, sensible-Files-Block erweitert (secrets.json, composer.json, sentry.php, rate_limit.php, rotation_monitor.php, .master.key, .app_enc_key, license-privkey.pem). includes/.htaccess: Deny from all.
🧪 PHPStan Level 6 strict in CI: L1-L6 = 0 errors, ~28 Type-Annotations hinzugefügt (return-types für xx_out-Helpers, missing-iterable-value-types ignoreErrors). Pinned PHPStan PHAR 2.1.54 für lokal/CI-Konsistenz. PHPStan Level 7-8 lokal clean, deferred in CI bis PHAR-Version stabil.
🗑 Demo-Modus komplett entfernt: -1264 LOC. api/demo-init.php, api/demo-public.php, static/demo-tour.css/js, modules/sector_bw.demo_public/ gelöscht. Demo-Login-Buttons aus login.php raus. 11 api/* Session-Demo-Filter purged. 64 demo-Lang-Keys aus DE/EN raus. Live-Bereinigung via FTPS-Cleanup.
📊 Marktanalyse-Report erweitert: Section 12: 19 Verkaufs-Plattformen mit Time-to-First-Sale (Gumroad/Payhip/Lemon Squeezy für sofort-Verkauf, AppSumo/AWS/Azure für Marketplace, BAAINBw/KdB für DACH-Behörden). Section 13: Pro/Contra-Tabellen pro Plattform mit visuellen Sterne-Widgets + Tier-Badges (Gold/Blau/Grau/Rot).
🧹 Code-Cleanup: Duplicate-Webroot MSC5_WebLive/785K3.../ entfernt (-896 MB). 1.9 GB Live-Backup angelegt unter Backups/webspace_2026-05-15_094150/. UserRole-Enum (PHP 8.2 backed-enum) mit 9 Sample-Migrationen. 13 Test-Files mit ~70 Test-Cases. Coverage-Threshold 10% → 12%.
📚 Docs: README.md von 12 → 202 Zeilen aufgebohrt (Tech-Stack-Tabelle, Quickstart, Security-Features-Matrix, Repo-Struktur, CI/CD-Pipeline). SECURITY.md mit Responsible-Disclosure-Policy + Safe-Harbor-Klausel. JS-Extraction-Roadmap für audit.php (4400 LOC inline JS, 5-Phasen-Plan).
Eingaben gehärtet: Verantwortliche Stelle / DSB / Mail per Form vor-fillbar. Length-Cap 200 Zeichen, CRLF-Strip via preg_replace, Email-Format-Validierung mit FILTER_VALIDATE_EMAIL. Save-Modus archiviert nach data/reports/dsgvo_konformitaet_<TS>.html mit Audit-Log report.dsgvo_generated. guard_module("compliance.dsgvo_erklaerung") für Tier-Schutz.
PDF-Print Branded-Light: Erbt das gleiche Druck-Theme wie Marktanalyse/Features-Reports. WCAG-AAA-Kontrast, A4 14mm-Margins, Brand-Akzente in Blau/Violett, 12-spaltige TOM-Tabelle mit grün/amber/rot-Status-Badges. Abkürzungs-Tooltips (DSGVO, TOM, ROPA, DSFA, NIS2, ...) inklusive.
Sec-Fix CRITICAL — Open-Redirect in login.php:?next=-Parameter wurde nach erfolgreichem Login direkt als Redirect-Target verwendet. Phishing-Risk via ?next=https://attacker.com. Fix: Whitelist auf erlaubte Pages, Block auf scheme-relative URLs (//x.com), CRLF-Injection und Path-Traversal (..).
Sec-Fix HIGH — lang-Param-Type-Juggling in api/report-multilang.php: User-controlled $_GET['lang'] wurde direkt in HTML embedded ohne Whitelist-Check. Fix: in_array($_GET['lang'], ['en','de'], true) mit Default 'de'. Verhindert Header/Log-Injection und Type-Confusion.
Sec-Fix MED — strtok-Side-Effect in api/dsgvo-erklaerung.php:strtok() hat globalen State → bei Nested/Parallel-Calls Race-Conditions möglich. Ersetzt durch preg_replace('/[\r\n].*/s', '', $v) (stateless).
index.php — Letztes-Update mit Datum + Uhrzeit: Banner zeigt jetzt 30.04.2026 22:34 statt nur Datum. Datum aus Version-String (regex tolerant für Suffixe wie -sovereign), Uhrzeit aus filemtime(data/changelog.json). Auto-update bei jedem Save.
index.php — base_path() Windows-Fix:dirname() liefert auf Windows-PHP teils Backslashes — beim Konkatenieren mit URL entsteht change_password.php?force=1 ohne Slash → Browser interpretiert als Hostname. Fix: str_replace('\\', '/', dirname(...)) + Empty-String-Handling.
Module-Manifest:compliance.dsgvo_erklaerung als Pro-Tier registriert mit Endpoint dsgvo-erklaerung.
v2026.04.30-sovereign30. April 2026🔒 Sovereign Edition
🚀 NEU: MSC5Labs Sovereign Edition — die einzige Audit-Plattform mit DSGVO-Art-44-konformer KI. Vollständig Air-Gap-fähig, lokale LLMs (Llama 3.1, Qwen 2.5, Mistral via Ollama), Voice-Diktat lokal (whisper.cpp), Embeddings via SBERT — kein Cloud-Roundtrip, keine Mandantendaten an OpenAI/Anthropic/Google.
✓ DSGVO-Art-44-konform — keine Drittstaaten-Datenübermittlung. Mandantendaten verlassen nie den Audit-Host.
✓ EU-AI-Act-konform — Self-Declaration-Tracker für KI-Module. CE-Konformitätserklärung als PDF exportierbar. Risk-Klassifizierung (unzulässig/hoch/begrenzt/minimal) je Modul.
✓ VS-NfD-tauglich — Verarbeitung von Verschlusssachen-Nur-für-den-Dienstgebrauch ohne Cloud-Risiko. BSI TR-03102/03116-konform.
✓ 0 Cloud-Roundtrip — alle KI-Inferenzen, Embeddings, Sprachdiktate auf der Audit-Workstation. Outbound-Block für klassifizierte Umgebungen optional aktivierbar.
Pricing: Subscription Single 699 €/Mon · Team (5 User) 1.890 €/Mon · Enterprise 8.500–14.000 €/Mon · Perpetual Enterprise 89.900 € · KOBRA VS Live-Stick 9.900 € · Source-Code-Lizenz 350-650 k€.
Bewertungs-Effekt: Sovereign-Edition hebt Tool-Bewertung um +30-50 % auf 1.0–1.6 Mio € Asset / 4–7 Mio € Premium (BAAINBw-Listing-fähig).
Hardware: ab 8 GB RAM (qwen2.5:7b-q4_K_M), GPU optional. Mit RTX 3060+ → 3-5× schnellere Inferenz.
v2026.04.3030. April 2026Security
Master-Key (app_enc_key) rotiert: Alter 256-bit AES-256-GCM-Master-Key war kurzzeitig im Git-Push exponiert (legacy-bak Datei). Neuer Key generiert, 3 API-Keys (api_key, openai_key, perplexity_key) entschlüsselt + mit neuem Key re-verschlüsselt. Alter Key + alte ENC-Werte unbrauchbar.
RSA-2048 License-Keypair rotiert: Neues Keypair für License-Signing. Alter Privkey (auch leaked) tot. Public-Key in includes/license-pubkey.pem, Private-Key in data/license-privkey.pem (chmod 0600).
Legacy config.json aus Webroot entfernt: Alte Klartext-Config + Master-Key lagen im Webroot — Datei lokal + remote (FTPS-DELE) gelöscht. Aktive Config in data/config.json (HTTP-blocked via data/.htaccess Require all denied).
Git-History bereinigt: Commit mit data/config.json.legacy-bak via git commit --amend + git push --force-with-lease orphaned. .gitignore erweitert um *.legacy-bak, secrets.json, .master.key, license-privkey.pem.
Trial-Anti-Bypass:data/.trial_started war file-deletable (Trial-Reset trivial). Trial-Start lebt jetzt in data/secrets.json mit HMAC-SHA256-Signatur (Tampering-Detection). Legacy-File wird einmalig migriert.
2FA-Email-Routing: User-Email hat Vorrang — 2FA-Code geht NUR an die User-Email, nicht parallel an globale Admin-Adressen. Email ist Pflicht beim Anlegen neuer User wenn 2FA global aktiv ist (Backend + UI-Hint *). toggle_2fa enable=true blockt User ohne hinterlegte Email.
2FA-Self-Heal:app_enc_key-Rotation hatte alte TOTP-Secrets unbrauchbar gemacht (decrypt fail) → User stand auf „Kein TOTP eingerichtet" fest. twofa_totp_secret() heilt jetzt automatisch: bei decrypt-fail wird totp_secret_enc + totp_enabled entfernt, Authenticator-Tab verschwindet, User loggt per E-Mail ein und enrollt TOTP neu unter Settings. twofa_available_methods() probt aktiv Decrypt für saubere Tab-Anzeige. 2fa.php zeigt bei TOTP-Error Setup-Banner mit Button → twofa_setup.php.
License-Upload Hardening:api/license.php?action=upload hat jetzt 50-KB-Size-Limit (DoS), Payload-JSON-Schema-Check (edition/modules/expires required), Signature-Verify VOR Save (bad-sig wird abgelehnt statt gespeichert), klare Error-Responses mit HTTP-Codes 400/413.
Community/Pro/Enterprise/BW Build-Scripts: Distributions-ZIPs erzeugbar via python build_all_editions.py. Output unter dist/MSC5Labs-<Edition>-YYYY-MM-DD.zip. Community 4.8 MB, Pro 5.0 MB, Enterprise 5.0 MB, Sector-BW 899 MB (Vorschriften-Add-On).
PHPUnit-Test-Baseline: Neue Tests unter tests/ — CryptoTest (8 Cases: AES-GCM Round-Trip, Wrong-Key, Unicode, Non-Determinismus), JsonInputTest (9 Cases: Schema-Whitelist, Type-Cast, Enum, Optional, Regex), LicenseTest (6 Cases: Module-Registry, Tier-Filter, Edition-Resolution, Manifest-Discovery). Konfig: phpunit.xml mit testdox + random execution-order. Run: phpunit tests/.
Bug-Report-Widget: User können jetzt Bugs/Feature-Wünsche/UI-Probleme direkt im Tool melden. Header-Button „🐛 Bug melden" auf admin/grc/soc/compliance/audit/index. Modal mit Titel, Kategorie (Bug/UI/Feature/Performance/Sonstiges), Beschreibung, Screenshot-Upload (Strg+V Paste oder File-Picker, max 2 MB). Auto-Context: Page-URL, User-Agent, Viewport. Backend api/bug-report.php speichert in data/bug_reports.json + Screenshots in uploads/bug-reports/. Custom-Dropdown wegen unstylebarer native <select> im Dark-Theme. Standalone static/bug-report.js idempotent geladen.
Bug-Reports Admin-Card: Neue Card auf admin.php für Bug-Verwaltung. Stats-Header (Total/Neu/InArbeit/Gelöst/Geschlossen-Count), 5 Filter-Chips, pro Report Status-Dropdown + Delete-Button + Screenshot-Thumbnail (200×120). Status-Workflow: new → in_progress → resolved → closed. Backend-Actions list/update/delete/view_screenshot, alle admin-only. Audit-Log bug_report.create / update / delete. Module-Manifest admin.bug_reports (community-tier).
Marktanalyse + Features-Report Live-Recompute: Bei jedem Generate werden alle Metriken neu aus dem aktuellen Code-Stand berechnet — kein Cache. Live: API-Endpoints (glob), Module (Manifest-Count), Pages, PHP-LOC, JS-LOC (ohne Daten-Bundles wie prueffragen_*_data.js), i18n DE/EN-Keys, Module pro Tier (community/pro/enterprise/sector_bw). Replacement-Cost = LOC ÷ 8 LOC/h × 1.30 Overhead × {90,160} €/h. Bewertungs-Multiplier konservativ: 1.4× (Asset-Sale), 3.5× (SaaS realistisch), 5.5× (BAAINBw-Premium). Snapshot-Datei pro Generate unter data/reports/marktanalyse_<TS>.html.
Abkürzungs-Tooltips in Reports: Neuer includes/abbr-glossary.php mit ~110 Abkürzungen (MRR, ARR, BCM, RTO, RPO, ROPA, TISAX, DORA, SOAR, IOC, STIX, MITRE ATT&CK, 2FA, TOTP, AES, RSA, HMAC, BAAINBw, BWI, KRITIS, …). Auto-Wrap via Text-Node-Walker mit Word-Boundary-Erkennung. Hover zeigt Erklärung; im Print wird Abkürzung automatisch um „(Erklärung)" expandiert (PDF-tauglich).
PDF-Print Branded-Light-Theme: Marktanalyse + Features drucken jetzt als helle, brand-treue PDFs. @page A4 14mm-Margins, print-color-adjust:exact erzwingt Farbdruck, Headings in Brand-Blue/Purple/Cyan, Tabellen mit Brand-Gradient-Headern auf weiß, KPI-Cards mit blauem Linkborder, Status-Boxen kontextfarbig (mint für recommend, cream für warn). WCAG-AAA-Kontrast (Text auf Weiß), volle Lesbarkeit auch ohne aktivierte „Hintergrundgrafiken".
Session-Cookie gehärtet:includes/auth.php setzt das Secure-Flag automatisch sobald HTTPS aktiv ist — HttpOnly + SameSite=Lax waren bereits aktiv.
Brute-Force-Lockout repariert:login.php ignoriert jetzt den spoofbaren X-Forwarded-For-Header und nutzt nur REMOTE_ADDR. Zusätzlich wird pro Username gezählt, nicht nur pro IP — Credential-Stuffing über wechselnde IPs läuft damit auch in den Lockout.
Service Worker komplett überarbeitet:sw.js nutzt versionierte Cache-Keys (v2-2026-04-29), fehlertolerantes Precache (einzelne 404 brechen den Install nicht mehr), Network-First für PHP-Pages, Stale-While-Revalidate für Static-Assets. Auth-Routen (login, logout, 2fa, twofa_setup, change_password, forgot_password) werden nie gecached. Redirected Responses werden ignoriert.
HTTP-Caching für Static-Assets:mod_expires-Block in .htaccess liefert PNG/JPG/SVG/Woff2 mit 30 Tagen, CSS/JS mit 30 Tagen, Manifest mit 1 Tag. sw.js ist explizit no-cache, damit Updates sofort durchschlagen. Spürt sich vor allem beim Login: das 288-KB-Logo wird einmal pro 30 Tage geladen statt jedes Mal.
Aufräumung: Stub- und Test-Dateien aus dem Webroot entfernt — phptest.php, test.html, check.php (letztere leakte ohne Auth die User-Anzahl), sowie verirrte Python-Reste app.py, wsgi.py, requirements.txt.
User-Presence-Tracking auf admin.php: Neue Spalte „Aktivität" in der User-Tabelle mit Online/Offline-Pille (grün mit Glow / grau) und letztem Login als relative Zeit. Online = letzter Heartbeat ≤ 5 Min. Pro Page-Navigation Heartbeat in data/user_presence.json (gedrosselt auf 30 s). Live-Refresh per JS-Poller alle 30 s gegen api/presence.php — kein Page-Reload nötig.
Neue Files:includes/presence.php (Tracker-Helper), api/presence.php (Admin-only JSON-Endpoint). Login-Erfolgspfade in login.php + includes/auth.php rufen presence_record_login() auf — alle 4 Pfade (2FA-skipped, Legacy, E-Mail-2FA-Verify, TOTP/Backup-Complete).
v2026.04.2828. April 2026Feature
Download-Buttons deaktiviert:MSC5 USB + MSC5 Macher Edition auf index.php als „Jetzt kaufen" disabled — keine Free-ZIP-Downloads mehr für Gold/Offline-Editionen.
Card-Hover-Tooltip entfernt: Mouse-Over-Tooltip auf index.php-Kacheln auf User-Wunsch deaktiviert.
v2026.04.2727. April 2026Major Release
License-System Phase 1+2+3 — Modulare Plugin-Architektur: Tier-basierte Modul-Aktivierung über signierte License-Files (RSA-2048 SHA-256). Editions: community / pro / enterprise / sector_bw. 14-Tage-Trial-Fallback (file-based data/.trial_started). Offline-Verify ohne Phone-Home.
License-Core (3 neue Includes):includes/license.php (msc5_license_load, has_module, require_module, license_status, license_summary, Wildcard-Support * und prefix.*) · includes/module-registry.php (~80 Module mit id/name/page/tier/endpoints, msc5_modules_for_edition) · includes/guard-helper.php (server-side guard_module("id") → 402 module_not_licensed bei fehlender Lizenz).
73 API-Endpoints auto-injected: Python-Script inject_guards.py hat guard_module()-Calls in alle Module-Endpoints eingefügt (z.B. risk-register.php → grc.risk_register, mdm.php → soc.mdm, compliance-tisax.php → compliance.frameworks, integration-jira.php → integrations.jira).
Admin-License-Card UI: Sidebar-Eintrag „🔑 License & Module" auf admin.php. 6-KPI-Status-Grid (Status/Edition/Customer/Expires/Modules/Signature). Modul-Liste nach Tier gruppiert (collapsible). Drag&Drop-Upload-Area für License-JSON. Buttons: Generate (Self-Signed), Keypair init, Export, Clear → Trial-Reset.
License-API:api/license.php mit Actions status / registry / keypair_init / generate / upload / export / clear. RSA-Keypair-Generierung via openssl_pkey_new. Public-Key in includes/license-pubkey.pem, Private-Key in data/license-privkey.pem (chmod 0600).
Zero-Day-Tracker: Neue Card auf soc.php mit api/zero-day.php. Auto-Feed via CISA-KEV (Known-Exploited-Vulnerabilities) + NVD-API. Felder: CVE/CVSS/CWE/Vendor/Produkt/Affected-Versions/Attack-Vector/Exploit-Public/Patch-Available/Mitigations/Risk-Score. Filter nach Schweregrad.
Import-to-Audit (Incident + Zero-Day → Prüfliste):api/import-to-audit.php mit Actions sessions / import_zero_day / import_incident. Erzeugt Audit-Row mit kuerzel, modul (BSI-Default OPS.1.1.5 für 0-Day, DER.2.1 für Incident), prueffrage, feststellung (CVE/CVSS/Severity/Vendor/Patch-Status), bewertung, empfehlung, NIS2-Hinweis bei meldepflichtigen Vorfällen. Dedup-Check via imported_from. Auto-Redirect zu audit.php nach Import.
login.php Querformat: 2-Spalten-Grid (Branding links / Form rechts) mit responsive Breakpoints. Funktioniert jetzt auf Landscape-Mobil + Desktop ohne Scroll.
audit.php-Fix: Schriftzug „MSC5 Macher Edition" entfernt (war hardcodiert in Header).
Auto-Backup-Rule: Trigger-Phrase „bis morgen" / „Feierabend" / „speichere den stand" in ~/.claude/CLAUDE.md hinterlegt — Claude-Code committet+pushet uncommitted changes automatisch nach github.com/RDanton21/MSC5Labs. Schutz via .gitignore (config.json, API Keys, License-Privkey).
v2026.04.2626. April 2026Major Release
Architektur-Refactor — Tool aufgeteilt in 4 Bereiche:admin.php (User · Security · Ops · Integrations), neue grc.php (Governance · Risk · Compliance), neue soc.php (Security Operations · Detection · Response · Hunting), neue compliance.php (Frameworks · Gap-Analyse · Audit-Tools · Reports). Sticky Tab-Navigation oben (Admin/GRC/SOC/Compliance) mit Backdrop-Blur, fixiert bei top:60px mit z-index 11. Shared Page-Shell via includes/page-shell-head.php, includes/page-shell-foot.php, includes/page-nav.php.
84 neue P-Features in 9 Wellen ausgerollt — verteilt auf die 4 Sub-Pages:
i18n DE/EN komplett ausgerollt: Sprachumschaltung jetzt auf wazuh-agent.php, changelog.php, training_lab.php, admin.php, wazuh.php sowie audit.php (Header, Toolbar, Prompt-Generator, Audit-Row-Template, Modals, Settings, Notes). ~1100 neue Übersetzungs-Keys (wa.*, cl.*, tl.*, ad.*, wz.*, au.*, ar.*, nt.*, ch.*, ms.*, sup.*) in lang/de.json + lang/en.json.
KI-Endpoints sprach-bewusst:analyze, reformulate, reformulate-feststellung, summarize, humanize erkennen aktive Sprache und antworten in DE oder EN.
Englische Prüffragen-Kataloge (382 KB, 1907 Strings): Teil 1A/1B/2/3 BSI/4 ISO via neu gebautem CLI-Tool tools/translate_catalogs.php in 202 OpenAI-Batches übersetzt. Lang-aware Loader greift via file_exists() mit DE-Fallback.
Sprach-Switcher mit echten Inline-SVG-Flaggen (DE-Tricolor + UK-Union-Jack) statt Emoji-Text.
Multi-User Team-Chat live: Floating-Panel mit Markdown-light, @-Mentions + Autocomplete, Reply-Quote-Jump, 8 Preset-Reaktionen, Edit/Delete, Typing-Indicator, Server-side-Search, Unread-Counter, File-Attach (10 MB, Image-Preview), System-Messages. 8 neue Actions in api/session.php + api/chat-attach.php/chat-attach-file.php; piggyback im existierenden 2.5 s State-Polling.
Footer-Support-Formular (index.php): Modal mit Name/E-Mail/Kategorie/Betreff/Nachricht → api/support-mail.php → Mail an support@msc5.de mit Reply-To, Audit-Block, Rate-Limit 1/min.
Fixes: Reformulate/Analyze (3 Bugs: Provider-Fallback, PHP-8-TypeError bei trim(array), Response-Schema-Mismatch data.text vs data.result vs data[0]) → alle Endpoints nutzen jetzt enforce_ai_guard() + run_prompt_text(). Header-Buttons in audit.php auf einheitliche Höhe (32 px) gebracht. Prüfer-Kürzel wird in audit.php aus config.json users[] aufgelöst, nicht mehr nur aus Session — fixt fälschlichen „Kürzel erforderlich"-Alert.
v2026.04.2424. April 2026Feature
Neu — Mehrsprachigkeit DE/EN (i18n-System): Komplettes Übersetzungs-Framework auf allen Kernseiten. Deutsch bleibt Standard, Englisch per Switcher oder ?lang=en umschaltbar. Sprachwahl persistiert via Session + 1-Jahres-Cookie (msc5_lang, SameSite=Lax, Secure auf HTTPS). Detection-Reihenfolge: GET-Parameter → Session → Cookie → Accept-Language-Header → DE-Fallback.
Neu — Sprach-Switcher in Header auf allen Hauptseiten: Kompakter DE/EN-Toggle oben rechts neben User-Badge auf index.php, admin.php, audit.php, wazuh.php, training_lab.php, changelog.php, wazuh-agent.php. Aktive Sprache hervorgehoben, ein Klick wechselt und reloadet Seite mit persistierter Wahl.
Geändert — Authentifizierungs-Seiten komplett übersetzt:login.php, 2fa.php, forgot_password.php, change_password.php, twofa_setup.php — alle Labels, Placeholder, Buttons, Fehlermeldungen, Hinweistexte und JS-Alerts über i18n-Keys. TOTP-Setup JS-Strings via json_encode()-Pattern ins const I18N = {...}-Objekt eingebettet.
Neu — Englische Übersetzungen: ~250 Übersetzungs-Keys in lang/en.json — Pendants aller deutschen Strings aus den genannten Seiten. Platzhalter wie :price bleiben erhalten (z.B. card.paid_from = "🔒 Paid · from :price € / month").
Offen — Noch ausstehend für kommende Version: Tiefe Content-Übersetzung von admin.php (Benutzertabelle, Settings-Cards, AI-Usage), audit.php (Sidebar, Module, Teile 1a/1b/2/…, Notes-Modal, Prompt-Generator), wazuh.php (Dashboard-Cards, Alerts, Kill-Chain), training_lab.php (Tabs, Target-Cards), changelog.php (aktuell noch vollständig DE), wazuh-agent.php, schwachstellenanalyse.php, pentest.php.
v2026.04.2323. April 2026Major Release
Neu — Multi-User-Sitzung (Live-Collaboration in audit.php): Vollständiger Polling-basierter Collab-Layer. Host legt Sitzung an, fügt Teilnehmer per Prüferkürzel hinzu, System erzeugt eindeutige Session-ID (?sid=…). Alle Teilnehmer arbeiten gleichzeitig am Audit: Field-Locks (8s TTL + 4s Heartbeat) verhindern Überschreibungen, Optimistic Concurrency via expectedRev-Counter fängt Kollisionen ab (HTTP 409 + Remote-Apply), Presence-Bar oben zeigt Host (★ blau) + Teilnehmer (grau bei Inaktivität >20s). Host-only Guards für rows.add/remove/reorder + meta.prueffragen/vorschriften. Fremd-Lock wird im DOM als magenta Outline + 🔒 KÜRZEL-Badge sichtbar.
Neu — Session-Sync-Backend api/session.php: flock-geschützte JSON-State-Files pro Session unter /sessions/<sid>.json mit atomarem tmp→rename-Write. Actions: create / join / state / patch / lock / unlock / heartbeat / leave. State-Schema: {sid, host, participants, rev, doc:{rows,meta}, locks, presence, log}. Automatisches Directory-Setup + .htaccess Require all denied. Client-Polling alle 2.5s, Autosave-Hook pusht doc.rows mit expectedRev. beforeunload sendet Leave-Beacon.
Neu — Diktat über Whisper (audit.php): Komplett-Neubau der Mikrofon-Aufnahme für Feststellungs-Feld. Click → MediaRecorder (webm/opus) → Upload an api/transcribe-snippet.php → OpenAI Whisper-Transkription → Einfügung in Feststellung via execCommand('insertText') an Cursor-Position, mit automatischem Leerzeichen-Handling. Halluzinations-Filter verwirft leere/unverständliche Ergebnisse. Auto-Stop nach 120s, Doppelklick stoppt manuell.
Neu — Prüferkürzel-System (admin.php + api/users.php): Benutzerverwaltung erhält neues Pflichtfeld "Prüferkürzel" (2–12 Zeichen A–Z/0–9, systemweit unique). Validierung bei user.add, neue API-Action set_kuerzel für nachträgliche Bearbeitung mit Duplikat-Check + Audit-Log-Eintrag. Neue Spalte "Kürzel" in der User-Tabelle zeigt monospace Badge #3d84f7 mit ✎-Edit-Button. Voraussetzung für Multi-User-Sitzungen.
Neu — Auto-Fill Prüferkürzel in Audit-Zeilen: Beim Login wird das hinterlegte Prüferkürzel in CURRENT_USER_KUERZEL geladen und in jede neu angelegte Audit-Zeile via restoreKuerzel automatisch eingetragen. Kein manuelles Tippen mehr pro Zeile.
Neu — Multi-User-Dialog auf Startseite (index.php): Neuer Button "Multi-User" neben "Jetzt starten" (gleicher btn-blue-Style, margin-left:auto). Öffnet Login-optik-Modal mit Host-Feld + dynamischer Teilnehmer-Chip-Liste (Enter oder +-Button zum Hinzufügen, × zum Entfernen). "Sitzung starten" ruft api/session.php?action=create, leitet auf audit.php?sid=….
Neu — "Alle auswählen" im MITRE Kill-Chain-Panel (wazuh.php): Neuer Button im Kill-Chain-Filter, erscheint wenn aktive Taktiken existieren und nicht bereits alle ausgewählt sind. Ein Klick fügt alle verfügbaren Taktiken zum Alert-Filter + wechselt automatisch auf den Alerts-Tab.
Neu — BSI-Code-Linkify nach KI-Reformulierung: Neuer DOM-TreeWalker autoLinkifyBsiCodes() erkennt Vorschriftcodes (Regex \b[A-Z][A-Z0-9]{0,10}(?:\.[A-Z0-9]+){1,6}\b) in Text-Nodes und wandelt sie in magenta .quelle-mention-Chips mit Hover-Tooltip. Aktiv nach reformulateFeststellung, applyResult (Bewertung + Empfehlung) und reformulate (einzelfeld). Codes bleiben auch nach KI-Analyse anklickbar.
Geändert — Import-Reihenfolge Wazuh/CVE → Audit: Bei Alert-zu-Prüffrage-Import läuft findBsiFiles jetzt zuerst, dann highlightQuellen vor setFsContent. Sicherstellt dass Quellen-Chips bereits beim ersten Render in Magenta erscheinen.
Fix — Multi-User-Modal-Zentrierung: Modal wurde im transformierten .card-Ancestor gerendert, position:fixed wurde dadurch relativ zum Transform-Parent. Fix: IIFE reparented Backdrop + Modal zu document.body beim Script-Load.
Fix — Kritischer Parse-Error in api/session.php:$GLOBALS als lexical variable in Closure use()-Clauses war PHP-Fatal ("Cannot use auto-global as lexical variable"). Betraf 4 Closures. Entfernt — Superglobal ist ohnehin automatisch innerhalb Closures verfügbar. Erklärte die "Unexpected end of JSON input"-Fehler beim Session-Start.
Infrastruktur — Auto-Setup Sessions-Verzeichnis:api/session.php erstellt beim ersten Request automatisch /sessions/ mit 0750-Mode + .htaccess Require all denied. Keine manuelle Server-Konfiguration nötig.
v2026.04.2222. April 2026Feature
Neu — Automatischer Changelog-PDF-Versand: Bei jedem neuen Changelog-Eintrag (Speichern via api/changelog-save.php) wird automatisch ein PDF generiert und als Anhang per E-Mail versendet. Der Mail-Body enthält eine Zusammenfassung (Version / Datum / Typ / Item-Count) und einen Link zur Online-Changelog-Seite. Das PDF ist A4 mit Helvetica, automatischem Zeilen- und Seitenumbruch und einem kleinen MSC5Labs-Logo + Footer auf jeder Seite.
Neu — Schlanker PDF-Generator includes/simple_pdf.php: Eigener Mini-PDF-Builder ohne externe Library (ca. 180 Zeilen PHP). Erzeugt valide PDF-1.4-Dokumente mit Überschriften, Fließtext, Bullet-Listen, Trennlinien und automatischem Page-Break. Unterstützt Windows-1252-Encoding für deutsche Umlaute.
Neu — Manueller Reload-Button im Wazuh-Dashboard: Neuer Button "🔄 Neu laden" im Header lädt alle Daten (Overview / KPIs / Charts / Tabs) auf Knopfdruck neu. Icon rotiert während des Ladevorgangs (CSS-Animation), bei Erfolg wechselt der Button kurz auf Grün mit ✓, bei Fehler auf Rot mit ✗. Zusätzliches Keyboard-Shortcut R löst den Reload aus, wenn kein Input-Feld fokussiert ist.
Neu — Randomisierter Demo-Daten-Generator: Jeder Reload im Demo-Modus erzeugt jetzt komplett neue, glaubwürdige Demo-Ergebnisse aus einem deutlich größeren Pool: 15 Agents (Status wird pro Call gewürfelt — aktiv/disconnected/never_connected), 27 Alert-Templates (davon 8–14 zufällig ausgewählt, Level ±1 variiert, Agent gezogen), 17 CVE-Templates (5–10 ausgewählt, CVSS ±0.3 variiert, Affected-Agents gemischt), 13 SCA-Policies (5–9 ausgewählt, Score ±6 variiert, Pass/Fail nachjustiert).
Geändert — Feststellung-Umformulierung (audit.php/reformulate): Der Prompt für api/reformulate-feststellung.php wurde komplett neu geschrieben. Die KI formuliert nur noch Stichpunkte in vollständige Sätze um bzw. schreibt bestehende Sätze BSI-Grundschutz-konform (sachlich, deskriptiv, passivlastig) — keine Bewertungen, keine Risikoeinschätzungen, keine Empfehlungen, keine Soll-Ist-Vergleiche. Die Bewertung bleibt ausschließlich der KI-Bewertung (Feld 2) vorbehalten, welche die Feststellung unter Berücksichtigung der in Feld (A) ausgewählten Bausteine beurteilt. Zielumfang: 2–3 Sätze.
Geändert — Footer fixiert (wazuh.php + index.php): Beide Seiten nutzen jetzt position:fixed statt der bisherigen Sticky-to-Bottom-Flex-Technik. Der Footer klebt immer am unteren Viewport-Rand (auch beim Scrollen), mit halbtransparentem Hintergrund, backdrop-filter: blur(8px) und dezentem Schatten nach oben. Body bekommt ein reserviertes padding-bottom, damit der letzte Content nicht verdeckt wird.
Geändert — Auto-Refresh-Toggle visuell deutlich: Der Auto-Refresh-Schalter im Wazuh-Header zeigt jetzt klar erkennbar seinen Zustand: Orange mit "AUS" wenn deaktiviert, Grün mit "AN (30s)" wenn aktiv (mit pulsierendem Glow-Dot). Vorher war der Off-Zustand zu dezent und wurde übersehen.
Geändert — Login-Logo zurück auf MSC5Labs: Das auf der Login-Seite temporär eingesetzte #TMYLGGNS-Wal-Logo wurde wieder gegen das Original-MSC5Labs_Logo.png getauscht. Die Größenanpassung (220px) und der stärkere Cyan-Glow sowie die Entfernung aller anderen dekorativen Hintergrund-Effekte bleiben bestehen — das Original-Logo ist jetzt alleine der visuelle Hingucker.
Fix — Dropdown-Optionen in admin.php lesbar: Die <option>-Elemente im Audit-Log-Filter (Alle Events / Nur Anmeldungen / Nur Fehlanmeldungen / Nur Benutzer / Nur Sicherheit / Nur Wazuh) und im "letzte X"-Dropdown waren in Chrome/Edge unlesbar (blasser Text auf hell-lila Hintergrund). Gefixt durch globale select option { background:#0b1829; color:#e8edf5 }-Regel inkl. Hover-State.
Technisch — Neue Dateien:includes/simple_pdf.php (Mini-PDF-Builder), includes/changelog_mailer.php (MIME-Multipart-Mail mit PDF-Anhang).
v2026.04.2121. April 2026Major
Neu — Chart-Zoom-Lightbox: Alle 4 Wazuh-Dashboard-Diagramme (Alerts 24h-Timeline, Top MITRE-Tactics, Top-Agents, Severity-Donut) sowie die MITRE Kill-Chain sind jetzt klickbar und öffnen sich zentriert vergrößert als Lightbox-Modal. SVG-Inhalte skalieren mit bis zu 65vh Höhe, HTML-Bars bekommen im Zoom größere Labels und mehr Einträge (Top-20 statt Top-5). Auto-Refresh aktualisiert auch den geöffneten Zoom-View live. Schließen per Esc oder Klick außerhalb.
Neu — Kill-Chain Multi-Select: Die 13 MITRE-ATT&CK-Taktiken in der Kill-Chain lassen sich jetzt einzeln und mehrfach auswählen (statt wie bisher nur eine). Klick toggelt, Shift+Klick setzt exklusiv, ausgewählte Zellen zeigen ✓-Badge + cyanen Glow, nicht-ausgewählte werden gedimmt. Alert-Tabelle filtert per OR-Verknüpfung, Tactic-Dropdown synchronisiert sich automatisch ("Mehrere (X)" bei >1 Auswahl).
Neu — Agent-Detailseite wazuh-agent.php: Klick auf Agent-Namen in der Agents-Tabelle öffnet eine eigene Detailseite mit 6 KPI-Kacheln (Status, Alerts total, kritische Alerts, Schwachstellen, Ø SCA-Score, Last Seen) und drei gefilterten Panels: nur Alerts/Vulns/SCA dieses Agents.
Neu — Saved Views: In allen 4 Filter-Bars (Alerts, Agents, Schwachstellen, SCA) ist ein 💾 Views ▾-Dropdown hinzugekommen. Damit lassen sich beliebige Filter-Kombis unter eigenem Namen speichern ("Meine Morgenroutine", "Windows-Server", "Nur kritisch") und per Klick wieder laden. Per-User persistiert in localStorage; einzelne Views löschbar via 🗑-Icon.
Neu — Mini-Charts in Vulns & SCA Tabs: Über den Tabellen in den Tabs Schwachstellen und Compliance/SCA erscheinen jetzt kompakte 3-spaltige Auswertungen: bei Vulns CVSS-Verteilung + Top-Pakete + betroffene Agents, bei SCA ein SVG-Score-Histogramm mit Durchschnittslinie + Top-Policies + schlechteste Agents.
Neu — Alert-Detail-Modal Agent-Click-Filter: Im Alert-Detail-Modal ist der Agent-Name jetzt klickbarer Link → setzt den Agent-Filter im Alerts-Tab, schließt das Modal und wechselt automatisch auf Alerts (inkl. Toast "Alerts gefiltert auf Agent X").
Neu — Per-User Modul-Berechtigungen: In admin.php gibt es eine neue Tabellenspalte Module mit Modal zum Verwalten der Modul-Zugriffe (audit, wazuh, schwachstellen, pentest, training, vorschriften_upload, downloads). Nicht freigeschaltete Module werden auf dem Dashboard ausgeblendet und direkte Seiten-URLs (audit.php, wazuh.php etc.) leiten mit Flash-Banner "Zugriff verweigert" zurück auf index.php. Admins haben immer Zugriff auf alle Module.
Neu — API-Key-Verschlüsselung (AES-256-GCM): API-Schlüssel in config.json (api_key, openai_key, perplexity_key, wazuh_password) werden jetzt mit dem automatisch generierten app_enc_key (32 Byte Hex) verschlüsselt. Transparent in helpers.php via openssl_encrypt/decrypt — Werte im JSON haben den Prefix ENC::base64(IV+TAG+ciphertext). Admin-Button "🔐 Jetzt alle Keys verschlüsseln" migriert bestehende Klartext-Einträge.
Neu — Admin-Audit-Log: Neue Datei includes/audit_log.php protokolliert jede Admin-Aktion mit Timestamp, User, Rolle, IP, User-Agent, Action und Details in data/admin_audit.log (JSONL mit automatischer Rotation bei 5 MB, maximal 3 Rotationen).
Neu — Auth-Event-Logging: Erweiterung des Audit-Logs um alle Login-/Logout-/2FA-/Passwort-Events. Protokolliert werden: auth.login_success, auth.login_failed (mit Grund: wrong_password / unknown_user), auth.login_password_ok (Zwischenstufe vor 2FA), auth.logout, auth.2fa_success/_failed (mit method: totp/backup/email), auth.password_change/_failed, auth.password_reset_issued/_unknown_user.
Neu — Audit-Log-Viewer mit Filter & Export: In admin.php zeigt der Audit-Log-Bereich jetzt: Filter-Dropdown (Alle / 🔐 Anmeldungen / ⚠ Fehlanmeldungen / 👤 Benutzer / 🔒 Sicherheit / 🛡 Wazuh), 🔍-Freitextsuche, Anzeigelimit (50/200/500) und Export-Buttons ⬇ JSON + ⬇ TXT (respektieren den aktuellen Filter). Zusätzlich Button 🗑 Verlauf löschen (löscht alle Log-Dateien; die Lösch-Aktion selbst wird als security.audit_log_cleared wiederum protokolliert). Fehl-Login-Zeilen haben roten Hintergrund-Tint zur schnellen Identifikation.
Neu — Wazuh Scheduled-Import + E-Mail-Alert: Neuer Endpoint api/wazuh-cron.php (Auth via URL-Token oder Admin-Login) zieht bei Aufruf kritische Alerts, merkt sich bereits versendete Fingerprints in data/wazuh_cron_state.json und verschickt bei neuen Treffern ab Level 12 eine formatierte E-Mail-Benachrichtigung an den konfigurierten Empfänger. Admin-UI mit Kopier-Button für Cron-URL, Test-Button "Jetzt manuell ausführen" und Token-Regeneration.
Neu — Cron-Intervall-Auswahl: Das Scheduled-Import-Card hat jetzt ein Intervall-Dropdown: nur manuell/extern (Default) / 15 / 30 / 60 / 90 Minuten. Bei aktivem Intervall: (1) Browser-Auto-Trigger pingt den Endpoint automatisch während admin.php offen ist; (2) Intervall-Gate im Backend überspringt Doppel-Ausführungen innerhalb eines Intervalls ("skipped, next_allowed_in: X"). Der ▶ Jetzt manuell ausführen-Button umgeht das Gate via ?force=1.
Neu — Schwachstellen->Audit-Import mit Einzelauswahl: Auf der schwachstellenanalyse.php ist jede CVE-Zeile mit einer Checkbox versehen (Default: alle aktiv). Über der Tabelle: Schnellaktionen ✓ alle / ✕ keine / nur kritisch sowie Tri-State-Header-Checkbox. Der Import-Button zeigt live den Zähler der ausgewählten CVEs, ist bei 0 Auswahl gesperrt. Klick leitet die gewählten CVEs per localStorage-Handoff (msc5_cve_import) ins Audit-Tool weiter.
Neu — CVE → Audit-Mapper api/cve-to-audit.php: Nimmt CVE-Liste entgegen und erzeugt vollständige Audit-Feststellungen mit Prüffrage, Bezug, ausformuliertem Feststellungstext (inkl. NVD-Referenz-URL) und Heuristik-basiertem BSI-Grundschutz-Baustein-Vorschlag. Keyword-Mapping für Apache/nginx/Tomcat/OpenSSH/OpenSSL/MySQL/Log4j/Spring/SMB/RDP/Zerologon/Citrix/Firewall/VPN/DNS/PHP/GitLab etc.
Neu — NVD-Links für CVEs: CVE-IDs in der Schwachstellen-Tabelle sind klickbare Links zu https://nvd.nist.gov/vuln/detail/<id> (öffnen in neuem Tab, rot mit gepunkteter Unterstreichung und externem Link-Icon).
Neu — Dropdown-Optionen im Dark-Mode: Alle <select>-Dropdowns (Agent, MITRE-Tactic, CVSS, Score, Views) werden jetzt auch beim Aufklappen mit dunklem Hintergrund und hellem Text gerendert (option { background:#0b1829; color:#e8edf5 }). Behebt Problem dass Chrome/Edge unter Windows die OS-Defaults für Dropdown-Optionen ignoriert hat.
Geändert — Footer auf allen Seiten fixiert:index.php, audit.php, wazuh.php und wazuh-agent.php nutzen jetzt alle die Flex-Column-Body-Technik (body { display:flex; flex-direction:column; min-height:100vh } + body > footer { margin-top:auto }). Footer klebt bei wenig Content am unteren Viewport-Rand, scrollt bei langen Seiten natürlich mit.
Geändert — Dashboard-Layout bündig: Hero-Section ("Versionswahl" / "IT-Audit Plattform" / Beschreibung) + Versionsleiste + Flash-Message + Card-Grid sind jetzt in einem einzigen<div class="grid-section">-Container untergebracht. Dadurch teilen sich alle Elemente denselben Parent und fluchten garantiert links/rechts. Die .hero-Klasse wurde aufgelöst und die Typografie-Klassen in .intro-eyebrow, .intro-title, .intro-sub umbenannt.
Geändert — Login-Page Logo + Effekte: Das MSC5Labs-Logo auf login.php wurde gegen den #TMYLGGNS-Wal (transparenter Hintergrund, via PowerShell+System.Drawing freigestellt) ausgetauscht und von 140px auf 220px vergrößert. Alle dekorativen Hintergrund-Effekte (pulsierender Radial-Glow, horizontale Scanline, schwebende Partikel, Binär-Regen, Grid-Puls, blauer Card-Glow) wurden deaktiviert — nur noch das Logo selbst pulsiert im cyan Drop-Shadow.
Geändert — Donut-Legende im Zoom lesbar: Der Severity-Donut im Zoom-Modal hatte vorher die Legende abgeschnitten (SVG wurde durch globales CSS auf 100% Breite gestretcht). Gefixt durch explizite SVG-Dimensionen (360px) und inline !important, die den globalen Zoom-Selektor überschreiben. Im Zoom-Modus Schriftgröße × 2, Dot-Size von 9 auf 16px, Prozent-Angabe zusätzlich in Klammern.
Technisch — Neue API-Actions in api/users.php:set_user_modules, encrypt_api_keys, get_audit_log, clear_audit_log, set_wazuh_cron, regenerate_cron_token. Alle mit admin_log()-Hook.
Technisch — Neue .htaccess-Routen:wazuh-agent, api/wazuh-cron, api/cve-to-audit.
v2026.04.2020. April 2026Major
Neu — Wazuh SIEM-Integration (Dashboard): Neue Seite wazuh.php mit KPI-Kacheln (Agents aktiv/getrennt/nie verbunden, kritische Alerts der letzten 24h, Schwachstellen, Compliance-Score) und Tabs für Alerts, Agents, Vulnerabilities und SCA. Enthält einen Demo-Modus mit 12 fiktiven Agents, 10 Beispiel-Alerts (inkl. MITRE-IDs T1110/T1003/T1059.001 etc.), 8 CVEs (u.a. CVE-2024-3094, CVE-2024-6387) und CIS/BSI-Grundschutz-SCA-Ergebnissen — läuft sofort ohne Serveranbindung.
Neu — Wazuh-Konfiguration im Admin: Eigener Block 🛡️ Wazuh SIEM-Integration in admin.php mit Feldern für Manager-URL (Port 55000), API-User, Passwort, Demo-Modus-Toggle und SSL-Verify-Option. Inklusive Verbindungstest-Button, der JWT-Authentifizierung gegen die echte Wazuh-API prüft (/security/user/authenticate).
Neu — Wazuh-Dashboard-Card: Cyanfarbene Kachel Wazuh Security Monitoring auf dem Haupt-Dashboard index.php mit Badge Demo oder Live, Direktlink zum Dashboard und (nur für Admins) sichtbarer Konfigurations-Shortcut nach admin.php#wazuh.
Neu — SCA-Export (Option B): Tab SCA-Export im Wazuh-Dashboard konvertiert OSCAL-1.1.x-Kataloge (BSI Methodik Grundschutz++ · 61 Anforderungen, BSI GS.json · 692, BSI GS__.json · 717, BSI Stand der Technik · 582) in Wazuh-SCA-Policies im YAML-Format. Auflösung von {{ insert: param, … }}-Platzhaltern, Mapping auf Compliance-Tags (bsi, bsi_group, bsi_modal, bsi_sec_level) und drei Modi: Inventory (alle Checks als Finding), Passive (alle PASS) oder Template (leere Rule-Platzhalter zum Befüllen).
Neu — Wazuh-Alerts → Audit-Feststellungen (Option C): Toolbar-Button 🛡️ Wazuh-Alerts importieren in audit.php öffnet ein Modal mit allen Alerts (Filter für kritische Alerts ab Level 10), erzeugt aus ausgewählten Alerts automatisch neue Audit-Zeilen mit vorgefüllter Prüffrage, Bezug und ausformuliertem Feststellungstext (inkl. Zeitpunkt, Agent, Rule-ID, MITRE-Technik, Meldungstext).
Neu — Heuristisches BSI-Baustein-Mapping: Endpoint api/wazuh-to-audit.php ordnet jedem Alert passende BSI-Grundschutz-Bausteine zu über ein dreistufiges Verfahren: (1) MITRE-ATT&CK-Technik (15 gängige TIDs wie T1110→ORP.4.A8/SYS.1.3, T1003→ORP.4.A15/SYS.2.1.A25), (2) Keyword-Matching am Meldungstext (SSH, Mimikatz, PowerShell, Portscan, AV, SMB, Mail, Webserver, Firewall) und (3) Wazuh-Rule-ID-Bereiche (55xx→PAM, 616xx→Defender, 92xx→AV etc.).
Neu — Auto-Quellenzuordnung im Audit: Beim Import matcht das Frontend die gelieferten BSI-IDs gegen Dateien im Vorschriften/-Ordner (z.B. ORP.4.A8 → ORP_4_Identitaets_und_Berechtigungsmanagement_Editon_2022.pdf) und setzt gefundene PDFs automatisch als Quellen-Chips. Respektiert die MAX_SOURCES-Grenze pro Zeile.
Neu — OSCAL-Katalog-Fallback: Findet das PDF-Matching für eine BSI-ID keine passende Datei (z.B. weil der Baustein-PDF nicht hinterlegt ist), wird automatisch der passende OSCAL-Katalog-JSON als Fallback-Quelle ergänzt (BSI GS__.json für SYS/APP/NET/ORP/OPS/CON/DER/INF/IND, BSI-Methodik-Grundschutz++-catalog.json für GC/STM/UMS/VRB/PERF) — so hat jede Zeile eine KI-auswertbare Referenz.
Neu — AI-Modell-Zuweisung pro Benutzer: In der Benutzerverwaltung (admin.php) kann pro User der erlaubte AI-Anbieter festgelegt werden: ○ Global (folgt System-Default), 🟣 Anthropic Claude, 🟢 OpenAI GPT-4o oder 🔵 Perplexity Sonar. Admins sind automatisch von jeder Restriktion befreit.
Neu — AI-Nutzungslimits pro Benutzer: Konfigurierbar im AI-Modal mit Limit (Anfragen, 0=unbegrenzt) und Periode (pro Tag oder pro Monat). Admins werden nicht gezählt und nicht limitiert. Bei erreichtem Kontingent liefern die AI-Endpoints HTTP 429 mit klarer Fehlermeldung und Reset-Hinweis.
Neu — Zähler-Reset & Live-Usage: Admin-Modal zeigt die aktuelle Nutzung des gewählten Users (Zähler, letzter Provider, Timestamp) und erlaubt Zurücksetzen des Zählers per Klick. Daten liegen in data/ai_usage.json.
Geändert — Guard-Mechanismus an AI-Endpoints:api/analyze.php, api/reformulate.php, api/reformulate-feststellung.php, api/summarize.php und api/humanize.php nutzen jetzt enforce_ai_guard() aus includes/user_limits.php — bricht Requests bei überschrittenem Limit oder gesperrtem Provider ab und erzwingt bei Nicht-Admins den ihnen zugewiesenen Provider (ignoriert das globale Setting). Erfolgreiche Calls inkrementieren den Zähler per track_ai_usage().
Geändert — API-Erweiterungen Benutzerverwaltung:api/users.php um drei Aktionen ergänzt: set_user_ai (Provider/Limit/Periode speichern), reset_user_usage (Zähler auf 0) und get_usage_overview (Liste aller User mit aktueller Nutzung).
Fix — AI-Zelle in Benutzertabelle: Die neue Spalte AI-Anbieter / Limit rendert nicht mehr unsichtbar (ursprünglich button mit verschachtelten Flex-Spans, die mit der .btn{white-space:nowrap}-Regel kollidierten). Umgebaut auf einen schlanken <a>-Block mit display:block, Hover-Effekt und zweizeiligem Inhalt (Provider + Limit/Periode).
Technisch — Neue Dateien:wazuh.php, api/wazuh.php, api/wazuh-to-audit.php, api/export/wazuh-sca.php, includes/user_limits.php.
Neu — Fixierter Header: Header, Toolbar und BSI-Ticker bleiben beim Scrollen oben fixiert (position: sticky auf Wrapper-Div .sticky-top) — sowohl auf audit.php als auch index.php.
Neu — Session-Timer Auto-Reset: Jede Seiten-Navigation setzt den 90-Min Abmelde-Timer automatisch zurück. Nur /api/*-Requests verlängern die Session nicht.
Neu — Täglicher Changelog-Check: Cron-Task prüft täglich um 18:00 Uhr, ob Updates vorliegen, und erstellt automatisch einen Changelog-Eintrag falls Änderungen am Source-Stand existieren.
Neu — Benutzer-Erstanlage ohne 2FA: Neu angelegte Benutzer müssen beim ersten Login kein 2FA durchlaufen — nur das vom Admin vergebene temporäre Passwort ändern. 2FA wird erst nach dem Passwortwechsel aktiv.
Neu — 2FA-Toggle pro Benutzer: In der Benutzerverwaltung (admin.php) kann 2FA pro User individuell aktiviert oder deaktiviert werden. Beim Deaktivieren wird der TOTP-Secret des Users automatisch entfernt.
Geändert — Passwort-Reset:reset_pw-Action setzt zusätzlich must_change_password=true, sodass der Benutzer beim nächsten Login sein Passwort ändern muss.
Offline-Version — WebLive-Sync: Alle aktuellen Webspace-Funktionen (Templates, Static-Assets, API-Routen) wurden in die Offline-Version MSC5_Win_VS integriert. Inkl. .php-Alias-Routen (audit.php → /audit, api/analyze.php → /api/analyze etc.) für volle WebLive-Kompatibilität ohne Template-Änderungen.
Offline-Version — Lokale GGUF-Auswahl: Offline-UI mit Radio-Buttons zur Auswahl der lokalen gpt4all GGUF-Modelle aus models/-Ordner wiederhergestellt. force_online-Toggle zwischen Cloud-API und lokaler KI.
Neu — Mikrofon-Auswahl pro Zeile: Dropdown neben jedem Diktat-Button in der Feststellung (Prüfteam). Pre-Claim via getUserMedia({deviceId:{exact}}) zwingt Chrome/Edge, das gewählte Gerät für SpeechRecognition zu nutzen. Persistent in localStorage.msc5_mic_id.
Neu — Hover-Tooltips Schwachstellenanalyse: Info-Dot je Scan-Methode (26 Methoden, offline + online) mit 280 px Erklärungs-Popup zu Funktion, Quelle und Beispielausgabe.
Neu — Hover-Tooltips Pentest: Info-Dot zu allen 37 Prüfmethoden (osint, dns, shodan, tls, smb, nse_safe, default_creds, spray, hashcrack u. a.) mit Titel + Erklärung (lila Theme, 300 px).
Geändert — Offline-Badge & Header: Offline-Banner und Moduspunkt in Warnrot statt Amber. Header-Buttons (Benutzer, Session, Abmelden) auf Schwachstellen- und Pentest-Seite an audit.php-Styling angeglichen.
Neu — Trainingslabor erweitert: 30 → 77 Ziele mit Schwierigkeitsstufen (Basic / Advanced / Expert) und Filter-Chips. Advanced- und Expert-Ziele mit 5–9 Schritt-für-Schritt-Aufgaben (collapsible). Szenarien u. a. adcs-esc1, kerberoast-forest, ransomware-dfir, apt-simulation, purple-team, k8s-escape, scada-refinery.
Neu — Zufalls-Scan-Ergebnisse: Trainings-Scans liefern randomisierte Ports (Pool 34), CVEs (Pool 22: Log4Shell, Zerologon, EternalBlue, CitrixBleed, Spring4Shell …) und OS-Fingerprints je Host-Typ. Math.random + Pool-Splice, kein Seed — keine zwei Scans identisch.
Fix — Tools-Row Auto-Hide: Bei fehlendem /api/pentest/tools-Endpoint (Web-Edition ohne Flask) wird Tool-Statuszeile automatisch ausgeblendet statt „Fehler beim Prüfen" anzuzeigen.
Fix — resolveRowProfile(): Helper liefert pro Zeile {profile, custom_stil}. Garantiert korrekte Stil-Anwendung (inkl. MontanaBlack / Custom-Profile) in Analyse, Feststellungs-Reformulierung, Bewertung und Empfehlung.
Neu — Changelog KI-Generator: Admin-Button „🤖 Change Log Updates (KI)" auf changelog.php. Admin gibt Stichpunkte ein, KI erzeugt formatierten Eintrag (Kategorie-Prefix, HTML-konform), Vorschau im Modal, Übernahme in Edit-Modus zur Nachbearbeitung.
Neu — Funktionsübersicht-PDF: Komplett überarbeitetes MSC5_Labs_Funktionsuebersicht.pdf mit allen aktuellen Features. Zwei Varianten: Dark-Cyan-Theme (Tool-Design) und druckfreundliche helle Variante.
Freitext-Modul – Schreibstil-Profile: 7 Profile (BSI, Militärisch, Technisch, Management, Audit, Forensik, 🫶 Humanizer) als Dropdown, wirken auf Umformulieren & Auto-Fill
Humanizer: 🫶-Button pro Feld (Feststellung, Bewertung, Folge, Kurzfassung) – entfernt AI-Muster (Wikipedia „Signs of AI writing") bei erhaltenem Fachinhalt
Prüfer-Hinweise (Diktat-Marker): „HINWEIS ANFANG … HINWEIS ENDE" + Inline [[…]] werden aus Quelltext entfernt und nur als Kontext an KI gegeben – nicht in der Ausgabe
Kurzfassung: Neues Feld unter Folge/Maßnahmen – KI verdichtet Feststellung+Bewertung+Folge in 5–7 Sätze
Inspektionsnummer: Split-Input mit Präfix „W-IN-" + zwei Nummern-Felder + Live-Preview
Projektname + Projektfirma/Ansprechpartner: Neue Felder unter Dienststelle
Prüfteamleiter: Zusätzliches Feld unter Prüfer
Rich-Text-Toolbar: Aufzählung (Stichpunkte), Nummerierte Liste, Einzug vor/zurück für Feststellung
Status-Toggle: „In Bearbeitung" / „Erledigt"-Buttons vor dem Speichern, mit Badge in Gespeichert-Übersicht
Speichern vs. Speichern & Neu: Getrennte Buttons, Upsert via Dokument-ID → keine Duplikate beim erneuten Speichern
Suche + Status-Filter: Live-Suche in Gespeichert-Übersicht über Inspektionsnummer, Dienststelle, Projekt, Thema, Prüfer; Status-Dropdown (Alle/Erledigt/In Bearbeitung/Offen)
Anlagen-Upload: PDF, Word, Excel, JSON, Audio per Drag&Drop oder File-Picker (max. 20 MB) – server-seitig unter uploads/anlagen/ mit .htaccess-Schutz
Sprach-Memos: MediaRecorder-Aufnahme mit Mikrofon-Auswahl, Live-Timer (Max. 10 Min), Inline-Audio-Player in Anlagen-Liste
Exports erweitert: Excel (SpreadsheetML 2003) + JSON + Word + PDF mit Profil, Projektdaten, Kurzfassung
Umformulieren-Buttons: Beschriftung „Let JHNLGGNS cook"; Auto-Fill-Button „JHNLGGNS macht das schon"
Session-Timeout: 60 → 90 Minuten
Changelog-Suche: Live-Filter mit Highlight über alle Versionen
Dashboard: Dropdown-Lesbarkeit (dark-mode-Fix) für Status-Filter