Sicherheit

Selbstaudit nach OWASP ASVS

Die Serverseite von GameAP wurde nach dem OWASP Application Security Verification Standard (ASVS) geprüft — einer offenen Liste konkreter, überprüfbarer Sicherheitsanforderungen, von der Speicherung von Passwörtern bis zum Umgang mit hochgeladenen Dateien.

KI-Agenten sind die Anforderungen einzeln durchgegangen, und jede Schlussfolgerung wurde anschließend von Hand geprüft. Jede Anforderung ist als erfüllt, teilweise erfüllt oder nicht erfüllt markiert, mit Verweisen auf den zugehörigen Code und die Tests. Beide Berichte sind öffentlich, einschließlich der Anforderungen, die noch nicht erfüllt sind.

So ist das Panel geschützt

Login und Passwörter

  • Passwörter werden nur als langsamer Einweg-Hash (bcrypt) gespeichert, nie in lesbarer Form.
  • Ein Passwort braucht mindestens 12 Zeichen, rund 46.000 gängige Passwörter werden abgelehnt.
  • Nach 5 Fehlversuchen für ein Konto oder 20 von einer IP-Adresse wird der Login für 15 Minuten pausiert.
  • Das Login-Formular antwortet gleich und gleich schnell, egal ob das Konto existiert oder nicht.
  • Ein CAPTCHA lässt sich zum Formular hinzufügen: reCAPTCHA oder Cloudflare Turnstile.

Zwei-Faktor-Authentifizierung

  • Codes aus einer Authenticator-App (TOTP) sowie 10 einmalige Wiederherstellungscodes.
  • Pflicht für Administratoren: Nach einer Übergangsfrist von 30 Tagen kann ein Administrator ohne 2FA nur noch 2FA einrichten.
  • Das 2FA-Secret wird verschlüsselt in der Datenbank gespeichert (AES-256-GCM), Wiederherstellungscodes nur als Hash.
  • Ein bereits verwendeter Code wird abgelehnt, pro Login gibt es 5 Versuche. Zum Abschalten von 2FA sind Passwort und Code nötig.

Sitzungen und API-Tokens

  • Sitzungstokens sind verschlüsselt und fälschungssicher (PASETO v4). Sie laufen nach 24 Stunden ab, mit „Angemeldet bleiben“ nach 7 Tagen.
  • Beim Abmelden wird das Token auf dem Server widerrufen. Nach einer Passwortänderung funktionieren zuvor ausgestellte Sitzungen und API-Tokens nicht mehr.
  • API-Tokens haben eingeschränkte Berechtigungen, werden nur einmal angezeigt, als Hash gespeichert und lassen sich jederzeit widerrufen.
  • Langlebige Tokens werden in Links nie akzeptiert. Downloads und die Live-Konsole nutzen Einmal-Tokens, die höchstens 10 Sekunden gültig sind.
  • Anfragen werden per Header statt per Cookie autorisiert, was vor Cross-Site Request Forgery (CSRF) schützt.

Berechtigungen

  • Eigene Berechtigungen für jede Aktion auf einem Server: Starten, Stoppen, Konsole, Dateien, RCON und mehr.
  • Alles, was nicht ausdrücklich erlaubt ist, ist verboten, und Berechtigungen werden bei jeder Anfrage auf dem Server geprüft.
  • Benutzer sehen nur die ihnen zugewiesenen Server. Für alle anderen antwortet das Panel so, als gäbe es den Server nicht.
  • Admin-Funktionen stehen nur Administratoren zur Verfügung. Ein API-Token erreicht sie nur mit einer ausdrücklich erteilten Admin-Berechtigung.

HTTPS und Schutz im Browser

  • Ein integrierter Let's-Encrypt-Client holt HTTPS-Zertifikate und erneuert sie automatisch.
  • Nur TLS 1.2 oder neuer, mit modernen Cipher Suites mit Forward Secrecy.
  • Eine strikte Content Security Policy (CSP) blockiert in die Seite eingeschleuste Skripte und erschwert Cross-Site Scripting (XSS) erheblich.
  • Schutz vor Clickjacking, Content-Sniffing und Referrer-Lecks, dazu HSTS über HTTPS. Antworten mit Kontodaten werden nie zwischengespeichert.

Dateimanager

  • Dateizugriff ist eine eigene Berechtigung pro Server und auf den Ordner dieses Servers beschränkt.
  • Pfade mit ../ und ähnlichen Tricks werden abgelehnt. Auf der Maschine selbst hält GameAP Daemon zusätzlich jede Dateioperation innerhalb seines Arbeitsverzeichnisses (Go os.Root).
  • Beim Entpacken von Archiven werden Dateien und Links blockiert, die außerhalb des Zielordners landen würden (Zip Slip), und Gesamtgröße sowie Dateianzahl sind begrenzt.
  • Dateien öffnen sich im Browser in einer Sandbox oder werden heruntergeladen. Eine hochgeladene HTML- oder SVG-Datei kann also keine Skripte im Panel ausführen.

Gameserver und Konsole

  • Werte aus den Servereinstellungen landen als separate Argumente im Startbefehl und können daher keine zusätzlichen Befehle einschleusen.
  • Jeder Gameserver kann unter einem eigenen Systembenutzer laufen oder in einem eigenen Docker- oder Podman-Container mit Speicher- und CPU-Limits.
  • Nur Administratoren können Startbefehl, Ordner und Systembenutzer eines Servers ändern.
  • Konsole ansehen und Befehle senden sind getrennte Berechtigungen, die bei jeder Nachricht geprüft werden. Das RCON-Passwort wird in der Konsolenausgabe ausgeblendet.

