Skip to content

fix: poprawki z audytu 04.11 (hasło szyfrowania w Keychain bez przycinania) - #49

Merged
mbeczynski merged 1 commit into
mainfrom
fix/audyt-04-11
Nov 4, 2026
Merged

mbeczynski merged 1 commit into
mainfrom
fix/audyt-04-11

Conversation

@mbeczynski

Copy link
Copy Markdown
Contributor

Co

KeychainStore.save przycinał każdą wartość (spacje i nowe linie na brzegach), a vm-encrypt setup szyfrował kopię hasłem w postaci wpisanej (rclone obscure dostaje surowy ciąg). Hasło ze spacją na początku albo na końcu trafiało więc do rclone.conf w jednej postaci, a do Keychain w innej. Kopia w Keychain, która ma służyć do odzyskania, nie odszyfrowałaby kopii.

  • KeychainStore.save(_:account:service:exact:): z exact: true zapisuje wartość bez zmian. Pusta albo z samych białych znaków jest odrzucana jak dotąd.
  • DriveEncryption.keychainItems(password:salt:): to, co setup zapisuje (hasło i sól, oba exact). Wywołanie save bierze flagę z tej listy.
  • Inni wołający (wklejany client_id/client_secret) dalej przycinają.

Testy

  • KeychainStoreValueTests (5 testów, bez dotykania Keychain): exact zachowuje spacje, domyślnie wartość jest przycinana, pusta wartość jest odrzucana, a setup zapisuje hasło i sól dokładnie tak, jak je zaszyfrował.
  • Kanarek: exact: false dla hasła w keychainItems daje czerwony test. Bez exact w valueToStore też jest czerwony.
  • swift test: 410 testów, 0 błędów.

Starsze instalacje

Problem dotyczy tylko instalacji, na których vm-encrypt setup przyjął hasło ze spacją na brzegu. setup odmawia powtórzenia, gdy remote już istnieje, więc tej kopii PR nie poprawi. W praktyce chodzi raczej tylko o maszynę testową szyfrowania (#40 jest w próbie).

Odzyskiwanie w takim przypadku: prawdziwe hasło to wartość z Keychain plus spacje na brzegu, dokładnie te, które wpisano przy setup. Hasło można sprawdzić bez ruszania kopii: rclone reveal na polu password sekcji crypt w rclone.conf daje dokładny ciąg. Jeśli w haśle są znaki spoza ASCII, porównuj zapis szesnastkowy (| xxd), nie to, co widać w terminalu.

Poza tym PR

Hasło idzie do security add-generic-password jako argument -w (przez ułamek sekundy widać je w ps). To trafia na listę propozycji z audytu, nie do tego PR.

Nie scalać bez decyzji właściciela.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AU1Mhxpy65J75YYTkmt7NF

…yped

KeychainStore.save trimmed every value, while setup passed the raw
password to `rclone obscure`. A password with a leading or trailing space
encrypted the backup with one string and was kept in the Keychain as
another, so the copy meant for recovery would not decrypt it.

save(exact:) stores the value as given; setup uses it for the password.
Other callers (pasted client_id/client_secret) keep trimming.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AU1Mhxpy65J75YYTkmt7NF
@mbeczynski
mbeczynski merged commit 2d6b1b9 into main Nov 4, 2026
2 checks passed
@mbeczynski
mbeczynski deleted the fix/audyt-04-11 branch November 4, 2026 12:04
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