SEC-1a — GUI/DB/OPS Security Audit

Projekt: Steve-TradingBot · Phase: SEC-1a Read-only Audit · Author: claude-opus-4-7[1m]
Generated: 2026-05-13 00:01 UTC · master HEAD: cd37822 (MH-4c closed)
Audit-Scope: GUI Exposure · Filament/Laravel Auth · DB · Secrets · Logs · Docker/Ops
Audit-Modus: READ-ONLY — keine Config-Mutation, kein Restart, kein Patch
Status: NO-GO für MH-5 ohne SEC-1b

Inhaltsverzeichnis
  1. Executive Summary — Severity-Verteilung + GO/NO-GO-Verdict
  2. Audit-Methodik + Scope-Abgrenzung
  3. Bedenken & Begründung (warum SEC vor MH-5)
  4. Findings — CRITICAL (2)
  5. Findings — HIGH (6)
  6. Findings — MEDIUM (8)
  7. Findings — LOW (6) + INFO (5)
  8. Sofortige Stop-Trigger
  9. Pflicht-Fixes pro Phase (SEC-1b / SEC-1c / SEC-1d)
  10. Zukünftige Schnittstellen + Phaseneinordnung
  11. SEC-1b Aufwands-Schätzung
  12. GO/NO-GO Empfehlung MH-5

1 — Executive Summary

SeverityCountBedeutungStatus
CRITICAL2Active Attack-Surface ODER Data-Exfil-RiskSOFORT-Fix vor MH-5
HIGH6Pre-Mainnet-Blocker; mehrheitlich Pre-MH-5-BlockerSEC-1b/c Mandatory
MEDIUM8Mitigierbar vor MH-5 ODER MainnetHardening
LOW6Hardening-BacklogOptional
INFO5Architektonische AwarenessDoku
Verdict: NO-GO für MH-5 bis SEC-1b komplett. Begründung in §3 + §12.

2 — Audit-Methodik + Scope-Abgrenzung

Methodik

Read-only Inspection aller relevanten Surface-Layer via Bash-Calls. Keine Mutation, kein Restart, keine Config-Änderung. Befunde wurden via:

Scope-Abgrenzung

In ScopeOut of Scope
GUI-Exposure (Nginx, Ports, TLS, Auth, Rate-Limits)Code-Audit der Filament-Resources (statisch, MH-5 Plan-Review-Sache)
Filament/Laravel-Auth (Sessions, CSRF, 2FA, Throttling)Vulnerability-Scanner-Run (npm audit / composer audit) — kann SEC-1d sein
DB-User-Permissions + pg_hbaSQL-Injection-Pen-Test der Filament-Forms (MH-5 spezifisch)
Secrets (.env, htpasswd, Logs-Leak)Key-Rotation-Strategie (SEC-1c)
Logs (Auth-Failures, Audit-Surface)SIEM/Loki-Aggregation (SEC-1d Hardening)
Docker/Ops (exposed ports, watchdog, cron)Bot-Side Python Code-Audit (separate Phase)

3 — Bedenken & Begründung: Warum SEC vor MH-5

Die Operator-Frage war explizit: "VOR MH-5 müssen wir die Security fertigstellen!". Das ist begründet durch:

3.1 Risikoeskalation durch MH-5

AspektPre-MH-5 (jetzt)Post-MH-5
Operator-Actions live0 (alle Phasen bisher: dormant code, kein UI-Trigger)6 (request/approve/reject/pause/resume/release)
Filament-UI-SurfaceBaselineHoldings + Apply-Profile (existing)+ ManagedProposalResource + ManagedAssets Page + Approve-Wizard
State-File-Mutationnicht direkt (Worker MH-6 noch nicht)nicht direkt (Worker MH-6 immer noch nicht; aber commands queued)
Approver-Privilege-Theft-Impactniedrig (nur view)HOCH (approve = später Live-Promote-Path)
UI-Code-Bug-Exposure5 existing Filament-Resources+ 5+ neue Resources + Wizard mit Multi-Step-Logic