Dedicated Server und GameAP Daemon

  • GameAP Daemon öffnet auf der Maschine keine Netzwerkports: Er verbindet sich selbst mit dem Panel.
  • Die Verbindung ist standardmäßig per TLS verschlüsselt. Nach der Einrichtung vertraut der Daemon nur der eigenen Zertifizierungsstelle des Panels.
  • Eine Maschine wird mit einem einmaligen Setup-Schlüssel verbunden, der standardmäßig nach einer Stunde abläuft.
  • Jede Maschine erhält einen eigenen Zufallsschlüssel. Das Panel speichert nur dessen Hash und zeigt ihn nie an. Zusätzlich lässt sich gegenseitiges TLS (mTLS) erzwingen.

Plugins

  • Plugins laufen in einer WebAssembly-Sandbox ohne direkten Zugriff auf Dateien, Netzwerk oder Umgebungsvariablen — nur über die Schnittstellen, die das Panel bereitstellt.
  • Jedes Plugin hat Limits für Speicher, Ausführungszeit und Anfragerate.
  • Nur Administratoren können Plugins installieren, und Pakete aus dem Katalog werden anhand eines SHA-256-Hashes geprüft.
  • HTTP-Anfragen von Plugins laufen standardmäßig nur über HTTPS und erreichen weder lokale Netzwerke noch Cloud-Metadatendienste (SSRF-Schutz).

Audit-Log und Daten

  • Ein Sicherheits-Audit-Log protokolliert Logins und Fehlversuche, verweigerte Zugriffe, Änderungen an Benutzern, Rollen und Tokens, Dateioperationen und die Plugin-Verwaltung.
  • Jeder Eintrag enthält Benutzer, IP-Adresse, Zeitpunkt und Request-ID.
  • Secrets der Zwei-Faktor-Authentifizierung und von Plugins werden verschlüsselt gespeichert (AES-256-GCM).
  • Alle Datenbankabfragen sind parametrisiert, was vor SQL-Injection schützt.
  • Serverfehler liefern eine allgemeine Meldung; Details landen nur im Server-Log.

Sicherheit in der Entwicklung

Sicherheitstests

Eine eigene Testsuite, gegliedert nach den OWASP API Security Top 10, prüft, dass niemand auf fremde Server zugreifen, den Login umgehen oder sich selbst höhere Rechte verschaffen kann. Sie läuft bei jeder Änderung.

Statische Analyse

Jede Änderung durchläuft eine Codeanalyse mit Sicherheitsregeln (gosec), und die Tests laufen gegen echte MySQL-, PostgreSQL- und Redis-Instanzen.

Fuzzing

Jede Woche werden Login, Berechtigungsprüfungen und die Verarbeitung von Dateipfaden mit großen Mengen zufälliger und fehlerhafter Eingaben getestet.

Prüfung der Abhängigkeiten

Abhängigkeiten werden jede Woche und bei jeder Änderung am Hauptzweig gegen die Go-Schwachstellendatenbank (govulncheck) geprüft. Ihre Versionen sind mit Prüfsummen fixiert.

Mutationstests

Jede Woche werden absichtlich kleine Fehler in den Code für Authentifizierung und Berechtigungen eingebaut, um sicherzustellen, dass die Tests sie finden.

Open Source

Der Code liegt unter der MIT-Lizenz offen auf GitHub. Releases kommen mit SHA-256-Prüfsummen, und das Docker-Image läuft ohne Root-Rechte.

Empfehlungen für Administratoren

  1. 1

    HTTPS aktivieren

    gameapctl kann ein Let's-Encrypt-Zertifikat beziehen, das das Panel danach selbst erneuert. Zusätzlich unverschlüsseltes HTTP auf HTTPS umleiten.

    TLS_FORCE_HTTPS=true
  2. 2

    Zwei-Faktor-Authentifizierung sofort einrichten

    Administratoren haben 30 Tage Zeit, doch es gibt keinen Grund zu warten. Auch andere Benutzer sollten 2FA aktivieren.

  3. 3

    CAPTCHA im Login-Formular aktivieren

    Vor allem, wenn das Panel aus dem Internet erreichbar ist.

    CAPTCHA_PROVIDER
  4. 4

    Zertifikate von Daemons verlangen

    Mit gegenseitigem TLS nimmt das Panel nur Verbindungen von Daemons an, die ein vom Panel ausgestelltes Zertifikat besitzen.

    GRPC_REQUIRE_MTLS=true
  5. 5

    Gameserver nicht als root betreiben

    Für Gameserver einen eigenen Systembenutzer verwenden oder sie in Docker- oder Podman-Containern ausführen.

  6. 6

    Plugins nur aus vertrauenswürdigen Quellen installieren

    Zusätzlich die Durchsetzung von Berechtigungen aktivieren, damit jedes Plugin nur den Zugriff erhält, den es angibt.

    PLUGINS_PERMISSIONS_ENFORCE=true
  7. 7

    Eigene geheime Schlüssel setzen

    gameapctl erzeugt sie bei der Installation. Bei Docker oder einer manuellen Installation lange Zufallswerte selbst festlegen.

    ENCRYPTION_KEYAUTH_SECRET
  8. 8

    Auf dem neuesten Stand bleiben

    Sicherheitskorrekturen erscheinen in regulären Releases. Das GameAP-Repository auf GitHub beobachten (Watch), um Sicherheitshinweise zu erhalten.

Schwachstelle melden

Schwachstellen bitte nicht in öffentlichen Issues posten, sondern vertraulich über GitHub oder per E-Mail melden. Die meldende Person wird in den Release Notes und im Advisory genannt.

72 Stunden
bis zur Bestätigung des Eingangs
14 Tage
bis zur ersten Einschätzung
14 Tage
bis zur Behebung einer kritischen Schwachstelle
90 Tage
bis zur Veröffentlichung, abgestimmt mit der meldenden Person