Repository navigation
Releases: integrisec-de/passonce
Release list
PassOnce 1.0.1
Sicherheitshärtung und Betreiberhinweise aus einem manuellen Secret-Logging-Audit gegen 1.0.0.
CodeQL meldet 0 Alerts — ein statischer Scanner erkennt aber nicht, dass eine protokollierte URL bei genau diesem Produkt das Sicherheitsversprechen bricht. Deshalb der manuelle Durchgang.
Härtung (Verhaltensänderung)
Der Dienst verweigert jetzt den Start, wenn ALLOW_SERVER_ENCRYPT=true gesetzt ist und BASE_URL fehlt.
Vorher wurde die Herkunft der zurückgegebenen Links aus dem Host-Header der Anfrage gebaut — also vom Aufrufer bestimmt. Sichtbares Scheitern ist hier besser als stillschweigend falsche Links. ./setup.sh --server-encrypt trägt den Wert ohnehin ein; Einrichtungen über setup.sh sind nicht betroffen.
Dokumentation
- Warnblock zum Server-Encrypt-Modus. Dort erzeugt der Server den Schlüssel und gibt ihn als Teil der URL im Antwort-Body zurück. Genau da verliert ein Betreiber sein Zero-Knowledge, ohne es zu merken — nicht durch einen Angriff, sondern durch gewöhnliche Betriebspraxis: Body-Logging am Reverse-Proxy, APM- und Tracing-Agenten, Terminal-Scrollback, CI-Logs, eine Zeile
log.error(body)im aufrufenden Programm. - Umgang mit dem
API_TOKEN.setup.shgibt es einmal aufs Terminal aus (Scrollback,tee/script/CI); im Docker-Betrieb ist es überdocker inspectund/proc/1/environlesbar.env_filemit Rechten600oder Docker Secrets als engere Alternative. BASE_URLin ENV-Tabelle und.env.exampleals Pflicht gekennzeichnet.
Nicht betroffen
Der Zero-Knowledge-Weg über die Weboberfläche. Dort entsteht der Schlüssel im Browser, steht ausschließlich im URL-Fragment und erreicht den Server nie. Das Audit hat das gegen den veröffentlichten Stand bestätigt: kein localStorage, kein Beacon, kein location.href, das Fragment wird nach dem Abruf per replaceState aus der Adresszeile entfernt, serverseitig referrer-policy: no-referrer und keine Zugriffslogs.
Lizenz: Apache 2.0
PassOnce 1.0.0
Zero-Knowledge One-Time-Secret-Sharing, selbst betreibbar.
Die Verschlüsselung (AES-256-GCM) passiert im Browser; der Schlüssel steht nur im URL-Fragment (#…) und erreicht den Server nie. Gespeichert wird ausschließlich Ciphertext, der beim ersten Abruf atomar gelöscht wird.
Enthalten
- Node-Server ohne npm-Abhängigkeiten (eingebautes
node:sqlite), ab Node 22.13 - Docker-Compose mit Caddy und automatischem HTTPS
- Optionale Server-Encrypt-API für das eigene, vertrauenswürdige Netz
setup.shfür die geführte Einrichtung- SBOM im CycloneDX-Format, mit Datei-Hashes
Schnellstart
git clone https://github.com/integrisec-de/passonce.git
cd passonce
./setup.shDetails in der README, Meldeweg für Schwachstellen in SECURITY.md.
Vor dem Tag geprüft
Vollständig aus Fremdensicht durchgegangen: anonymer Klon und Archiv-Weg, Docker- und Node-Betrieb, Einmal-Link mit und ohne Zusatzpasswort, TTL-Grenzen, Neustart mit erhaltenen Daten. Keine offenen Blocker.