3.2 Konkrete Risk-Multiplier

  1. Filament-Wizard-Code = neue Attack-Surface. Jeder MH-5-Bug bei aktivem APP_DEBUG leakt Stack + DB-Queries + Pfade.
  2. Approve-Action im Wizard = potentielle Live-Trading-Brücke. Auch wenn Worker MH-6 noch nicht greift — die Audit-Trails / Commands sind real. Approver-Account-Theft jetzt = vorhersehbarer Schaden später.
  3. SSH-Brute-Force IST aktiv. Mid-MH-5-Implementation = Mid-Compromise. Wir bauen in einer "leakenden" Umgebung weiter.
  4. DB-SUPERUSER-Privilege. Filament hat Form-Inputs in jeder neuen Resource — bei SQL-Injection-Bug = volle DB.
  5. Single-Factor-Auth für Admin. Ein Password schützt alle 6 zukünftigen MH-5-Actions. Industry-Standard ist 2FA für privilegierte Actions.

3.3 Was MH-5 NICHT entschärft

MH-5 hat eigene Defense-Layer (admin-only actions, hardcoded testnet, Hard-Confirm), aber:


4 — Findings: CRITICAL (2)

C1 — CRITICAL SSH PermitRootLogin yes + fail2ban INACTIVE + ACTIVE BRUTE-FORCE

Evidence /etc/ssh/sshd_config: PermitRootLogin yes
systemctl is-active fail2ban → inactive
/var/log/auth.log: aktiv um 23:55 UTC live brute-force:
May 12 23:55:54 sshd[2727994]: Failed password for root from 45.148.10.147 port 15662 ssh2
May 12 23:55:57 sshd[2728599]: Invalid user db2inst1 from 118.99.102.207 port 54350
RiskServer-Takeover möglich; gesamter Bot+GUI+DB-Stack kompromittierbar. Eine successful brute-force-Login = root-shell = full credential dump via /projekte/Steve-TradingBot/.env + GUI-DB + Telegram-Token + Anthropic/OpenAI Keys.
ErklärungSSH ist der primäre Server-Access-Path. Default-Ubuntu lässt root-login mit Password zu. Ohne fail2ban gibt es keine IP-Throttling-Schicht. Active brute-force-Versuche von zwei verschiedenen IPs zeigen dass die IP bereits in Standard-Scan-Listen ist.
Recommended Fix1. /etc/ssh/sshd_config: PermitRootLogin prohibit-password (oder no, falls SSH-Key vorhanden)
2. apt install fail2ban + ssh.local jail enabled
3. UFW oder iptables IP-allowlist falls Operator nur von festen IPs zugreift
4. systemctl restart sshd
PhaseSEC-1b SOFORT — vor jeder weiteren Code-Phase

C2 — CRITICAL APP_DEBUG=true + APP_ENV=local in GUI Production

Evidence /projekte/Steve-TradingBot/gui/.env:
APP_ENV=local
APP_DEBUG=true
RiskLaravel zeigt bei jedem unhandled Exception:
  • Full Stack-Trace (alle Files + Line-Numbers)
  • Aktuelle Environment-Variablen (DB_PASSWORD, APP_KEY, etc. via Whoops-Page)
  • Aktuelle DB-Queries (mit Params)
  • Server-Pfad-Struktur (/var/www/html/...)
Jeder MH-5 Filament-Form-Bug = volle Disclosure für Drive-By-Visitor.
ErklärungLaravel hat zwei Production-Sicherheits-Flags: APP_ENV + APP_DEBUG. Beide müssen production bzw false sein in Production-Deployments. Aktuell ist GUI auf local/true konfiguriert — das ist Development-Standard, NICHT Production-tauglich.
Recommended Fix1. gui/.env: APP_DEBUG=false
2. gui/.env: APP_ENV=production
3. docker exec steve-tradingbot-gui php artisan config:cache
4. docker exec steve-tradingbot-gui php artisan view:cache
PhaseSEC-1b SOFORT

5 — Findings: HIGH (6)

H1 — HIGH DB User tradingbot_gui ist PostgreSQL SUPERUSER

Evidence
\du
   Role name    |   Attributes
----------------+------------------------------------------------------------
 tradingbot_gui | Superuser, Create role, Create DB, Replication, Bypass RLS
