Skip to content

fix(security): IPC hardening + clipboard/backup/gitignore (audit giu-2026)#51

Merged
pexatar merged 2 commits into
mainfrom
security/ipc-hardening-2026-06
Jun 8, 2026
Merged

fix(security): IPC hardening + clipboard/backup/gitignore (audit giu-2026)#51
pexatar merged 2 commits into
mainfrom
security/ipc-hardening-2026-06

Conversation

@pexatar

@pexatar pexatar commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Contesto

Audit di sicurezza completo del codebase PK4 (branch main, post v2.0.0). Il nucleo crittografico è risultato solido (AES-256-GCM, Argon2id/PBKDF2 600k, DEK in PinnedSecureBuffer, SQLite parametrizzato, ECDH P-256+HKDF coerente JS↔.NET) — nessun finding Critico. Questa PR chiude le superfici d'attacco residue, concentrate sul canale IPC verso le estensioni browser.

Threat model IPC: la named pipe è ACL-ristretta al SID dell'utente corrente, quindi l'attaccante rilevante è un processo same-user. I fix eliminano comunque i percorsi banalmente abusabili e la "security theater".

Modifiche

IPC (BrowserIpcService + estensioni chrome/firefox)

  • 🟠 Rimosso il fallback in plaintext di get-credential-password: la password è ora sempre cifrata AES-GCM con la chiave della sessione ECDH. Un client che salta l'handshake riceve no-session, non il segreto in chiaro.
  • 🟡 Sessione legata alla richiesta via SessionId nel payload (GetCredentialPasswordRequest.SessionId), al posto di "una sessione valida qualsiasi". Entrambe le estensioni aggiornate per inviarlo e per rifiutare risposte prive di nonce.
  • 🟡 Throttling unlock-vault: lockout di 30s dopo 5 tentativi falliti.
  • 🔵 Cap di 32 sessioni ECDH con evict del più vecchio (anti-DoS memoria).
  • 🔵 Diagnostica Debug.WriteLine nei catch finora silenziosi.

Altri fix

  • 🟡 Clipboard: Flush() solo per contenuti non sensibili → le password non sopravvivono alla chiusura dell'app (oltre all'auto-clear a 30s).
  • 🔵 Auto-backup: rotazione che mantiene gli ultimi 10 .autobak.
  • 🟡 .gitignore: ignora *.pkbak, *.autobak, passkey.db e artefatti locali, per evitare il commit accidentale di vault cifrati reali su repo pubblico.

Non incluso (con motivazione)

  • SkiaSharp 2.88.9: dotnet list --vulnerable è pulito e SkiaSharp non è referenziato in alcun .cs → advisory NU1903 non più attivo, nessun bump.
  • content script http://*/*: lasciato, rimuoverlo degraderebbe l'autofill su siti intranet/HTTP (trade-off documentato).

Compatibilità

Cambio di protocollo IPC: Desktop ed estensioni vanno rilasciati insieme (entrambi i lati aggiornati qui). Il BrowserHost inoltra l'envelope invariato e non è stato toccato.

Verifica

  • Build Desktop: 0 errori / 0 warning
  • Test: 222/222 passati

🤖 Generated with Claude Code

pexatar and others added 2 commits June 8, 2026 15:14
…2026)

Audit di sicurezza post v2.0.0. Il nucleo crypto era solido; questi fix
chiudono le superfici residue, soprattutto sul canale IPC verso le estensioni.

IPC (BrowserIpcService + estensioni chrome/firefox):
- Rimosso il fallback in PLAINTEXT di get-credential-password: la password
  viene ora SEMPRE cifrata AES-GCM con la chiave della sessione ECDH. Un
  client che salta l'handshake riceve "no-session" anziché il segreto in chiaro.
- La sessione è legata alla richiesta tramite SessionId nel payload
  (GetCredentialPasswordRequest.SessionId) invece di "una sessione valida
  qualsiasi". Aggiornate entrambe le estensioni per inviarlo.
- Throttling su unlock-vault: lockout 30s dopo 5 tentativi falliti.
- Cap di 32 sessioni ECDH con evict del più vecchio (anti-DoS memoria).
- Diagnostica Debug nei catch finora silenziosi.

Altri fix:
- ClipboardService: Flush() solo per contenuti non sensibili, così le
  password non sopravvivono alla chiusura dell'app (oltre all'auto-clear 30s).
- BackupFileService: rotazione auto-backup (mantiene gli ultimi 10).
- .gitignore: ignora *.pkbak/*.autobak/passkey.db e artefatti locali, per
  evitare il commit accidentale di vault cifrati reali.

Build: 0 errori/0 warning. Test: 222/222 passati.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… change)

The get-credential-password wire protocol now requires sessionId and drops
the plaintext fallback; extensions and Desktop must ship together. Bump both
Chrome and Firefox manifests so the updated build is published to the stores.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@pexatar pexatar merged commit 12cf769 into main Jun 8, 2026
1 check passed
@pexatar pexatar deleted the security/ipc-hardening-2026-06 branch June 8, 2026 13:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant