security: batch of fixes #95

Merged
Skipper merged 14 commits from zeroized-bootstrap-token into main 2026-06-29 18:00:14 +00:00
Member

closes #73
closes #71
closes #67
closes #65
closes #64 (todo: Frontend)
closes #63
closes #60
closes #59
closes #54

closes #73 closes #71 closes #67 closes #65 closes #64 (todo: Frontend) closes #63 closes #60 closes #59 closes #54
CleverWild added 1 commit 2026-06-18 15:16:25 +00:00
security(memory): zeroization of bootstrap token
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline was successful
ci/woodpecker/pr/server-test Pipeline failed
dc03923c24
CleverWild requested review from Skipper 2026-06-18 15:16:31 +00:00
CleverWild added 1 commit 2026-06-18 17:30:36 +00:00
security(server): use SysRng directly for bootstrap token generation
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline was successful
ci/woodpecker/pr/server-test Pipeline failed
32ceb27d77
Replace make_rng()/StdRng with UnwrapErr(SysRng) to eliminate the PRNG
intermediate layer and make OS entropy derivation explicit and unambiguous.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CleverWild changed title from security(memory): zeroization of bootstrap token to security(memory): bootstrap token 2026-06-18 17:35:49 +00:00
CleverWild added 1 commit 2026-06-18 18:59:35 +00:00
fix(bootstrap): token persists on disk with weak file permissions #59
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline failed
85f27d8f09
CleverWild changed title from security(memory): bootstrap token to security: batch of fixes 2026-06-18 19:00:35 +00:00
CleverWild added 1 commit 2026-06-18 19:16:44 +00:00
security: feat unseal and bootstrap handshake brute-force protection
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline failed
670448292a
CleverWild removed review request for Skipper 2026-06-19 11:33:26 +00:00
Skipper requested changes 2026-06-19 14:03:45 +00:00
Skipper left a comment
Owner

Well, we have safe_cell abstraction, so I don't see a need to introduce new zeroize depependency, and potentially new-type wrapper

Additionally, safe_cell provides memory permission management (e.g. if it's not read or written atm, the memory page has zero access)

Well, we have `safe_cell` abstraction, so I don't see a need to introduce new `zeroize` depependency, and potentially new-type wrapper Additionally, `safe_cell` provides memory permission management (e.g. if it's not read or written atm, the memory page has zero access)
Author
Member

Well, the absence of zeroize was supposed to make me think over. Gonna be fixed.

Well, the absence of `zeroize` was supposed to make me think over. Gonna be fixed.
CleverWild added 1 commit 2026-06-19 20:21:53 +00:00
fix(UA): signing endpoint accepts arbitrary client_id
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline failed
c12c12d73e
CleverWild added 1 commit 2026-06-19 20:53:33 +00:00
security(bootstrap): use SafeCell for token storage instead of zeroize
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline was successful
f0456157d5
CleverWild added 1 commit 2026-06-22 12:55:38 +00:00
fix(wallet): delete access entries by entry ID instead of wallet ID
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline was successful
77bf19f99e
CleverWild added 1 commit 2026-06-22 13:50:49 +00:00
fix(integrity): return AttestationStatus::Unavailable for key version mismatch
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline was successful
9c9dc1fbb5
CleverWild added 1 commit 2026-06-22 13:58:44 +00:00
fix(operator): bind sign-transaction to operator-approved client set
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline was successful
b8e092b9d7
CleverWild added 1 commit 2026-06-22 14:08:03 +00:00
fix(client-auth): freeze client metadata after initial operator approval
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline failed
b7ab5c79b7
CleverWild added 1 commit 2026-06-22 15:53:39 +00:00
fix!: protect evm_wallet integrity and bind key ciphertext to wallet address
Some checks failed
ci/woodpecker/pr/server-audit Pipeline was successful
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline failed
ci/woodpecker/pr/server-test Pipeline failed
00ddf99d77
Three independent failures allowed an offline attacker with DB write access
to sign transactions using a different wallet's private key:
1. evm_wallet had no HMAC envelope — aead_encrypted_id could be swapped silently.
2. AEAD used a static tag as AAD — any valid ciphertext decrypted as any wallet key.
3. No post-decryption check that the derived address matched the requested wallet.

Fix: sign_entity covers (address, aead_encrypted_id) in a single transaction;
CreateNew/Decrypt take caller-provided AAD (wallet address bytes); after decryption
signer.address() is verified against the requested wallet address.
CleverWild requested review from Skipper 2026-06-22 15:54:47 +00:00
CleverWild added 1 commit 2026-06-25 18:09:23 +00:00
fix: lints
Some checks failed
ci/woodpecker/pr/server-audit Pipeline failed
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline was successful
ci/woodpecker/pr/server-test Pipeline failed
022003ac5e
Owner

LGTM, fix merge conflict and tests

LGTM, fix merge conflict and tests
CleverWild added 1 commit 2026-06-27 11:25:33 +00:00
Merge branch 'main' into zeroized-bootstrap-token
Some checks failed
ci/woodpecker/pr/server-audit Pipeline failed
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline was successful
ci/woodpecker/pr/server-test Pipeline failed
8381b68a52
Author
Member

Done

Done
CleverWild removed review request for Skipper 2026-06-27 11:36:56 +00:00
CleverWild requested review from Skipper 2026-06-27 11:37:04 +00:00
Owner

tests still fail tho

tests still fail tho
CleverWild added 1 commit 2026-06-28 11:24:26 +00:00
test(client-auth): update metadata test to reflect frozen-metadata behavior
Some checks failed
ci/woodpecker/pr/server-audit Pipeline failed
ci/woodpecker/pr/server-vet Pipeline failed
ci/woodpecker/pr/server-lint Pipeline was successful
ci/woodpecker/pr/server-test Pipeline was successful
ci/woodpecker/pr/useragent-analyze Pipeline failed
23827c613e
CleverWild removed review request for Skipper 2026-06-28 11:25:00 +00:00
CleverWild requested review from Skipper 2026-06-28 11:25:01 +00:00
Skipper merged commit 357726bc5d into main 2026-06-29 18:00:14 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MarketTakers/arbiter#95