RiskApp-User kann jede Tabelle ALTER, jeden Role anlegen, Replication starten — bei GUI-RCE (SQLi, deserialization, debug-disclosure) = volle DB-Kontrolle, inkl. Replikation auf externen Server (Datenexfil), audit_events-Mutation (Audit-Trail-Tampering), oder löschen.
ErklärungPostgres-Best-Practice: App-User hat NUR die Privilegien die er braucht (SELECT/INSERT/UPDATE/DELETE/REFERENCES auf eigene Tabellen). SUPERUSER ist nur für Migration-Run und sollte separater User sein.
Recommended Fix1. neuen App-User anlegen: CREATE USER tradingbot_app WITH PASSWORD '...';
2. GRANT SELECT,INSERT,UPDATE,DELETE,REFERENCES ON ALL TABLES IN SCHEMA public TO tradingbot_app;
3. GRANT USAGE ON SCHEMA public TO tradingbot_app;
4. App .env auf neuen User umstellen
5. SUPERUSER-Role auf separaten migrate-only User behalten
PhaseSEC-1c vor MH-5 (oder unmittelbar parallel)

H2 — HIGH Portainer publicly exposed auf 0.0.0.0:9443

Evidence docker ps: portainer 0.0.0.0:9443->9443/tcp, 0.0.0.0:8000->8000/tcp
curl https://127.0.0.1:9443 → Portainer login page
RiskPortainer ist Web-UI für gesamten Docker-Stack inkl. Container-Shell-Action. Bei Login-Compromise = Pivot zu Bot-Container = Bot-Live-Trading-Kontrolle, Volume-Mount-Manipulation, Image-Pull-Replace.
ErklärungPortainer-Default-Listening ist 0.0.0.0:9443. Für Production sollte Portainer entweder über VPN-only, hinter Nginx-Reverse-Proxy mit Basic-Auth + Rate-Limit, oder auf localhost gebunden sein.
Recommended Fixdocker-compose.yml für Portainer-Service: ports: ["127.0.0.1:9443:9443"]
+ Optional Nginx-Reverse-Proxy mit Basic-Auth-Layer für Remote-Access
PhaseSEC-1b vor MH-5

H3 — HIGH Cockpit-ws publicly exposed auf 0.0.0.0:9090

Evidence ss -tlnp: cockpit-ws pid=1439585 listening 0.0.0.0:9090
curl http://127.0.0.1:9090 → Cockpit Loading page
RiskCockpit ist Linux-Admin-Web-UI mit Shell-Access. Bei Login-Compromise = root-shell des Hosts = full server-takeover, DB-Direct-Access, .env-Dump.
ErklärungCockpit ist auf vielen Ubuntu-Systemen vor-installiert. Default-Setup hat keine IP-Allowlist. Listening auf 0.0.0.0 = von überall im Internet erreichbar.
Recommended FixCockpit-systemd-socket-config (/etc/systemd/system/cockpit.socket.d/listen.conf) auf ListenStream=127.0.0.1:9090 setzen + systemctl daemon-reload + systemctl restart cockpit.socket
PhaseSEC-1b vor MH-5

H4 — HIGH Dev-WordPress public auf 0.0.0.0:18080

Evidence docker ps: dev-wordpress-1 0.0.0.0:18080->80/tcp
RiskStandard-Wordpress-Installation, vermutlich nicht maintained. WordPress hat regelmäßige CVEs. Bei nicht-aktuellen Plugins = potentieller RCE-Vektor. Kompromiss erlaubt Pivot ins Docker-Network und damit zu anderen Services.
Erklärung"Dev-" Prefix deutet auf Development-Container. Bleibt aber laufen seit 8 Tagen — vergessene Test-Umgebung erhöht Attack-Surface.
Recommended FixFalls WordPress nicht benötigt: docker stop dev-wordpress-1 dev-wpcli-1 dev-db-1.
Falls benötigt: ports: ["127.0.0.1:18080:80"] + Plugin-Updates + WAF.
PhaseSEC-1b

H5 — HIGH Self-signed SSL ohne CA-Validation

Evidence dashboard-ssl: ssl_certificate /root/steves-tradingbot/ssl/dashboard.crt
/etc/letsencrypt/live/ ist leer
RiskBrowser-Warning desensibilisiert Operator ("Klick auf Weiter trotz Warning"). MITM auf TLS-Schicht möglich, weil Operator-Cert-Validation in der Praxis übersprungen wird. Auch für Telegram-Webhooks problematisch.
ErklärungLet's Encrypt ist kostenlos und automatisierbar. Self-Signed-Certs sind nur für DEV-Tests akzeptabel; in Production untergrabbar.
Recommended Fix1. Domain für 81.169.213.37 registrieren (z.B. steve-tradingbot.example.com)
2. certbot --nginx -d steve-tradingbot.example.com
3. Nginx-Config auf ACME-validated cert umstellen
PhaseSEC-1c vor Mainnet (kein MH-5-Blocker da MH-5 testnet-only)

