Skip to content

Fix/issue 8 initialize auth - #22

Open
ple1155n-cmyk wants to merge 5 commits into
YieldAnchor:mainfrom
ple1155n-cmyk:fix/issue-8-initialize-auth
Open

ple1155n-cmyk wants to merge 5 commits into
YieldAnchor:mainfrom
ple1155n-cmyk:fix/issue-8-initialize-auth

Conversation

@ple1155n-cmyk

Copy link
Copy Markdown

Fixes #8

Problem & Threat Model

Previously, initialize in contracts/yield_vault/src/lib.rs only validated that DataKey::Config was not set, without checking caller authorization. On a freshly deployed vault instance, an attacker/front-runner observing contract creation could front-run initialization and supply their own address as admin. Because the admin controls critical operations like pause and unpause with no recovery/replacement mechanism, this vulnerability allowed complete contract capture.

Solution

  • contracts/yield_vault/src/lib.rs: Enforced admin.require_auth() at the start of initialize. The designated admin must cryptographically authorize initialization, preventing front-runners from installing an admin address they do not control.
  • contracts/yield_vault/README.md: Documented the initialization security guarantee requiring admin authorization.
  • docs/deployment/testnet.md: Updated deployment documentation to reflect that the front-running caveat is resolved.

Test Coverage

Added unit tests covering the front-running and authentication paths:

  1. initialize_panics_without_admin_auth: Asserts panic when called without valid authorization.
  2. initialize_requires_admin_auth_before_metadata_validation: Asserts authorization is verified before metadata validation logic.
  3. initialize_rejects_unauthorized_front_runner: Confirms an unauthorized attacker's transaction fails when attempting to front-run initialization.

Verification

  • Contract test suite: pnpm run contract:test (16/16 passed).
  • Static analysis: pnpm run contract:clippy (passed with -D warnings, 0 warnings).

ple1155n-cmyk and others added 5 commits September 20, 2026 20:41
…t-running

Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
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.

fix: initialize is unauthenticated, so a front-runner can capture admin on a fresh vault

1 participant