Add policy-bound credential submission and native DLP audit proofs

This commit is contained in:
Karl committed 2026-10-13 21:00:41 +02:00
1 parent b991ee9da6
commit c8b6ff9cdd
45 files changed
+777 -98

No files matched your search

+8 -6
View File
@@ -48,9 +48,11 @@ certificate deployment or successful login submission. The separate tab-binding
unit test holds the vault unlocked to verify binding independently of automatic
tab-change locking (`artifacts/vault-agent-controls-native-proof.json`).
Outbound DLP still scans a later form submission. A credential matching a secret
rule can therefore block an otherwise legitimate login; there is no generic
password-field exception. A future governed allowance must bind one exact
submission and inspect every remaining field. Persistent sessions, file/vault
mutations, safe screenshots, broader administration and production key custody
remain separate open requirements.
Outbound DLP still scans a later ordinary autofill submission. A credential
matching a secret rule can therefore block that login; there is no generic
password-field exception. A separate default-off, policy-bound preparation now
supports one exact native submission while inspecting every remaining field:
see [controlled credential policy](controlled-credential-policy.md). Saved session
restoration is also implemented; see [session controls](agent-session-controls.md).
File/vault mutations, safe screenshots, broader administration and production key
custody remain separate open requirements.
+135
View File
@@ -0,0 +1,135 @@
# Approved vault credential submission policy
Ordinary autofill only fills a form. It does not authorize sending passwords
through DLP. Administrators can separately enable controlled submission in the
Local password vault section. The new policy defaults off and requires explicit
approved form rules. Human vault unlock remains required. No agent can unlock the
vault or export passwords through this feature.
An approved rule contains metadata only:
```json
{
"id": "company-login",
"actionUrl": "https://login.company.example/signin",
"usernameField": "username",
"passwordField": "password"
}
```
Use an exact canonical HTTPS action URL, including its path. Queries, fragments,
URL userinfo, wildcard targets and non-HTTPS URLs are rejected. Username and
password field names must be different printable ASCII strings of at most 128
characters. At most 32 rules are permitted; rule identifiers and exact target/field
signatures must be unique. Never enter credential values in the rule editor.
Review the complete changed policy through normal publication. When independent
approval is configured, another authorized administrator must approve it. Auditor
controls remain read-only. Disabling the toggle and publishing revokes permission
once the signed policy reaches the device; pending allowances must recheck policy
before release.
Agent preparation additionally requires `vault:prepare-submit` in the central
baseline and its individual grant. This scope starts unchecked. Its purpose is
to fill and authorize one approved login POST with a human-unlocked vault;
preparation does not itself submit the form. Ordinary `vault:fill` does not grant
this separate permission.
A controlled allowance must be short-lived, single-use and bound to the current
native document, exact POST destination, credential fields/values, verified actor,
policy and vault state. Every other field remains subject to DLP. The approved site receives the filled username and password in its DOM; site
JavaScript can read those values. The lease controls a supported native network
submission and does not isolate passwords from that site. This is not
cryptographic attestation of a webpage's form, proof of website identity or a
phishing guarantee. Do not treat the presence of a password field as an exemption.
Preparation currently expires after 15 seconds and is consumed by one candidate
submission; a mismatched attempt also consumes it. Request bytes are limited to
64 KiB and 128 distinct fields. Do not retry automatically after failure.
Supported submission is a bounded native main-frame POST using standard
`application/x-www-form-urlencoded` bytes. JavaScript fetch/XHR logins, multipart,
JSON and arbitrary login protocols are not covered by this allowance. Unsupported
or ambiguous submissions remain blocked. A subsequent 302-style GET is inspected
as ordinary navigation; a 307/308 redirect that would resend the credential body
must be blocked. The allowance never grants a redirect destination permission.
## Verification status
Schema and admin tests prove defaults, exact URL and field constraints, strict
metadata shape, uniqueness and policy round-trip. Actual Windows/Electron admin publication verifies controlled submission starts
off, reviewed form metadata and the separate preparation scope reach the signed
baseline and individual grant, self-approval is denied, auditor controls are read-only,
and rotation/history restoration follow independent review. Completed API requests
export correlated traces (`artifacts/agent-grants-history-admin-proof.json`).
The isolated Windows/Electron fixture proves approved native POST delivery, safe
302 GET navigation, blocked 307 credential replay, denied residual confidential
data, duplicate credential fields and changed actions, plus vault lock, foreground
swap, central disable and targeted revocation. The trusted human UI handoff is
exercised (`artifacts/controlled-login-native-proof.json`). Terminal completion/
failure audit ingestion and ECS/CEF semantics have separate backend tests; actual
terminal export correlation must be verified against the final native run. These
proofs do not establish compatibility with arbitrary login pages. Ordinary telemetry must contain fixed reasons and event references, never
passwords, usernames, form bodies or secrets.
## Interpreting lifecycle audit
`vault.submission-prepared` means a local, short-lived allowance was issued.
`vault.submission-authorized` means current policy approved the request; it does
not prove bytes reached the destination. `vault.submission-completed` means the
native HTTP transaction finished, including an HTTP error response: it does not
mean website authentication succeeded. `vault.submission.failure` marks a native
transaction failure, and `vault.submission-denied` marks a security refusal.
These events retain only fixed lifecycle names, policy/version and trace linkage.
Passwords, usernames, form IDs, hosts, action URLs and request bodies are not
accepted in vault lifecycle metadata. Analysts can export authenticated ECS/CEF
records. ECS represents transaction failure as an error/failure; CEF retains its
fixed failure action at the existing informational severity 3. Security denial
exports severity 7. Ordinary lifecycle success is not an authentication assertion.
The actual rendered password panel was inspected: Fill login, Prepare approved
login and Delete fit the card without overlap. Native fixture checks show the
preparation button is hidden when centrally disabled, visible when enabled, and
trusted handoff clears master/save fields before webpage focus. The screenshot
uses an isolated synthetic page with its username paragraph hidden for capture;
it does not prove arbitrary webpage layout or secret isolation.
## Credential escape checks and limits
A prepared lease also watches ordinary URL/header requests from its WebContents;
this watch grants no DLP exemption. Public subframe requests retain the lease,
while detected credential leakage consumes it and cancels the request. Header
checks include bounded two-value combinations in both orders so unrelated native
headers do not hide that split. Arbitrary encodings and fragmentation across many
requests are not proven covered. Filled credentials remain accessible to website
JavaScript; this increment is not credential isolation from a malicious page.
The first native split-header regression failed despite passing broker tests.
The failed run is retained in local evidence; a corrected final native run and
new package verification are required before claiming the refinement verified.
The subsequent final native regression now passes both escape cases using a vault
password absent from core DLP rules: GET URL and actual split-header fetch are
canceled, with zero receiver leaks. Native metadata confirms an intervening
Chromium header, false all-values match and true two-fragment match. Common trace
`6709b228cb8ce71a88acc7584a27c5a1` verifies terminal ancestry, inspection and audit
children; original and alternate values are absent from ordinary ECS/OTLP output.
The complete suite passes 668 tests. Final package verification remains separate.
Final stable Windows packaging and exact packaged-source/runtime verification
pass (`artifacts/controlled-login-release-windows-build.log` and
`artifacts/controlled-login-final-package-proof.log`). The executable remains
`NotSigned`; this is not a signed production installer or security certification.
The receiver-strengthened final native run also passes: exactly four approved
credential POSTs, zero public POSTs, zero replays and zero credential URL/header
leaks at the independent HTTPS receiver. It privately checks any two header
fragments rather than relying on all-values concatenation. Current trace
`050f7f44bc009f949c838f8a067649e4` has 101 spans with verified request ancestry;
collector rejected writes remain zero. Evidence: `artifacts/controlled-login-native-proof.json`
and `artifacts/controlled-login-receiver-proof-native.log`. Earlier native failures
and the prior successful proof remain distinct local evidence.
+54
View File
@@ -139,3 +139,57 @@ and never requests the second saved destination. Trace
`583a1d4dbc80fb2cbcb135b1622a4993` records the failed native stage at 1410.0137 ms
and owned-tab rollback at 0.7242 ms. The delay was intentional fixture behavior;
it is not a production performance result. Collector rejected writes were zero.
On 2026-10-13, the protected live receiver was queried for controlled-login trace
`aedaae84014f4d5e14c6d7b441d7e0f7`. Eight credential phases were verified to
have the same native request ancestor: claim, parse, match, residual, headers,
header-values, authorization and completion. The body gate took 216.4937 ms;
local inspection took 178.5054 ms, while its inspector span took 12.283203 ms
and YARA 11.866699 ms. Enterprise inspection took 4.8818 ms. The remaining
local-inspection interval cannot be attributed to parsing or YARA from these
spans alone; investigate IPC, scheduling and containment before claiming a cause.
The receiver reported zero rejected writes and uses Windows DPAPI plus AES-GCM
for local archive storage. These are actual local fixture measurements, not
production latency guarantees. Credential values and form descriptors are
excluded from debug attributes; security evidence uses its separate policy and
audit pipeline. Trace exports remain centrally disableable.
The follow-up review found credential substring HMAC checks outside the named
matching stage. They now use `credential.match`, including checks of additional
fields and unexpected destinations. A real OTLP receiver regression verifies
six internal stage parents, timestamps, secret exclusion and central disable.
The combined broker, OTLP, policy-transition and request/header deadline suite
passes 29 tests. The earlier native trace predates this final matching refinement;
its timings must not be presented as measurements of the refined code.
The subsequent real native split-header test failed although the broker suite was
green. A separate Electron 44.7 / Chromium 152 header-order probe established the
cause: `X-Credential-One` and `X-Credential-Two` arrived with `sec-ch-ua-mobile`
between them. Joining every header value did not reconstruct the synthetic
credential; joining the two fragments did. Evidence retains only header names,
indices and booleans (`artifacts/credential-header-order-proof.json`), never values.
This native fact motivates bounded two-fragment checks independent of header
iteration order. It does not prove coverage of arbitrary fragmentation/encoding.
After the bounded pair fix, the fresh actual Windows native run passes both
unregistered-credential escape cases. Trace
`6709b228cb8ce71a88acc7584a27c5a1` contains 101 spans; credential header checking
took 15.6353 ms (header-values child 14.4573 ms), authorization 0.9952 ms and
terminal audit completion 24.8035 ms. Actual request ancestry and original plus
alternate synthetic secret exclusion were verified. ICAP observed no credentials
in 54 scans; collector rejected writes remained zero. The full suite passes
668 tests. The failing predecessor remains separate evidence and is not counted
as a pass. These timings are local fixture observations, not general benchmarks.
The receiver-strengthened final native run also passes: exactly four approved
credential POSTs, zero public POSTs, zero replays and zero credential URL/header
leaks at the independent HTTPS receiver. It privately checks any two header
fragments rather than relying on all-values concatenation. Current trace
`050f7f44bc009f949c838f8a067649e4` has 101 spans with verified request ancestry;
collector rejected writes remain zero. Evidence: `artifacts/controlled-login-native-proof.json`
and `artifacts/controlled-login-receiver-proof-native.log`. Earlier native failures
and the prior successful proof remain distinct local evidence.
+142 -17
View File
@@ -2,13 +2,23 @@
## Aktuelle nächste Abnahmen
Die gespeicherte Agent-Sitzung ist inzwischen nativ integriert; die detaillierten
Nachweise stehen in `docs/agent-session-controls.md`. Der volle Produktumfang bleibt
offen. Als nächste Implementierungsarbeiten gelten sicher geprüfter visueller
Agent-Export, legitime kontrollierte Credential-Übertragung und nachvollziehbare
Ownership für Hintergrund-Worker. Danach folgen breitere lokale Medienprüfung und
Analysten-Evidence-Flows. Jede neue Freigabe braucht aktuelle Policy-/Identitäts-
Prüfungen sowie einen echten Receiver-/Browser-Nachweis und korrelierte Traces.
Gespeicherte Agent-Sitzungen und kontrollierte Credential-Vorbereitung sind für
ihre dokumentierten nativen Pfade integriert und nachgewiesen. Der aktuelle
Abgleich umfasst 668 bestandene Tests, Syntaxprüfung, stabilen Windows-Build,
exakten Paket-/Runtime-Vergleich und den abschließenden Receiver-/Trace-Proof
(`artifacts/controlled-login-final-suite.log`,
`artifacts/controlled-login-final-syntax.log`,
`artifacts/controlled-login-release-windows-build.log`,
`artifacts/controlled-login-final-package-proof.log`,
`artifacts/controlled-login-native-proof.json`). Das Executable ist unsigniert.
Nächste Implementierungsabnahmen: sicher geprüfter visueller Agent-Export,
beweisbare Actor-Ownership für Hintergrund-Worker, breitere lokale Medienprüfung,
vollständige Analysten-Inhaltsbelege und weitergehende Datei-/Admin-Steuerung.
Bereits vorhanden sind begrenzte geschützte Browser-Metadaten und eine
zweckgebundene Analystenansicht; vollständige Aufzeichnung oder Replay bleiben
offen. Jede Erweiterung braucht aktuelle Policy-/Identitätsprüfungen, einen echten
Receiver-/Browser-Nachweis und korrelierte Traces.
Produktionsabnahmen bleiben separat: signierter Installer/Updatekanal, unabhängige
Sicherheitsprüfung, Geräteschlüssel/Enrollment-Vertrauen und Rotation, getestete
@@ -29,7 +39,7 @@ Windows zuerst: einen zentral verwalteten Browser mit lokaler Inhaltsprüfung, f
## Statusmatrix
## Aktuelle Statusmatrix
@@ -37,7 +47,7 @@ Windows zuerst: einen zentral verwalteten Browser mit lokaler Inhaltsprüfung, f
|---|---|---|
| Chromium/Electron, Windows-Build | Teilweise | `apps/browser/main.cjs`, `scripts/package.mjs`, `scripts/verify-package.mjs`; sandboxierter Electron-Browser und geprüftes unpacked Windows-Paket. Kein eigener Chromium-Fork mit umfassenden nativen DLP-Hooks; kein signierter Produktionsinstaller oder Updatekanal. |
| Chromium/Electron, Windows-Build | Teilweise; aktuelles unpacked Paket geprüft | `apps/browser/main.cjs`, `scripts/package.mjs`, `scripts/verify-package.mjs`, `artifacts/controlled-login-release-windows-build.log`, `artifacts/controlled-login-final-package-proof.log`: sandboxierter Electron-Browser und exakter aktueller Paket-/Runtime-Vergleich. Kein eigener Chromium-Fork mit umfassenden nativen DLP-Hooks; Executable `NotSigned`, kein signierter Produktionsinstaller oder Updatekanal. |
| Safari-artige Oberfläche, Light/Dark, Themes, kompakte/getrennte Tabs | Umgesetzt für Browser-Chrome | `apps/browser/index.html`, `style.css`, `renderer.js`, `scripts/ui-showcase.cjs`, `artifacts/sbrowser-ui-layout.json`. Websiteinhalte werden nicht umgestaltet. Echte native Tabs mit eigener DOM-/Scroll-/History-/Security-State-Verwaltung sind jetzt integriert; Tabwechsel lädt nicht neu. Tatsächliche DLP-/Revocation-Prüfung in `artifacts/native-tabs-proof.json`. Gemeinsame Unternehmens-Cookies bleiben absichtlich geteilt. |
@@ -47,13 +57,13 @@ Windows zuerst: einen zentral verwalteten Browser mit lokaler Inhaltsprüfung, f
| Sichere Policy-Verteilung | Teilweise | `packages/core/policy-channel.cjs`, `apps/server/policy-channel.mjs`, `apps/browser/management-channel.cjs`, `tests/policy-channel.test.mjs`: ML-KEM-1024/AES-GCM und ML-DSA/Ed25519, Replay-/Versions-/Ablaufprüfung. HTTPS und unabhängiges initiales Pinning bleiben nötig. Kein HSM, Schlüsselrotation oder unabhängiges Kryptografieaudit; keine behauptete „doppelt quantensichere“ Zertifizierung. |
| SSO | Teilweise | `apps/server/auth.mjs`, `tests/server.test.mjs`: OIDC-PKCE, Signatur/Issuer/Audience/Nonce, Admin-Gruppen. Mock-IdP getestet; echter Kunden-IdP noch nicht integriert. Drei serverseitige Managementrollen (Admin, Operator, Auditor) aus OIDC-Gruppen in `apps/server/admin-access.mjs`; kein direktes SAML/SCIM. Remote-Shared-Bootstrap-Token wird verweigert; Bootstrap nur HTTP-Loopback. |
| SSO | Teilweise | `apps/server/auth.mjs`, `tests/server.test.mjs`: OIDC-PKCE, Signatur/Issuer/Audience/Nonce, Admin-Gruppen. Mock-IdP getestet; echter Kunden-IdP noch nicht integriert. Vier serverseitige Managementrollen (Admin, Operator, Analyst, Auditor) aus OIDC-Gruppen in `apps/server/admin-access.mjs`; kein direktes SAML/SCIM. Remote-Shared-Bootstrap-Token wird verweigert; Bootstrap nur HTTP-Loopback. |
| Admin-Management-Oberfläche | Teilweise | `apps/server/public/index.html`, `admin.js`, `style.css`; funktionierende Enrollment-, Policy-, Integrations-, Teaching-, Bookmark- und Event-Formulare. `scripts/enterprise-admin-smoke.mjs`, `scripts/bookmarks-admin-smoke.mjs`. In dieser Iteration ergänzt: gruppierte Navigation, Fleet-/Auditfilter, Draft-/Änderungsprüfung, Dark/Light-Konsole, responsive Layouts und rollengerechte Aktionen. Tatsächliche Electron-DOM-/Screenshot-Proofs in `artifacts/enterprise-admin-proof.json` und `admin-console-*.png`. Gruppen-/Pilotverwaltung, effektive Vorschau, Versionsmeldungen und verpflichtende Zweitfreigabe sind inzwischen mit echten UI-Proofs ergänzt. Incident-Verwaltung mit Rollen, Verlauf, Zuständigkeit und Revisionsprüfung ist ergänzt und im echten UI geprüft. Einige Security-/Agentenfelder bleiben Advanced JSON; externe Tickets, automatische Fälle und vollständiger Daten-Lifecycle bleiben offen. |
| Fleet, Gruppen, Rollout | Teilweise | Gerätebestand, widerrufbare Credentials, globale signierte Policy, per-Gerät Dokument-/Bookmark-Steuerung und serverseitige Rollen vorhanden. `policy-history.mjs` liefert Historie/Diff/Restore als neue Version. `policy-review.mjs` erzwingt bei aktiviertem Deploymentflag unterschiedliche Autor-/Prüferidentität für alle Veröffentlichungswege, einschließlich Teaching und Gerätescan. Restriktive Gerätegruppen, explizite Pilot-Ausweitung und gerätgebundene effektive Policies sind inzwischen implementiert (`docs/group-policy-rollout.md`). Dynamische IdP-Gruppen, automatische Gesundheitsgates, prozentuale Rolloutringe und Mandantenisolation bleiben offen. |
| Admin-Bookmarks lesen/bearbeiten, Firmenlinks und erlaubte persönliche Links | Umgesetzt innerhalb des aktuellen Fleet-Modells | `packages/core/bookmarks.mjs`, `apps/server/bookmarks.mjs`, `apps/browser/bookmarks.cjs`, `tests/bookmarks.test.mjs`, `tests/bookmarks-native.test.mjs`, beide Bookmark-Smokes und Proof-Artefakte. Signierte Firmenlinks, per-Gerät persönliche Revisionen, native und Backend-Rechte. Kein geräteübergreifendes Benutzerroaming oder Gruppenzuweisung. |
| Admin-Bookmarks lesen/bearbeiten, Firmenlinks und erlaubte persönliche Links | Umgesetzt innerhalb des aktuellen Fleet-Modells | `packages/core/bookmarks.mjs`, `apps/server/bookmarks.mjs`, `apps/browser/bookmarks.cjs`, `tests/bookmarks.test.mjs`, `tests/bookmarks-native.test.mjs`, beide Bookmark-Smokes und Proof-Artefakte. Signierte Firmenlinks, per-Gerät persönliche Revisionen, native und Backend-Rechte. Gruppenspezifische Firmenlinks über effektive Policies in `packages/core/policy-groups.mjs`; kein geräteübergreifendes persönliches Benutzerroaming. |
| Eigener Proxy, VPN, DNS | Teilweise | `apps/browser/network-posture.cjs`, `packages/core/enterprise.mjs`, `tests/network-posture.test.mjs`, `scripts/enterprise-browser-smoke.mjs`: Windows-DNS, Corporate DoH, Proxy/PAC, VPN-Adapter/DNS-Prüfung. Adapterpräsenz ist keine kryptografische Tunnel-/Routenattestation; Erkennung hat Polling-Latenz. Reale Kundentopologien müssen getestet werden. |
@@ -79,14 +89,15 @@ Windows zuerst: einen zentral verwalteten Browser mit lokaler Inhaltsprüfung, f
| KI als First Class, kontrolliertes Gateway | Teilweise | `apps/server/app.mjs`, `inspection.mjs`, Browser-AI-UI, `tests/enterprise-gateway.test.mjs`: freigegebene lokale Ollama/kompatible Provider, serverseitige Credentials, Prompt-/Outputprüfung. Kein vollständiges Berechtigungs-RAG, Modellinventar, Provider-Tenantnachweis oder umfassendes KI-Tool-Autorisierungsmodell. |
| Lokale Agenten steuern Sessions | Teilweise; geschützte unterstützte Aktionen geprüft | Individuelle zentral genehmigte Identitäten, Generation/Expiry, Zielhostbindung, DPAPI-Pairing, ML-KEM-1024/AES-GCM und gepinnte Ed25519/ML-DSA-87-Challenges, HMAC/Replay-Abwehr. Native Tab-UUIDs, Seiteninteraktion, Inspektion, Bookmarks, Appearance, gruppierte Tabs, geprüfte History-Navigation und begrenzte Fenstersteuerung sowie menschenentsperrtes Vault-Autofill implementiert. `docs/individual-agent-grants.md`, `docs/agent-history-window.md`, `docs/agent-vault-controls.md`, jeweilige echte Native-Proofs. Sichere Screenshots, Datei-/Vault-Mutationen, umfassende Widgets und attribuierte Worker-Steuerung bleiben offen; keine freie JS/CDP- oder Credential-Export-API. |
| Lokale Agenten steuern Sessions | Teilweise; geschützte unterstützte Aktionen geprüft | Individuelle zentral genehmigte Identitäten, Generation/Expiry, Zielhostbindung, DPAPI-Pairing, ML-KEM-1024/AES-GCM und gepinnte Ed25519/ML-DSA-87-Challenges, HMAC/Replay-Abwehr. Native Tab-UUIDs, Seiteninteraktion, Inspektion, Bookmarks, Appearance, gruppierte Tabs, geprüfte History-Navigation und begrenzte Fenstersteuerung sowie menschenentsperrtes Vault-Autofill, separat kontrollierte Login-Vorbereitung und verschlüsselte gespeicherte Sitzungen implementiert. `docs/individual-agent-grants.md`, `docs/agent-history-window.md`, `docs/agent-vault-controls.md`, `docs/agent-session-controls.md`, `docs/controlled-credential-policy.md`, jeweilige echte Native-Proofs. Sichere Screenshots, Datei-/Vault-Mutationen, umfassende Widgets und attribuierte Worker-Steuerung bleiben offen; keine freie JS/CDP- oder Credential-Export-API. |
| Verschlüsselte gespeicherte Sitzungen | Native Integration und finales Windows-Paket geprüft | `session-snapshot.cjs`, `agent-session-adapters.cjs`, `session-restore.cjs`, `docs/agent-session-controls.md`: benannte lokale URL/Titel/Gruppen-Sammlungen, Gerät/Principal/Generation-Bindung, DLP vor Save/List/Restore, CAS und einmalige Restore-Pläne. Echter Zwei-Prozess-Windows-Proof mit erhaltenen bestehenden Tabs; keine Formulare, Passwörter oder pageState. Kein Cross-Device-Sync oder vollständiges Session-Backup. |
| Passwortmanager mit Post-Quantum-Kryptografie | Teilweise | `apps/browser/vault.cjs`, `password-fill.cjs`, `tests/vault.test.mjs`, `tests/password-fill.test.mjs`: ML-KEM-1024/AES-GCM/scrypt und Windows-DPAPI, Idle-/Blur-Lock, gebundene HTTPS-Formfüllung. Kein Sync/Recovery/Passkeys, keine unabhängige Kryptografieprüfung oder FIPS-Modulvalidierung. |
| Passwortmanager mit Post-Quantum-Kryptografie | Teilweise | `apps/browser/vault.cjs`, `password-fill.cjs`, `tests/vault.test.mjs`, `tests/password-fill.test.mjs`: ML-KEM-1024/AES-GCM/scrypt und Windows-DPAPI, Idle-/Blur-Lock, gebundene HTTPS-Formfüllung. Separat default-off kontrollierter nativer Login-POST in `apps/browser/credential-submission.cjs`, `tests/controlled-login-audit.test.mjs`, `artifacts/controlled-login-native-proof.json`; Vorbereitung sendet nicht. Gefüllte Passwörter sind für die freigegebene Webseite/deren JavaScript im DOM lesbar; keine Passwort-Isolation oder beliebige JS-Login-Unterstützung. Kein Sync/Recovery/Passkeys, keine unabhängige Kryptografieprüfung oder FIPS-Modulvalidierung. |
| UI+pHash+korrekte Login-URL gegen unbekannte Domains | Teilweise | `packages/core/visual-hash.cjs`, `visual-image.cjs`, `apps/browser/visual-phishing.cjs`, `visual-capture.cjs`, `tests/visual-*.test.mjs`, Native-Smoke: echte Pixel, DCT-pHash, exakte erlaubte HTTPS-Origins, Quarantäne/Audit. Admin muss vertrauenswürdige Referenzen liefern; keine voreingestellte Google-Bibliothek. Kein Pre-Render-Block; Layout-/Sprache-/Iframe-/Evasion-Abdeckung und Fehlalarmrate nicht ausreichend evaluiert. |
| OpenTelemetry und SIEM-Standardexport | Teilweise | `apps/server/telemetry.mjs`, `siem.mjs`, `packages/core/siem.mjs`, `tests/telemetry.test.mjs`, `tests/siem.test.mjs`: OTLP Signals, dauerhafte Audit-/Dedup-Pfade, ECS/CEF-Cursor und HTTPS/mTLS-Push mit zentralem SIEM-Exportschalter. Keine Dokument-/Promptinhalte in regulären Events. Incident-Triage und standardmäßig deaktivierte Datenbank-Aufbewahrung implementiert. Incident-Belege und ausstehende SIEM-Exporte bleiben erhalten. Zentral signierte Browser-OTLP-Traces/Logs mit Laufzeiten und Trace-/Span-Korrelation sind jetzt integriert und mit realem Electron/Collector geprüft. Separater verschlüsselter Belegspeicher serverseitig vorhanden; Browser-Erfassung/Analystenansicht, detaillierte Python-Phasen, automatische Fälle, externe SIEM-/Datei-/Backup-Aufbewahrung und reale Kunden-SIEM-Tests bleiben offen. |
| OpenTelemetry und SIEM-Standardexport | Teilweise; unterstützte Debug-/Auditpfade nativ geprüft | `apps/server/telemetry.mjs`, `apps/browser/diagnostics.cjs`, `packages/core/siem.mjs`: zentral abschaltbare OTLP-Signals, langlebiger Exportfehlerzähler, korrelierte Browser-/Backend- und Audit-/Credential-Stufen, ECS/CEF-Cursor und HTTPS/mTLS-Push mit zentralem SIEM-Schalter. `apps/inspector/stage_timings.py`, `tests/stage_timings_test.py`, `artifacts/inspector-stages-export-proof.json` belegen begrenzte Parse/OCR/YARA/Makro/Semantik-Phasen mit Parent-Struktur; keine vollständigen Chromium-/Python-Profiler-Traces. Pflicht-Audit ist von Debug-Telemetrie getrennt. Automatische Fallbildung, externe SIEM-/Datei-/Backup-Aufbewahrung und reale Kunden-SIEM-Abnahme bleiben offen. |
| Geschützte Browser-Belege und Analystenansicht | Umgesetzt für begrenzte Metadaten; Inhalts-Replay offen | `apps/browser/evidence-capture.cjs`, `evidence-delivery.cjs`, `apps/server/evidence.mjs`, `apps/server/public/evidence-viewer.js`, `tests/evidence-viewer.test.mjs`, `artifacts/download-evidence-native-proof.json`, `artifacts/interaction-evidence-native-proof.json`, `artifacts/evidence-ui-proof.json`: default-off Download-, abgeschlossene Clipboard-/Agent-Klick- sowie beobachtete Foreground-Gestenmetadaten, atomic DPAPI-Queue, PQ-Transport, verschlüsselter Belegspeicher und zweckgebundene auditierte Analystenfreigabe. Anzeige löscht sich nach einer Minute; beobachtetes Submit ist kein Übertragungsbeweis. Vollständige Dokument-/Seiteninhalte, Replay und umfassender Evidence-Lifecycle bleiben offen. |
| Frei anlegbare Nutzerprofile und Funktionsrechte | Umgesetzt für unterstützte Profileigenschaften | `tests/user-profiles.test.mjs`, native DevTools-Prüfung und `artifacts/profiles-admin-proof.json`, `profiles-review-admin-proof.json`, `devtools-profile-proof.json`: beliebige Profile, verifizierte SSO-Subjekte oder Geräte, Kategorien/Allow-/Denylists, restriktive Konfliktregeln, explizite DevTools-Delegationsobergrenze, Dokumentpflicht und Download-/AI-/Agentenrechte. Kategorien sind administrierte Domainlisten; keine umfassende kommerzielle URL-Kategorisierungsdatenbank. Freigegebene DevTools sind ein privilegierter Vertrauensbereich mit bekanntem Clipboard-Ausnahmepfad. |
@@ -134,7 +145,7 @@ Windows zuerst: einen zentral verwalteten Browser mit lokaler Inhaltsprüfung, f
- [ ] Automatische Rollout-Freigabe-/Stop-Regeln, prozentuale Ringe und dynamische IdP-/SCIM-Mitgliedschaft.
- [ ] Sichere immutable Freigabe von Dateiuploads und vollständige unterstützte Netzwerkkanäle im nativen Browser. Abnahme: kontrollierter Receiver erhält niemals nach dem Scan ausgetauschte Bytes; Frames/Worker/WebSockets/Streams sind explizit abgedeckt oder gesperrt.
- [ ] Vollständige Kanalabnahme über die bereits nachgewiesenen normalen NTFS-Dateiuploads hinaus. `docs/windows-file-uploads.md` beschreibt vorhandene immutable Handle-Leases und Receiver-Proofs; unterstützte zusätzliche Frames/Worker/WebSockets/Streams brauchen eigene native Zuordnung und Freigabe. Uninspectable Pfade bleiben gesperrt.
- [ ] Vollständige Dokument-Render-/Attachmentprüfung, Audio-Transkription und Video-Frames im isolierten lokalen Worker. Abnahme: bekannte Secrets in jeder unterstützten Modalität und im Dateiende werden erkannt; unvollständige Coverage kann nicht freigegeben werden.
@@ -180,7 +191,7 @@ Eine getrennte Weboberfläche ist die vorhandene und sinnvolle Verwaltungsarchit
## In dieser Iteration umgesetzt
## Historischer erster Admin-/Isolationsincrement
@@ -196,7 +207,12 @@ Eine getrennte Weboberfläche ist die vorhandene und sinnvolle Verwaltungsarchit
## Verifikation
## Historische Verifikation und chronologische Increments
Die folgenden Abschnitte dokumentieren den jeweils damaligen Stand. Frühere
Offen-Meldungen, Testzahlen und Paketnachweise sind historische Momentaufnahmen;
für den aktuellen Status gilt die Matrix oben und der abschließende aktuelle Proof.
Fehlgeschlagene Läufe werden nicht gelöscht oder als erfolgreich umgedeutet.
@@ -675,3 +691,112 @@ The executable remains unsigned; no signed production installer is claimed.
Die zentrale Admin-UI verifiziert separate standardmaessig ausgeschaltete Rechte, unabhaengige Freigabe, Auditor-Read-only und Policy-History-Restore. 154 abgeschlossene API-Requests exportierten korrelierte Traces; drei abgebrochene GETs sind getrennt dokumentiert. Save/List/Restore und Audit-Serialisierung/Verschluesselung/Write/fsync/Commit exportieren benannte echte OTLP-Stufen. Die fruehere 683-ms-Audit-Beobachtung bleibt ursachenseitig ungeklaert; neue Traces ersetzen keine fehlende historische Messung.
Finaler stabiler Windows-Build und exakter Paketvergleich bestehen: artifacts/session-release-windows-build.log und artifacts/session-final-package-proof.log. Der erste Build wurde wegen geaenderter Quellen verworfen; nur der finale stabile Build gilt. Das Executable ist weiterhin NotSigned. Native Proofs: artifacts/session-agent-controls-native-proof.json und artifacts/agent-grants-history-admin-proof.json. Vollstaendige Produkt-/Produktionsabnahme bleibt offen.
## Kontrollierte Login-Vorbereitung, aktueller Integrationsstand
Zentral gibt es standardmäßig ausgeschaltete `passwordManager.controlledSubmission`
und eine separate, ebenfalls ausgeschaltete Agent-Berechtigung `vault:prepare-submit`.
Bis zu 32 eindeutige Regeln enthalten ausschließlich exakte kanonische HTTPS-
Action-URLs und unterschiedliche begrenzte ASCII-Feldnamen. Human-Unlock bleibt
Pflicht. Die tatsächliche Admin-Weboberfläche prüfte unabhängige Freigabe,
Self-Approval-Verweigerung, Auditor-Read-only und signierte Baseline/Individual-
Grants einschließlich History-Restore. Vorbereiten füllt, sendet aber nicht.
Der aktuelle privilegierte Broker bindet eine 15-Sekunden-Einmalfreigabe an exakte
Credential-Werte, Native Frame/Document, Actor/Generation, Policy, Vault und
Foreground-Aktivierung. Unterstützt ist nur ein begrenzter nativer same-origin
URL-encoded Main-Frame-POST; andere Felder und Header werden weiter geprüft.
302-GET-Navigation erhält normale Kontrolle, 307/308-Credential-Replay wird blockiert.
Die Webseite kann gefüllte Credentials im DOM per JavaScript lesen: keine Passwort-
Isolation, keine Form-Attestierung und keine allgemeine Phishing-Garantie.
Das isolierte native Fixture hat bereits reale POST-Zustellung, sicheren 302,
blockierten 307, Residual-/Duplikat-/Action-/Header-Verweigerungen, menschlichen
UI-Handoff, Vault-Lock, Tabwechsel, zentrale Abschaltung und Target-Revoke gezeigt
(`artifacts/controlled-login-native-proof.json`). Die aktuellste Terminal-/Race-
Integration muss vor Freigabe erneut nativ getestet werden. Gesamttests, stabiler
Windows-Build und exakter Paketvergleich sind für diesen aktuellen Increment noch
nicht nachgewiesen; die früheren 624 Tests/Builds bleiben historische Nachweise.
Vier aktuelle Backend-Tests belegen authentifizierte, deduplizierte Aufnahme aller
fünf Vault-Submission-Lifecycle-Events, integren Audit-Hashchain, Secret-Metadaten-
Verweigerung für jedes Event und rollenbeschränkten ECS-/CEF-Export. Prepared ist
lokale Vorbereitung, Authorized eine Policy-Entscheidung, Completed ein beendeter
nativer HTTP-Transfer (auch mit HTTP-Fehlerantwort), Failure ein Transportfehler.
Keines beweist erfolgreichen Website-Login. Denied exportiert Security-Denial;
ECS-Failure bleibt Error/Failure, CEF nutzt den festen Action-Namen mit bestehender
Severity 3. Credential-Werte, Form-IDs, Host/Action-URL und Request-Bodies bleiben
außerhalb gewöhnlicher Vault-Events.
Benannte echte Debug-Stufen umfassen Issue/Claim/Headers/Authorize/Redirect und
Terminal-Complete/Failure plus Local-/Enterprise-Inspection und die fünf Audit-
Persistenzstufen. Die letzte native Trace-Zuordnung des aktuellen Codes ist noch
zu verifizieren; Startup und vorhandene historische Traces ersetzen diesen
Nachweis nicht. Collector-Ausfälle dürfen keine Wiederholung geschützter Requests
oder Aufweichung der Policy verursachen. Details: `AGENT-API.md` und
`docs/controlled-credential-policy.md`.
Individual Mode blockiert weiter nicht zuordenbare Session-/Worker-Requests ohne
einen bekannten geschützten nativen Tab-Owner. Der aktive Tab ist kein Ownership-
Beweis. Legitime Worker-Unterstützung mit beweisbarer Actor-Zuordnung/Isolation,
volle JavaScript-Login-Kompatibilität, sicherer visueller Agent-Export und breitere
Datei-/Admin-Steuerung bleiben offen. Ebenso alle ursprünglichen Produktions-
Abnahmen: signierter Installer/Updates, Geräteschlüssel/Enrollment/Rotation,
HA/Backup/Recovery, echte Kunden-Integrationen und unabhängige Sicherheitsprüfung.
Das vollständige Ziel ist weiterhin nicht erreicht.
### Aktuelle Nachprüfung der Credential-Umgehungen
Die vollständige Suite besteht jetzt mit 668 Tests. Die Prüfung fand zusätzlich
eine GET-URL-Lücke bei vorbereiteten Freigaben und einen echten nativen
Split-Header-Fehler: Chromium fügt einen eigenen Header zwischen die beiden
Fragmente ein. Die vorbereitete Freigabe prüft jetzt URLs und Header ohne neue
DLP-Ausnahme; Header-Prüfungen berücksichtigen begrenzte Zweierkombinationen in
beiden Reihenfolgen. Öffentliche Subframe-Requests behalten die Freigabe.
Der fehlgeschlagene native Test bleibt als lokaler Nachweis erhalten.
Arbiträre Fragmentierung/Encodings und Isolation vor Website-JavaScript sind
weiterhin nicht nachgewiesen. Finale native Prüfung und Paketprüfung laufen noch.
Der korrigierte finale native Test besteht: nicht in Core-DLP registrierte
synthetische Vault-Zugangsdaten werden sowohl in GET-URL als auch in zwei echten,
durch native Header getrennten Fetch-Headern blockiert. Der Receiver meldet null
Credential-URL-/Header-Leaks; ICAP prüft 54 Requests, blockiert genau den erwarteten
Residual-Marker und beobachtet keine Zugangsdaten. Die regulären POST-/302-/307-,
YARA-, UI-Handoff-, Widerrufs- und 17-Sekunden-Terminalfälle bestehen ebenfalls.
Trace `6709b228cb8ce71a88acc7584a27c5a1` exportiert 101 korrelierte Spans; der
Collector meldet null abgewiesene Schreibvorgänge. Die endgültige Paketprüfung
steht nach abschließender Quellnormalisierung noch aus.
Der endgültige Windows-Build aus stabilen Quellen und der exakte Paket-/Runtime-
Vergleich bestehen (`artifacts/controlled-login-release-windows-build.log`,
`artifacts/controlled-login-final-package-proof.log`). Enthalten sind der aktuelle
Credential-Broker, die zentrale Policy-Schemaergänzung, Upload-Leases, enthaltene
YARA-/OCR-/Semantik-Runtimes und beide geschützten Agent-Clients. Syntaxprüfungen
bestehen. Das Executable meldet weiterhin `NotSigned`; eine signierte Installation
oder ein produktiver Updatekanal ist damit nicht bewiesen. Repository-Beschreibung
und 13 fachliche Topics wurden über die Gitea-API erneut gelesen und bestätigt.
## Abschließender aktueller Controlled-Login-Proof
668 Tests bestehen (`artifacts/controlled-login-final-suite.log`), ebenso Syntax,
stabiler Windows-Build und exakte Paket-/Runtime-Prüfung in den oben genannten
finalen Logs. Der verstärkte unabhängige native Receiver sieht vier Credential-
POSTs, null öffentliche POSTs, null Replay und null Credential-Leaks in URL oder
Headern; die Prüfung berücksichtigt beliebige private Name/Wert-Paare statt nur
erwarteter Feldnamen. ICAP prüft 54 Requests, blockiert genau einen erwarteten
Residual-Marker und erhält keine Credentials. Nachweise:
`artifacts/controlled-login-native-proof.json`,
`artifacts/controlled-login-browser-vault.png`.
Trace `050f7f44bc009f949c838f8a067649e4` enthält 101 tatsächlich exportierte,
parent-korrelierte Spans einschließlich Native-Claim/Parse/Match/Residual/Header/
Authorize/Complete, Local-/Enterprise-Inspection und Audit-Persistenz. Der
Collector meldet null abgewiesene Schreibvorgänge. Diese kontrollierten Fixtures
beweisen ihre Szenarien; sie schließen weder Worker-Ownership noch allgemeine
JavaScript-Logins, Passwort-Isolation, vollständige Exfiltrationsabdeckung oder
die ursprünglichen Produktions-/Kundenabnahmen. Das Gesamtziel bleibt offen.
+25
View File
@@ -0,0 +1,25 @@
# Native worker ownership: verified boundary and next implementation
Current individual-agent mode blocks requests without a guarded native tab owner. This deliberately prevents service workers from borrowing an actor's authority through origin, Referer, renderer messages or a guessed tab. It also limits compatibility with worker-dependent applications.
## Native evidence
A local Windows feasibility experiment used Electron 44.7.0 / Chromium 152.0.7977.130, two independent in-memory native sessions, and the same synthetic loopback origin. Each session registered a service worker and initiated a POST from that worker. Each session's native webRequest listener received only its own request.
The worker requests had no webContentsId or requesting frame. Both had the same initiator origin. Their request objects carried no worker version ID or process ID. ServiceWorkers.getAllRunning exposed different renderProcessIds, but those identifiers were absent from webRequest events. Runtime worker version IDs were available as dictionary keys; the worker information values omitted the versionId field advertised in the installed type definition.
Local ignored evidence: `artifacts/worker-partition-feasibility.json` and `.log`. This isolated API experiment did not run production browser guards or establish an OpenTelemetry integration proof.
Electron documents native [webRequest events](https://www.electronjs.org/docs/latest/api/web-request), [service-worker inventory](https://www.electronjs.org/docs/latest/api/service-workers), and [session partitions](https://www.electronjs.org/docs/latest/api/session). The installed `node_modules/electron/electron.d.ts` was checked against the actual runtime.
## Defensible design
Allocate a separate native session for each immutable device/principal/generation identity. Assign ownership in the main process before creating any native tab or initiating a request. Install the full network, DLP, download, permission, proxy, DNS and preload controls before the partition is used. A worker's owning principal then comes from the listener's native session closure, not page-supplied claims.
Never reassign a partition to another actor or newer generation. Check the current signed grant, device status, policy expiry and destination scopes before inspection, after every awaited stage and immediately before release. Revocation must quarantine the owner's partition and close its connections. Cookies and authentication state should remain isolated unless a separate explicitly authorized sharing design is implemented.
This attributes requests to a principal, not to a specific tab. Shared workers can serve multiple tabs, and service workers may outlive their clients. Any operation requiring an unavailable tab, exact document or visual approval must remain blocked until an independently verified context is available. Worker downloads, immutable streamed request-body inspection, background lifetimes, restart ownership and complete revocation behavior need native proofs.
## Migration surface
The current main process uses one `browserSession` for proxy updates, DNS resolution, permission handlers, upload terminal events, download fetching and will-download, webRequest gates, developer-tools frontends, preload registration, native tab construction, revocation cleanup and VPN quarantine. All relevant uses must become session-aware together. Merely selecting a new session for a tab while leaving these controls global would create an enforcement gap.