Armada: self-hosting, permissions, privacy, and security review
Armada: self-hosting, permissions, privacy, and security review
Reviewed source: commit 6698c184, dated September 12, 2026.
Repository: https://nostrhub.io/soapbox@ditto.pub/armada
Some concerns are confirmed: fixed recovery relays, an attachment-encryption flaw, and sensitive data eligible for Android backup. The allegation that Google is “dumping your data” is not established.
1. Encrypted video attachments have a serious flaw
The video and its thumbnail are encrypted with the same AES-GCM key and nonce.
A local test recovered one synthetic file’s plaintext using both ciphertexts and known bytes from the other file, without using the encryption key in the recovery calculation.
A storage provider holding both blobs could exploit this relationship. This does not establish that ordinary chat messages are readable.
The current NIP-17 specification itself instructs this thumbnail reuse. Armada follows that instruction, but it still violates AES-GCM’s requirement that a nonce must not repeat under the same key.
Sources:
2. Some relays remain in use despite custom relay settings
Ordinary relay entries are removable in Settings. However, community and invite recovery code adds these fixed relays:
wss://jskitty.com/nostrwss://asia.vectorapp.io/nostrwss://relay.ditto.pubwss://relay.dreamith.to
A test supplied only a custom relay. The recovery function still queried all four public relays. Recovery updates also use responding stock relays.
Your configured relay list is therefore not an exclusive network allowlist.
Recovery records remain encrypted, but these relays can observe connection metadata, including public-key queries.
Source:
3. Google libraries exist; surveillance is not established
Current Android dependencies include AndroidX and Gson. No Firebase Cloud Messaging, Google Analytics, or Crashlytics integration was found in the inspected current application source.
If “dump code” refers to android.permission.DUMP on ProfileInstallReceiver, that permission restricts who can call the diagnostic receiver. It does not itself grant Armada access to dump other apps’ data or upload anything to Google.
This was a source review, not a complete examination of every dependency inside a released APK.
Source:
4. Android backup presents a real privacy concern
Android backup is enabled. The backup exclusions omit the database containing decrypted chat data and cached community secrets.
Sensitive data is therefore eligible for OS-managed cloud backup, potentially through Google on standard Android installations.
Actual upload depends on device settings, and backups can have their own encryption. This is a confirmed configuration risk, not proof that Google can read the chats.
Source:
5. Self-hosting is genuine, but hosting the frontend is insufficient
The client, relay infrastructure, media storage, and calling broker can run on your infrastructure.
However, defaults still involve outside services. Rendered link previews send URLs to Ditto or provider-specific services such as YouTube, including links displayed from encrypted conversations.
Strict independence requires configuring the relevant services and addressing the fixed recovery routing.
Source:
6. Permissions and confidentiality vary by feature and platform
- Camera, microphone, Bluetooth/location, and extensive background permissions support advertised features.
- No contacts, SMS, or call-log permissions were found in the app’s own manifest.
- Browser-stored private keys use localStorage.
- Desktop storage can fall back to plaintext when credential-store encryption is unavailable.
- NIP-29 groups have a different trust model from Concord. Their voice path explicitly lacks media end-to-end encryption.
Validation and limits
- 263 selected existing tests passed.
- Two independent local tests reproduced attachment nonce reuse and fixed recovery-relay queries.
- Released APKs and live deployments remain unverified.
Practical recommendation: avoid sensitive video uploads until the encryption defect is fixed. Self-hosting alone does not resolve the encryption, backup, or fixed-routing findings.
Write a comment