Repository navigation
Security-Review: PostgreSQL in der Sandbox für gezielte Beweise #37
Description
Worum es geht
Das Security-Review hat in seiner Sandbox keine Datenbank. Was an Policies, Triggern und den Rechten der Rollen hängt, kann es deshalb nur lesen und nicht ausprobieren. Bei der Haustechnik und bei der Handwerkersoftware liegt dort aber der Kern der Trennung von Mandanten und Bereichen.
In den Berichten der letzten acht Pull Requests der Haustechnik steht die fehlende Datenbank jedes Mal. Einer davon (opengewerk/opengewerk-haustechnik#240) wurde allein deshalb rot: zwei Beweislücken, kein Befund.
Entschieden am 12.10.2026: das Review bekommt eine Datenbank, und zwar in der Sandbox.
Wie
- Installieren: PostgreSQL 18 kommt im Schritt "Sandbox vorbereiten" auf den Runner, aus der Paketquelle von PostgreSQL, solange es sudo noch gibt und bevor Code des Pull Requests läuft. Der Runner bringt nur 16 mit, die Haustechnik braucht 18 (
uuidv7()). Der Dienst wird nicht gestartet. - Starten: Das Review startet den Server selbst, als gewöhnlichen Prozess in der Sandbox, mit dem Datenverzeichnis unter
.security-review/cacheund nur auf dem127.0.0.1der Sandbox. Jeder Befehl der Shell hat seinen eigenen Prozessraum, der Server lebt also für die Dauer eines Befehls. Dafür legt der Workflow ein Hilfsskript nach.security-review/: anlegen, starten, den übergebenen Befehl ausführen, anhalten. - Einrichten je Repository: Port, Rolle und Name der Testdatenbank stehen in der CI des jeweiligen Repositorys. Ob das Hilfsskript sie als Eingabe des Aufrufs bekommt oder das Review sie dort nachliest, zeigt der Probelauf.
- Auftrag: Die Datenbank ist für gezielte Beweise da: ein eigener Gegenversuch, einzelne Testdateien am geänderten Bereich. Die ganze Testreihe bleibt Sache der CI. Startet die Datenbank nicht, ist das kein Befund und keine Beweislücke von selbst; der Bericht sagt es und prüft wie bisher statisch.
Was nicht
- Kein Service-Container und kein Server außerhalb der Sandbox. Docker bleibt abgeschaltet. Ein Server neben der Sandbox, zu dem der Code des Pull Requests eine Verbindung mit Rechten eines Verwalters hat, wäre ein Weg hinaus (
COPY ... FROM PROGRAM). - Die Sandbox wird dafür nicht gelockert. Geht es nur mit freigegebenen Unix-Sockets oder mit einem Server außerhalb, bleibt das Review ohne Datenbank. Dann verlangt der Auftrag stattdessen zu jeder Aussage, die an der Datenbank hängt, den Test des Pull Requests, der sie hält.
Zuerst ein Probelauf
Offen ist, ob PostgreSQL unter bubblewrap überhaupt startet:
- Der Filter der Sandbox sperrt vermutlich Unix-Sockets. Dann läuft der Server nur über TCP (
unix_socket_directories = ''). - Der gemeinsame Speicher muss in der Sandbox funktionieren (
/dev/shm, sonstmmap).
Geprüft wird an einem Prüfzweig und einem Test-PR in einem Repository, dessen Aufruf auf die SHA des Prüfcommits zeigt, wie zuletzt bei opengewerk/opengewerk-kanzlei#49. Dabei werden Dauer und Kosten je Lauf gemessen. Erst danach werden die Aufrufe der fünf Repositories angehoben.
Abnahme
- Ein Review an einem Pull Request der Haustechnik führt in der Sandbox mindestens eine Testdatei mit Datenbank aus, und der Bericht nennt sie.
- sudo und Docker sind beim Lauf abgeschaltet wie bisher, und die Einstellungen der Sandbox (Netz, Schreiben, Lesen, Variablen) sind unverändert.
- Dauer und Kosten je Lauf sind gemessen, vorher und nachher.
- Die Aufrufe in den fünf Repositories zeigen auf den neuen Commit.
Activity
Probelauf: Aufruf auf den zweiten Prüfcommit
Probelauf: Aufruf auf den dritten Prüfcommit
Probelauf: Aufruf auf den vierten Prüfcommit
Security-Review führt Tests in der Sandbox aus, auch mit PostgreSQL (#37
Security-Review: Aufruf auf opengewerk/.github#40 heben (#34)
Security-Review: Aufruf auf opengewerk/.github#40 heben (#53)
Security-Review: Aufruf auf opengewerk/.github#40 heben, mit Testdate…
Musiker15 commentedon Oct 12, 2026
Erledigt mit #38 und #40. Die Aufrufe der fünf Repositories zeigen auf
c12e3c2.Abnahme
duty-updates.test.ts,update.test.tsundevidence/write.test.tsgegen PostgreSQL 18, 47 Tests, alle grün. Der Bericht nennt den Befehl und das Ergebnis unter "Ausgeführt in der Sandbox".database, Security-Review: Aufruf auf opengewerk/.github#40 heben opengewerk-kanzlei#53, Security-Review: Aufruf auf opengewerk/.github#40 heben opengewerk-api-spec#34 und Security-Review: Aufruf auf opengewerk/.github#40 heben opengewerk-website#23 ohne.Was dazukam
Der Probelauf zeigte, dass das Review in seiner Sandbox bisher nichts installieren und damit keinen Test ausführen konnte. Drei Dinge fehlten und sind mit #38 da: der Proxy der Sandbox für Node (
NODE_USE_ENV_PROXY),pnpmim Pfad (corepack enable) und ein Ort zum Installieren, weil die Sandbox im Arbeitsverzeichnis unter anderemnode_modules/.binschreibgeschützt hält. Tests laufen deshalb in einer Kopie des Checkouts; die Härtung bleibt.Aus dem Review von opengewerk/opengewerk-haustechnik#250 kam #39 (Schlüsseldatei der Paketquelle), behoben mit #40.
Abschalten
Die Variable
SECURITY_REVIEW_DATABASEder Organisation, aufausgesetzt, nimmt die Datenbank für alle Repositories heraus, ohne Pull Request. Der Stand vor dieser Änderung liegt als Zweigsicherung/security-review-ohne-datenbankauf450efc1.