H6 — HIGH 2FA für Filament-Admin NICHT vorhanden

Evidence SELECT * FROM users: 1 row: id=23, email=admin@example.local, role=admin
users-Tabelle hat KEINE two_factor_secret, two_factor_recovery_codes, two_factor_confirmed_at Spalten.
RiskPassword-only Auth für Operator-Action-Privilege. Approve/reject/release haben High-Impact (Live-Trading-Promote). Credential-Theft (Phishing, Keylogger, Reused-Password-Database) = full Bot-Control.
ErklärungIndustry-Standard für privilegierte UI-Actions ist 2FA via TOTP (Google Authenticator). Filament hat 2FA-Plugins (z.B. stechstudio/laravel-totp oder Laravel Fortify). MH-5 macht Approve-Wizard real — ohne 2FA ist Single-Password ein Single-Point-of-Failure.
Recommended Fix1. Migration für 2FA-Spalten (two_factor_secret, two_factor_recovery_codes)
2. Filament-2FA-Plugin install + Konfig
3. Admin user 2FA-Enrollment-Flow
4. Filament canAccess() prüft 2FA-confirmed-at NOT NULL
PhaseSEC-1c vor MH-5 — MH-5 macht admin-only actions live

6 — Findings: MEDIUM (8)

#SevFindingRiskFixPhase
M1MEDLogin-Throttling unbekannt / nicht explicit konfiguriertBrute-Force gegen admin@example.local möglichRateLimiter explicit in AppServiceProvider pinnen (3/min/IP + per-user-lockout 15min) + TestSEC-1b
M2MED.env Files 644 (world-readable)Bei jedem non-root user-shell-access leakt secretchmod 600 .env + zukünftige Backups mit 0600SEC-1b
M3MED/srv/shares/backups/ enthält .env KopienSingle chmod-Fehler exposed Secrets via shares-8088 autoindex (heute durch 0700 parent-dir mitigiert)Backups außerhalb /srv/shares/ verschieben ODER .env aus Backup-Snaps löschenSEC-1b
M4MEDNur 1 admin mit default-haftem Email admin@example.localDefault-Account-Antipattern; Password möglicherweise schwachEmail auf real-name; Password rotieren; optional backup-adminSEC-1c
M5MEDSESSION_ENCRYPT=falseSession-Cookies in DB klartext-lesbar bei DB-AccessSESSION_ENCRYPT=true + config:cacheSEC-1c
M6MEDHR-6 + recon24 temp-vhost-configs in sites-available/ (orphan, NICHT enabled)Risk-of-accidental-enable; cognitive loadrm der temp-vhosts nach Phase-ClosureSEC-1d
M7MEDWorker-Container "unhealthy" Status pre-existingSymptom-Mask: echte Outage-Detection erschwert; Watchdog respawnt regelmäßigHealthcheck-Script im Worker-Image auf realen command_worker heartbeat anpassenSEC-1d Ops
M8MEDLaravel.log enthält File-Path-DisclosurePath-Disclosure für Recon (/var/www/html/storage/app/...)Log-Level auf error; APP_DEBUG=false reduziert (siehe C2)SEC-1b (via C2)

7 — Findings: LOW (6) + INFO (5)

LOW

#FindingFix
L1CSRF-Middleware-Setup unbekannt (Laravel 11+ Pattern hat verschoben)bootstrap/app.php ValidateCsrfToken-config prüfen
L2dashboard-ssl proxied Bot-Dashboard (port 8050) NICHT Filament-GUI (port 8090) — möglicher MisconfigNginx-Routing prüfen ob Filament wirklich extern erreichbar; aktuell nur via HR-6/recon24-vhosts (orphans)
L3Sendmail-MTA listening 127.0.0.1:25 — Default Ubuntu, nicht usedsystemctl disable sendmail falls nicht benötigt
L4Multiple .env backups (10+) im Repo + /srv/shares/backups/Lifecycle für Backups (rotation + secure storage)
L5netdata exposed auf 0.0.0.0:9080Bind 127.0.0.1 oder ip-allowlist
L6Sendmail-Mail-Submission auf 127.0.0.1:587OK as-is (localhost only)

