Skip to content

Security audit of stealth-announcer Soroban contract #1

@truthixify

Description

@truthixify

Labels: Stellar Wave, stellar, audit, security, drips, help-wanted
Tier: L (1–2 weeks)
Type: audit

Context

contracts/stellar/stealth-announcer/ is the Soroban contract that emits stealth address announcements consumed by every Wraith client and indexer. It is event-only (no storage), so the attack surface is narrow — but because every payment flows through it, even a low-severity issue compounds across the entire protocol.

Today the contract has only its in-tree unit tests (#[cfg(test)] modules). It has never been independently reviewed.

We need a full security audit from a contributor with Soroban experience.

Scope

Review the entire crate (lib.rs, any helpers, Cargo.toml dependencies). For each finding, document:

  1. Description — what is the issue?
  2. Severity — Critical / High / Medium / Low / Informational, using the Trail of Bits severity matrix.
  3. Reproduction — a Rust #[test] that demonstrates the issue, or a soroban-cli invocation that triggers it.
  4. Recommendation — a concrete fix.

Specific areas we want covered (non-exhaustive):

  • Event payload integrity — can a caller forge caller field, oversize metadata, or smuggle malicious data through ephemeral_pub_key?
  • Auth model — require_auth() placement, who can call announce, can it be called from CPI by a malicious contract?
  • Resource exhaustion — extremely long metadata, repeated calls, event spam pricing.
  • Soroban-specific footguns — Env::events().publish topic ordering, type confusion across SDK versions.
  • Dependency review — pin versions, audit transitive soroban-sdk features.
  • Comparison against the ERC-5564 reference behavior — semantic parity with the EVM Announcer.

Acceptance criteria

  • Markdown audit report committed at contracts/stellar/stealth-announcer/audits/2026-XX-author.md.
  • One Rust test per finding (in a new tests/audit.rs module) reproducing the issue. Tests that demonstrate safe behavior should be marked #[test] #[should_panic] or assert the panic message.
  • Markdown changelog entry under ## Unreleased summarizing the review.
  • Disclosure timeline if anything Critical/High is found — coordinate via security@usewraith.xyz before publishing.

Resources

Deliverable format

Reports follow this template:

# stealth-announcer audit — <author> — <date>

## Summary
3–5 sentences.

## Findings table
| ID | Severity | Title | Status |

## Findings
### WA-ANN-01 — <Title>
**Severity:** ...
**Reproduction:** ...
**Recommendation:** ...

Metadata

Metadata

Assignees

Labels

Stellar WaveIssues in the Stellar wave programauditProduces a written report as primary deliverabledripsFunded via Drips Networkhelp wantedExtra attention is neededsecuritySecurity-sensitive workstellarTouches Stellar / Soroban code

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions