You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The user's Ethereum private key — which controls their blockchain identity and potential cryptocurrency assets (NUM tokens) — is stored as a plaintext string using Capacitor's Preferences API. On Android this maps to SharedPreferences (an XML file in the app's data directory) and on iOS to UserDefaults, both of which are unencrypted key-value stores.
Lines 127-131: storeValue() writes raw value to Capacitor Preferences with no encryption layer
Also affected
src/app/shared/dia-backend/auth/dia-backend-auth.service.ts, lines 446-448: Auth tokens and JWT refresh tokens stored in the same unencrypted storage
Impact
Severity: Critical
On a rooted/jailbroken device, via ADB backup, or through a filesystem exploit, an attacker can trivially extract the private key
This key controls: digital signatures on all captures (integrity wallet), potential NUM token assets, and the user's Numbers Protocol blockchain identity
Summary
The user's Ethereum private key — which controls their blockchain identity and potential cryptocurrency assets (NUM tokens) — is stored as a plaintext string using Capacitor's
PreferencesAPI. On Android this maps toSharedPreferences(an XML file in the app's data directory) and on iOS toUserDefaults, both of which are unencrypted key-value stores.Affected Files
Primary: Plaintext key storage
src/app/shared/collector/signature/capture-app-web-crypto-api-signature-provider/capture-app-web-crypto-api-signature-provider.service.tsthis.preferences.getString$(PrefKeys.PRIVATE_KEY)getPrivateKey()retrieves from unencrypted storageStorage layer (no encryption)
src/app/shared/preference-manager/preferences/capacitor-storage-preferences/capacitor-storage-preferences.tsstoreValue()writes rawvalueto Capacitor Preferences with no encryption layerAlso affected
src/app/shared/dia-backend/auth/dia-backend-auth.service.ts, lines 446-448: Auth tokens and JWT refresh tokens stored in the same unencrypted storageImpact
Suggested Fix
Capacitor Preferenceswith platform-specific secure storage for all sensitive data:capacitor-secure-storage-pluginwhich wraps platform keystoresReferences
Generated by Health Monitor with Omni