INFO

#FindingBedeutung
I1Public IP 81.169.213.37Direct-IP-Exposure; kein DNS-Hostname registriert
I2Bot port 8050 publicly exposedBot-internal-API extern erreichbar — Endpoint-Surface prüfen (siehe L2)
I3Multiple Docker networks isoliertDefense-in-Depth durch network-isolation; GUI+Bot+DB+Worker im steve-tradingbot_clawbot-net
I4UFW NICHT installiertFirewall-Layer fehlt — iptables direct, keine Chain-Inspection
I5Watchdog läuft als root via cron */5Akzeptabel — root-execution erforderlich (docker control)

8 — Sofortige Stop-Trigger

TriggerAuswirkung
C1 SSH-Brute-Force aktivNICHT MH-5 starten bis SSH abgesichert. Risk: Mid-Implementation-Compromise.
C2 APP_DEBUG=trueNICHT MH-5 starten — jeder Filament-Error leakt Stack + Pfade + DB-Queries
H1 DB SUPERUSERNICHT MH-5 starten — Filament RCE = volle DB-Übernahme
H2 Portainer publicIndependent vector — Container-Pivot zu Bot via Portainer-Shell-Action
H3 Cockpit-ws publicIndependent vector — Server-Admin via Cookie-Theft
H6 Kein 2FA für AdminMH-5 macht admin-only Actions REAL — Single-Password unzureichend

9 — Pflicht-Fixes pro Phase

SEC-1b (Pre-MH-5 Mandatory)

  1. C1: SSH PermitRootLogin prohibit-password + fail2ban install/enable + UFW oder iptables IP-allowlist
  2. C2: APP_DEBUG=false, APP_ENV=production, php artisan config:cache
  3. H2: Portainer auf 127.0.0.1 binden
  4. H3: Cockpit-ws auf 127.0.0.1 binden
  5. H4: dev-wordpress-1 stoppen oder localhost-bind
  6. H6: Filament 2FA install + admin user 2FA-Enroll
  7. M1: Login-Throttling explicit pinnen (3/min, lockout 15min)
  8. M2: .env chmod 600
  9. M3: Backups mit .env-Inhalten außerhalb shares/ verschieben
  10. M8: erledigt via C2 (APP_DEBUG=false)

SEC-1c (Pre-Mainnet Mandatory)

  1. H1: DB user privileges reduzieren (kein SUPERUSER für App)
  2. H5: Let's Encrypt SSL für Production (kein self-signed)
  3. M4: Admin email + password rotation
  4. M5: SESSION_ENCRYPT=true
  5. L1: CSRF-Middleware Verification
  6. L2: dashboard-ssl Routing Review

SEC-1d (Hardening Backlog, post-MH-5)

  1. M6: orphan vhosts cleanup
  2. M7: Worker healthcheck fix
  3. L3/L5: sendmail/netdata bind-restriction
  4. L4: Backup-Rotation-Lifecycle
  5. Centralized Audit-Log-Aggregation (Grafana Loki)
  6. Security-Headers global (CSP, HSTS, X-Frame-Options, Permissions-Policy)
  7. Vulnerability-Scanner-Run (npm audit / composer audit)
  8. Filament-Form-Security-Pen-Test (SQLi / XSS / CSRF)

10 — Zukünftige Schnittstellen + Phaseneinordnung

10.1 Phasen-Roadmap mit SEC-Integration

PhaseInhaltSEC-Vorbedingung
SEC-1a ✅ jetztRead-only Audit (dieses Dokument)
SEC-1b nächstesSOFORT-Fixes (C1/C2/H2/H3/H4/H6/M1/M2/M3)SEC-1a Operator-Approval
MH-5Filament Wizard / ManagedHoldings UISEC-1b komplett
SEC-1c parallelDB-Privs reduzieren, Let's Encrypt, Admin-Rotation, Session-Encryptparallel zu MH-5 erlaubt
MH-6Worker-Handler (8 CommandTypes mit Two-File-Atomic)SEC-1b zwingend; SEC-1c bevorzugt
SEC-1d HardeningLogs / Healthcheck / Security-Headers / Pen-Testparallel oder post-MH-5
MH-7Bot-Wiring (Restart-Pflicht; Bot-self-emit flag_managed_drift)SEC-1c komplett; SEC-1d bevorzugt
MH-8Testnet-Drill End-to-EndSEC-1c komplett
MH-9 / MainnetWorker-Daemon Aktivierung + Mainnet-Pre-Sign-OffSEC-1c + SEC-1d komplett + 5-Layer-Mainnet-Block verifiziert

10.2 Schnittstellen zu zukünftigen Komponenten

SEC ↔ MH-5 (Filament UI)

SEC ↔ MH-6 (Worker-Handler)

SEC ↔ MH-7 (Bot-Wiring)

SEC ↔ Mainnet-Pre-Sign-Off

10.3 Backlog-Pin-Vorschlag

Nach SEC-1b Closure: memory/sec_1a_audit_findings_pin.md mit Verweis auf alle 27 Findings + Status-Tracking (offen/in-progress/closed) wäre sinnvoll.

Nach SEC-1c Closure: memory/sec_pre_mainnet_checklist.md mit allen pre-Mainnet-Pflichtfixes (H1/H5/M4/M5) als hard-gate vor MH-9.


11 — SEC-1b Aufwands-Schätzung

ItemEffortRisk
C1 SSH-Hardening (sshd_config + fail2ban + iptables)15minLOW (well-known)
C2 APP_DEBUG + APP_ENV + config:cache5minLOW
H2 Portainer rebind to 127.0.0.115min (docker-compose edit + restart)LOW
H3 Cockpit-ws rebind10min (systemd-override)LOW
H4 dev-wordpress-1 stop oder rebind5minLOW
H6 Filament-2FA install + Admin enroll60-90minMEDIUM (Migration + Plugin-Config + Testflow)
M1 Login-Throttling pin + Test30minLOW
M2 chmod 600 .env5minLOW
M3 Backup-Secret-Cleanup15minLOW
Total~2.5-3hMEDIUM (H6 ist Hauptaufwand)

Backup-Pflicht vor SEC-1b: pg_dump + cp /etc/ssh/sshd_config + cp docker-compose.yml + cp gui/.env als Rollback-Punkte.


12 — GO/NO-GO Empfehlung MH-5

Empfehlung: NO-GO für MH-5 ohne SEC-1b

Begründung:

AspektBewertung
C1 SSH-Attack-in-ProgressLIVE attack; mid-implementation-compromise-risk acute
C2 APP_DEBUG=trueJeder MH-5 Filament-Bug leakt Stack — MH-5 hat viel neuen Filament-Code = viele potentielle Errors
H6 Kein 2FA + admin-only actionsMH-5 macht approve/reject/release Live-Path real — Single-Factor unzureichend
H1 DB SUPERUSER + MH-5 Wizard mit DB-ReadsErhöhtes Risiko bei SQL-Injection-Vektor in Filament-Form

MH-5 ist nur akzeptabel mit:

  1. SEC-1b komplett (alle CRITICAL + HIGH H2/H3/H4/H6 + MEDIUM M1/M2/M3) VOR Code-Beginn MH-5
  2. SEC-1c kann parallel zu MH-5 laufen (H1 DB-Privs / H5 SSL / M4 Admin / M5 Session-Encrypt) — kein MH-5-Blocker
  3. SEC-1d als Sprint-Backlog post-MH-5

Empfohlener Pfad

SEC-1b (Pre-MH-5 Mandatory)
   ├─ SSH-Hardening + fail2ban + UFW
   ├─ APP_DEBUG=false + config:cache
   ├─ Portainer/Cockpit/Dev-WP localhost-bind
   ├─ Filament-2FA + admin enrollment
   ├─ Login-Throttling explicit
   ├─ .env chmod 600
   └─ Backups mit Secrets aus /srv/shares/ raus
        ↓
[GO MH-5 wird hier möglich]
        ↓
SEC-1c parallel zu MH-5 (DB-Privs / SSL / Admin / Session-Encrypt)
        ↓
SEC-1d Hardening-Backlog (post-MH-5)
        ↓
[GO Mainnet wird hier möglich, alle SEC-1c + Mainnet-Pre-Conditions]

STOP vor SEC-1b. Erwarte Operator-GO für Security-Hardening-Phase. NO-GO für MH-5 bis SEC-1b komplett — insbesondere C1 (SSH-Attack), C2 (APP_DEBUG), H6 (2FA).

© Steve-TradingBot · SEC-1a · Read-only Security Audit · 2026-05-13