Supply-Chain-Scan (Go) / govulncheck (push) Failing after 51s
AUD-02 hat bereits einen Trigger, der UPDATE/DELETE auf audit_events per
RAISE EXCEPTION ablehnt (Akzeptanzkriterium 3 aus AUD-07 war damit schon
erfuellt). Zwei Luecken blieben: (1) die Anwendungsrolle hatte weiterhin
UPDATE/DELETE-Rechte auf DB-Ebene, der Schutz war nur ein Code-Pfad
(Trigger), keine fehlenden Rechte; (2) ein abgelehnter Aenderungsversuch
wurde nirgends selbst protokolliert.
- migrations/0010_audit_events_role_enforcement.{up,down}.sql: Gruppenrolle
nexarch_app ohne LOGIN/Passwort, REVOKE ALL + GRANT INSERT, SELECT auf
audit_events fuer PUBLIC/nexarch_app; Trigger-Funktion um RAISE WARNING
mit Akteur/Session/Client-Kontext ergaenzt, bevor der Versuch weiterhin
per RAISE EXCEPTION abgelehnt wird (RAISE WARNING ist nicht transaktional,
landet also auch bei Rollback im Postgres-Server-Log).
- internal/audit/append_only_test.go: Tests je Akzeptanzkriterium -
TestAppendOnly_AppRoleHasNoUpdateOrDeletePrivilege (AC1/Pruefung1,
erwartet "permission denied" statt Trigger-Fehler),
TestAppendOnly_TamperAttemptIsLogged (AC2/Pruefung2, faengt die
RAISE-WARNING-Notice ueber pgx OnNotice ab),
TestAppendOnly_NormalWriteAndReadStillWork (AC3/Pruefung3, Regression).
Pruefungen auf 192.168.1.131 durchgefuehrt:
1. UPDATE/DELETE mit Anwendungsrolle (Mitglied nexarch_app) -> "permission
denied for table audit_events" statt Trigger-Fehler: PASS.
2. Ablehnungsversuch selbst protokolliert (RAISE WARNING mit
Akteur/Session/Zeitpunkt, unabhaengig von Transaktions-Rollback) via
pgx-Notice-Capture nachgewiesen: PASS.
3. Regression Schreiben/Lesen (Record + CountByTenant, mehrere Eintraege):
PASS.
Gesamtlauf go test ./... -p 1 -count=1: internal/audit vollstaendig gruen
(alle 22 Tests inkl. der 3 neuen). Bestehende, dokumentierte Altlasten
unveraendert beobachtet (nicht Bestandteil dieser Kachel): internal/migrate
(TestRolloutAll_* reihenfolgeabhaengig), internal/notify
(TestDispatcher_EnqueueAndProcess flakt), internal/pentest
(TestPentest_KEK_CompromisedMasterKeyCannotDecryptAfterRotation), internal/user
(verwaiste test_iam01_users/test_iam01_superadmins-DBs).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QPsyieCYwvbUBsnN598SbP
14 lines
650 B
PL/PgSQL
14 lines
650 B
PL/PgSQL
-- Trigger-Funktion auf den AUD-02-Stand zuruecksetzen (ohne RAISE WARNING).
|
|
CREATE OR REPLACE FUNCTION audit_events_prevent_mutation() RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
RAISE EXCEPTION 'audit_events ist append-only: % ist nicht erlaubt', TG_OP;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
REVOKE INSERT, SELECT ON audit_events FROM nexarch_app;
|
|
-- PUBLIC hatte vor dieser Migration keine expliziten Rechte auf
|
|
-- audit_events (Postgres-Standard: nur der Tabelleneigentuemer), daher kein
|
|
-- Re-GRANT hier. Die nexarch_app-Rolle selbst bleibt bestehen (kann von
|
|
-- anderen Objekten referenziert sein); nur die audit_events-spezifischen
|
|
-- Rechte werden zurueckgenommen.
|