Add policy-bound credential submission and native DLP audit proofs
This commit is contained in:
1 parent
b991ee9da6
commit
c8b6ff9cdd
45 files changed
+777
-98
No files matched your search
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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
@@ -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.
|
||||
@@ -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.
|
||||
Reference in new issue
Block a user