Security assessment

mSecure 7.1.0
Technical Security Report

Primary question: Could mSecure Cloud vault contents be decrypted following a server-side security incident, notwithstanding mSeven's zero-knowledge claims?

On this page

1. Executive summary

Yes. The examined mSecure build contains weaknesses that make plaintext exposure of mSecure Cloud vault contents possible after a server-side incident. The implementation does not provide robust zero-knowledge protection against a compromised or malicious server.

The most important confirmed facts are:

  1. The mSecure Account Password is transmitted to mSeven's server. During ordinary sign-in, it is placed in the query string of an HTTPS GET request. TLS protects the request on the network, but the plaintext password is available to the service and may be exposed through URL/request logging.
  2. The app also transmits the Account Password-encrypted Account Key to a Parse Cloud function named generatePdfForKey. A system retaining both the Account Password and this encrypted key can recover the Account Key offline and then decrypt an mSecure Cloud vault.
  3. The Account Key itself is generated using C's deterministic random(), seeded with srandom(time(NULL)), rather than a cryptographically secure random-number generator. This substantially undermines the claimed strength of the 46-character Account Key.
  4. Password-based wrapping uses 10,000 PBKDF2-SHA1 iterations, which is weak by contemporary standards for offline password guessing.
  5. Changing the Account Password does not rotate the Account Key or re-encrypt the vault in the examined build.
  6. Record contents are encrypted before upload, but several sensitive metadata fields—including login URLs, app names, tags, template names, and device names—are uploaded as ordinary Parse values.

These findings establish credible exposure paths. mSeven's subsequent support email confirms that an unauthorized actor acquired an encrypted database belonging to current and former mSecure Cloud users, but there is still no public confirmation that vault plaintext was accessed or decrypted. The exact database contents, incident timeline, and any exposed authentication/key material remain undisclosed.

Until mSeven publishes a technically specific incident report and corrective release, users should treat cloud-synchronized vaults as potentially compromised and should not regard merely changing the mSecure Account Password as sufficient remediation.

2. Artifact identification and provenance

The following artifact was examined:

PropertyValue
ApplicationmSecure.app
Bundle identifiercom.mseven.msecuremac
Marketing version7.1.0
Build number1127
Main executable SHA-2561665c16ff01fbbf9dc4ee4799b5205c6533d41ee5927dfd42551aeece205fa94
Architecturesarm64, x86_64
Primary architecture reviewedarm64
Apple team identifierZL5FFY3M32
Code-signature statusValid on disk; satisfies designated requirement
Gatekeeper assessmentAccepted; source: Mac App Store
Cloud endpoint embedded in binaryhttps://server.msecure.com/parse

The valid signature and Mac App Store assessment establish that the bundle is an authentic signed distribution artifact, not an obviously modified local copy. They do not establish that its security design is sound.

3. Incident background and communication history

3.1 Initial notice and absence of public answers

mSeven's initial notice, as quoted by CyberInsider, stated that the company had learned of “suspicious activity associated with the mSecure password management application,” begun an investigation, taken mitigation steps, and engaged external cybersecurity experts. It recommended protecting confidential information, potentially by changing passwords, resetting or re-enrolling two-factor authentication, and removing passkeys.[1]

The initial notice did not publicly identify the affected systems, incident timeline, data involved, or affected synchronization configurations. It also did not say whether the recommendations were precautionary or based on confirmed exposure.

The following two mSecure support-discussion pages were reviewed during the initial assessment:

At capture time, these pages contained numerous customer questions and complaints but no visible substantive mSeven staff response on the reviewed pages. Commenters expressly noted the absence of official acknowledgement, clarification, or status updates. This observation describes the reviewed pages at that time; it does not prove that mSeven had ceased operations or that any forum theory was correct.

3.2 Follow-up email confirming encrypted-database acquisition

A subsequent mSeven support email with the subject Re: Data breach was sent on 2026-11-04 at 06:49:18 UTC. Its headers record DKIM, SPF, and DMARC passes for msevensoftware.com, supporting its authenticity as a message from mSeven's support system. These authentication results validate the sending domain, not the accuracy or completeness of the message's technical claims.[10]

The follow-up materially updates the incident history by stating that:

  • “Yesterday,” mSeven learned that an unauthorized actor had acquired an encrypted copy of a database containing information belonging to current and former mSecure users;
  • mSeven had no evidence that the actor had accessed the confidential information stored within that database;
  • The issue only pertains to users who were synchronizing with mSecure Cloud;
  • mSeven continued to recommend changing the master password and vital stored passwords, resetting 2FA, replacing passkeys, and protecting other sensitive information;
  • mSeven had taken unspecified steps to bolster security and had “no evidence that mSecure is not currently safe for use.”

This message narrows the stated affected population to mSecure Cloud users and confirms acquisition of an encrypted database. It does not establish that the database cannot be decrypted. An attacker can retain and attack the stolen copy offline without generating further server-side evidence.

The follow-up leaves important technical questions unanswered, including:

  • The database schema and whether it includes userHeuristicsKey or other encrypted Account Key material;
  • Whether Account Passwords, Account Keys, encrypted Account Keys, session tokens, URLs, request bodies, or logs were exposed;
  • The exact incident timeline and affected systems;
  • Which security controls were changed, and whether the PRNG, KDF, and key-rotation weaknesses identified in this report were addressed; and
  • How mSeven determined that the application remains safe for newly rotated credentials.

Accordingly, the follow-up changes the known incident facts but does not alter the report's binary findings F-01 through F-07. The report's earlier observation about the absence of public answers should be read together with this later, more specific support email.

4. Scope and limitations

4.1 Work performed

  • Verified the application version, hash, entitlements, code signature, and Gatekeeper status;
  • Inspected embedded strings, Objective-C metadata, symbols, and imported cryptographic/network APIs;
  • Disassembled and decompiled relevant account, authentication, encryption, backup, and synchronization routines;
  • Traced Account Password, Account Key, encrypted Account Key, vault record, and metadata flows;
  • Checked the public cloud endpoint's HTTP/HTTPS behavior without using real credentials;
  • Reviewed mSeven's public security documentation, Heroku's router-logging documentation, the RNCryptor v3 specification, and the German BSI's password-manager study.

Tools used included macOS codesign, spctl, plutil, otool, nm, and strings, plus Rizin 0.9.1 and Ghidra 12.2. Temporary analysis files were removed after the review.

4.2 Limitations

  • This was a focused review, not an exhaustive audit of every feature, bundled library, extension, or platform.
  • No real mSecure account or user password was used.
  • No live authenticated login, account creation, or vault synchronization was performed.
  • No server-side configuration, Heroku feature flags, Parse Cloud Code, application logs, router logs, databases, or incident-response evidence was available.
  • No user CSV or mSecure backup exports were opened or read during the review.
  • The findings directly describe the examined macOS 7.1.0 (1127) build. The separate BSI finding describes Android 6.1.5. Neither result should automatically be generalized to every historical or current platform release.
  • Absence of an identified plaintext-upload path for a particular field is not a guarantee that no such path exists elsewhere in the application.

5. Expected security architecture

mSeven's public security model states that:

  • Vault information is encrypted locally before leaving the device;
  • A randomly generated 46-character Account Key encrypts the data;
  • The Account Key is not stored on mSeven's servers or transmitted in readable form;
  • The Account Password protects the Account Key; and
  • mSeven cannot access customer information.[4] [5]

A useful zero-knowledge design must remain safe when the server is compromised. In particular, the server should not receive both:

  1. A vault-decryption key or its password-encrypted wrapper; and
  2. The same password needed to unwrap it, or a practical way to guess that password/key.

The reviewed implementation fails that requirement in several ways.

6. Detailed findings

F-01 — Account Password is transmitted in a GET query string

Severity
High
Confidence
Confirmed in binary
Affected artifact
macOS 7.1.0 (1127)

PFRESTUserCommand.logInUserCommandWithUsername:password:revocableSession:error: constructs a dictionary containing username and password, then invokes the Parse command constructor with the login path and GET method.

Relevant locations:

EvidenceARM64 address
Parse login-command construction0x100223bc8
mSecure sign-in calls logInWithUsername:password:error:0x1000a10d4
Embedded production Parse endpointhttps://server.msecure.com/parse

The password is therefore placed in the request URL, not merely in a request body. HTTPS encrypts the complete request in transit, but TLS terminates at the service infrastructure and does not prevent logging at the destination.

Heroku documents that its router log path value contains the HTTP request path and query string. Heroku provides an optional http-router-no-log-query feature to redact query strings.[6] The server-side setting could not be determined from the reviewed Mac.

Impact: If query redaction was not enabled, or if an application/reverse-proxy logger also records URLs, Account Passwords may exist in router, application, monitoring, or log-drain systems. Anyone obtaining those logs could recover the plaintext Account Password.

Nuance: Sending a password to an authentication service is not automatically a vulnerability. The use of a GET query string and the password's additional role in protecting the Account Key make this design security-relevant.

F-02 — Password-encrypted Account Key is sent to a Parse Cloud function

Severity
Critical when combined with F-01 or offline password guessing
Confidence
Confirmed in binary
Affected artifact
macOS 7.1.0 (1127)

The app wraps the Account Key with the Account Password, base64-encodes the result as encryptedKey, and sends it to the Parse Cloud function generatePdfForKey during QR/email generation, including account creation and password-change flows.

Relevant locations:

EvidenceARM64 address
MUser.generatePDFForAccountKeyData:sendEmail:wasPasswordChange:0x10001cf44
Encrypted-key base64 conversion0x10001cf80
callFunction:withParameters:error: invocation0x10001d044
Signup generates Account Key0x1000a0818
Signup generates/sends encrypted-key QR data0x1000a0d24

The plaintext Account Key was not uploaded in the examined path. Nevertheless, the service receives the encrypted key and, through authentication, the password that protects it.

Impact: A compromised server, Cloud Code environment, or suitable set of retained request data can associate:

  • The Account Password;
  • The Account Password-encrypted Account Key;
  • Account-identifying information/session state; and
  • Encrypted cloud vault records.

That combination is sufficient to recover the Account Key offline and decrypt vault contents. This defeats the expected guarantee that a server compromise reveals only unusable ciphertext.

F-03 — Account Key generation uses time-seeded random()

Severity
High
Confidence
Confirmed in binary
Affected artifact
macOS 7.1.0 (1127)

The 46-character Account Key is generated through GeneratePassword, whose random: method directly invokes C's random() function. At application startup, the global PRNG is seeded using the current Unix time in seconds:

time(NULL) -> srandom(...) -> random() -> GeneratePassword -> Account Key

Relevant locations:

EvidenceARM64 address
Startup invokes time0x10005e6c0
Startup invokes srandom0x10005e6c4
GeneratePassword.random: invokes random0x100026390
MCheckPassword.generateAccountKey invokes password generator0x1000339dc

This is not a cryptographically secure key-generation design. random() is deterministic, and the seed is drawn from a small, often estimable time space. The effective search problem concerns candidate seeds and PRNG call positions, not an independently random 46-character string.

The server-side heuristics value contains a known string encrypted using the Account Key, providing an offline way to test candidate keys.

Impact: An attacker with encrypted account/vault data can test time-seeded PRNG candidates offline. Knowing the approximate account-creation time substantially reduces the work. Unknown PRNG call position and reseeding behavior may add implementation-specific uncertainty, but they do not turn this into cryptographic randomness.

F-04 — Password-based key wrapping uses 10,000 PBKDF2-SHA1 iterations

Severity
Medium; higher impact for weak Account Passwords
Confidence
Confirmed in binary and by format specification
Affected artifact
macOS 7.1.0 (1127)

The password-based RNCryptor v3 path invokes CCKeyDerivationPBKDF with:

  • PBKDF2;
  • HMAC-SHA1 as the pseudorandom function;
  • 10,000 iterations; and
  • A 32-byte derived key.

Relevant location: 0x10012864c (iteration constant), with the call at 0x100128654.

This agrees with the older RNCryptor v3 specification, which uses AES-256-CBC, HMAC-SHA-256, random salts/IVs, and 10,000 PBKDF2-SHA1 iterations for password-based encryption.[7]

Impact: An attacker possessing the encrypted Account Key can efficiently test password dictionaries. Ten thousand iterations is inadequate by contemporary password-storage/key-wrapping standards, particularly for a password manager whose entire vault depends on this boundary.

F-05 — Account Password changes do not rotate the Account Key

Severity
High for incident remediation
Confidence
Confirmed in binary
Affected artifact
macOS 7.1.0 (1127)

The password-change path calls MCryptor.updateUserPassword:, which is an empty return instruction, followed by encryptAccountKeyWithNewPassword:. The latter wraps the existing Account Key with the new password.

Relevant locations:

EvidenceARM64 address
Empty MCryptor.updateUserPassword:0x10006e82c
Existing Account Key re-wrapped0x10006e830
Password-change handler0x1000a0260

No fresh Account Key is generated and no vault-wide re-encryption occurs in this path. A new QR code or encrypted-key blob can therefore differ while the underlying Account Key remains unchanged.

Impact: Changing the mSecure Account Password does not prevent decryption of an older copied vault when the old Account Password, encrypted Account Key, or predictable Account Key has already been compromised.

F-06 — Sensitive record metadata is uploaded without vault-content encryption

Severity
Medium
Confidence
Confirmed in binary
Affected artifact
macOS 7.1.0 (1127)

The record serializer encrypts record field data, notes, and passkey JSON before upload. However, it passes the following values directly to safeSetCloudItem:withObject:forKey::

  • Login URLs;
  • App names;
  • Tags;
  • Template names;
  • Device names;
  • Icon names;
  • Generator settings; and
  • Authentication-type metadata.

safeSetCloudItem:withObject:forKey: is only a nil-aware wrapper around Parse setObject:forKey:; it performs no encryption.

Relevant locations:

EvidenceARM64 address
Tags read for cloud object0x1000973d4
Login URLs read for cloud object0x1000976c4
App name read for cloud object0x1000976f8
Encrypted record data read0x1000975d4
Passkey ciphertext read0x100097674
Nil-aware direct Parse setter0x1000a4d64

Impact: A cloud-database-only breach can reveal sensitive service affiliation and usage metadata even when passwords and notes remain encrypted.

F-07 — Database backup dictionaries include the encrypted Account Key

Severity
Medium; depends on backup storage and password strength
Confidence
Confirmed in binary
Affected artifact
macOS 7.1.0 (1127)

MDatabase.databaseAsDictionary:forBackup: reads encryptedAccountKeyData, base64-encodes it, and stores it under userHeuristicsKey.

Relevant location: 0x100053ba8, with dictionary insertion at 0x100053bd4.

Impact: Backup/sync formats based on this dictionary contain the password-encrypted Account Key. Such backups must be protected as highly sensitive material, especially because of the weak PRNG and low PBKDF2 cost. No user backup file was opened during this review.

7. Combined attack paths

7.1 Server/log compromise with retained authentication and QR-generation data

A technically viable chain is:

  1. Obtain Account Passwords from authentication processing or URL/request logs.
  2. Obtain encryptedKey values from Parse Cloud Code processing, application logs, or other retained request data.
  3. Decrypt the Account Key offline using the Account Password.
  4. Obtain the encrypted mSecure Cloud records.
  5. Decrypt record fields, notes, TOTP secrets, attachments, and passkey material using the Account Key.

This path does not require breaking AES-256. It follows from the credentials and key material made available to the service by the client design.

7.2 Ciphertext-only offline PRNG attack

Even without plaintext Account Password logs:

  1. Obtain the cloud heuristics ciphertext and encrypted vault data.
  2. Estimate account-creation time and candidate PRNG call positions.
  3. Generate Account Key candidates from time-seeded random() output.
  4. Test candidates against the known plaintext protected by heuristics.
  5. Use a recovered Account Key to decrypt the vault.

Feasibility depends on information available to the attacker and implementation-specific PRNG state uncertainty. The fundamental issue is that the key space is based on predictable PRNG state rather than cryptographic entropy.

7.3 Weak-password offline attack

  1. Obtain an encrypted Account Key from QR-generation traffic, a backup, or another store.
  2. Use the embedded salts and HMAC to test password guesses at 10,000 PBKDF2-SHA1 iterations per candidate.
  3. Recover the Account Key and decrypt associated vault data.

A long, unique Account Password materially increases the cost of this attack; it does not correct F-01 or F-03.

7.4 Metadata-only exposure

A database breach limited to ordinary Parse fields can expose login URLs, tags, app names, template names, and device names without any cryptographic attack.

8. Positive controls verified

The review also confirmed several controls that should not be overlooked:

  • The app bundle has a valid Apple/Mac App Store signature.
  • The configured production Parse endpoint uses HTTPS.
  • Record field payloads, notes, and passkey JSON have dedicated encrypted-data paths before cloud upload.
  • RNCryptor uses AES-256-CBC with HMAC-SHA-256.
  • Encryption salts and IVs use SecRandomCopyBytes.
  • The plaintext Account Key was not directly inserted into the examined Parse user object.

These controls reduce some risks but do not eliminate the combined credential/key-exposure paths described above.

9. Independent corroboration: German BSI study

Germany's Federal Office for Information Security (BSI) evaluated mSecure 6.1.5 for Android, released on 23 April 2024, in its December 2025 password-manager study.[8]

The BSI reported:

  • “Access is theoretically possible while the device is in use.”
  • “Technical information is sent to the manufacturer, enabling them to access the contents of the password manager.”
  • “Overall, the concept does not meet the usual expectations for password managers.”
  • mSeven responded that it did not store the secrets transmitted to it.
  • mSeven did not respond to the BSI's technical questions.

The BSI's version and platform differ from the artifact examined here, so this is corroboration rather than direct proof about macOS 7.1.0. The independent binary review presented here establishes that the underlying server-compromise concern remains technically relevant to the examined Mac build.

10. Incident-risk assessment

Incident scopeAssessment supported by this review
Encrypted mSecure Cloud database acquired — confirmed by mSeven's follow-up emailSensitive metadata may be exposed. Ciphertext is not automatically plaintext, but the attacker can retain it indefinitely and use the time-seeded Account Key and password-guessing paths offline. Actual plaintext compromise remains unconfirmed.
Vault database plus authentication URL logsAccount Passwords may be exposed. Full vault decryption additionally requires the Account Key or its encrypted wrapper. No public evidence currently confirms this combined exposure.
Vault data plus authentication logs plus generatePdfForKey request dataPotentially sufficient for complete offline vault decryption. No public evidence currently confirms this combined exposure.
Parse Cloud Code or production server compromised during account creation/password changeThe service could capture both Account Password and encrypted Account Key, making robust zero-knowledge claims untenable. The follow-up does not identify whether this occurred.
Local-only vault with no mSecure Cloud syncmSeven's follow-up says the issue only pertains to mSecure Cloud users, so this incident is stated not to affect local-only configurations.
Third-party Dropbox/iCloud/Wi-Fi syncmSeven's mSecure Cloud-only statement excludes these configurations from this particular incident. The mSecure-specific PRNG and KDF weaknesses still apply to any encrypted backups an attacker obtains elsewhere.

Overall conclusion: mSecure Cloud data must be regarded as meaningfully at risk, not as inherently safe merely because it is described as encrypted. Acquisition of the encrypted database is confirmed by mSeven; actual plaintext compromise remains unconfirmed.

12. Questions mSeven should answer publicly

Incident scope

  1. Which systems, versions, platforms, and synchronization methods were affected?
  2. When did suspicious activity begin, and when was it contained?
  3. What exact records, database fields, and encryption/key material did the confirmed exfiltrated database contain?
  4. Were Account Passwords, Account Keys, encrypted Account Keys, session tokens, QR data, or Cloud Code parameters accessed?
  5. Are the recommendations precautionary, or based on confirmed exposure?

Logging and infrastructure

  1. Was Heroku http-router-no-log-query enabled for every production app serving mSecure authentication?
  2. Were full URLs, query strings, request bodies, or Cloud Code parameters logged by Heroku, Parse, Express, monitoring tools, support tools, or log drains?
  3. Were generatePdfForKey parameters or generated QR/email artifacts retained? For how long, and by whom?
  4. Which subprocessors could access authentication and QR-generation request data?

Cryptography and remediation

  1. Why does Account Key generation use random() seeded with time instead of SecRandomCopyBytes or another CSPRNG?
  2. Will mSeven migrate password wrapping to a modern, appropriately configured KDF?
  3. Will password changes support actual Account Key rotation and vault re-encryption?
  4. Can users create a genuinely fresh vault/key and invalidate all older key material?
  5. Which releases fix these implementation issues, and have those fixes been independently audited?

13. Final conclusion

The examined mSecure 7.1.0 macOS build has multiple, independently confirmed weaknesses:

  • Passwords in GET URLs;
  • Password-encrypted Account Keys sent to the service;
  • Time-seeded, non-cryptographic Account Key generation;
  • A low-cost legacy KDF;
  • No Account Key rotation on password change; and
  • Cleartext cloud metadata.

The most severe issue is architectural: the service can receive both the password and the encrypted key needed to recover vault contents. A separate weakness allows offline prediction attempts against the Account Key itself. Consequently, mSeven's zero-knowledge assurances should not be relied upon as protection against a compromised production service.

mSeven's follow-up email confirms that an unauthorized actor acquired an encrypted mSecure Cloud database, while stating that there is no evidence of confidential-information access. That narrows the stated affected population to mSecure Cloud users but does not demonstrate that the stolen ciphertext is undecryptable or that the weaknesses documented here have been fixed. Credential rotation, 2FA/passkey replacement, and migration away from the affected vault therefore remain prudent risk-reduction measures. Merely changing the mSecure Account Password does not rotate the Account Key or protect the stolen copy.

14. References

  1. CyberInsider — “mSecure warns users to change passwords after security incident”
  2. mSecure Support — Important Security Notice Nov 3, 2026, page 3
  3. mSecure Support — Important Security Notice 2026-11-03, page 5
  4. mSecure Support — mSecure's Security Model: Secure by design
  5. mSecure Support — Can an mSecure Employee Access My Account Password or Account Key?
  6. Heroku Dev Center — HTTP Routing, router log format and query-string redaction
  7. RNCryptor — Data Format Specification v3
  8. German Federal Office for Information Security (BSI) — IT Security in the Digital Consumer Market: Focus on Password Managers, December 2025
  9. The Hacker News — “mSecure Warns Users to Change Passwords, Reset 2FA and Passkeys After Suspicious Activity”
  10. mSeven Software support email, Re: Data breach, sent 2026-11-04 06:49:18 UTC; DKIM, SPF, and DMARC passes recorded for msevensoftware.com.
← Back to all research DEC Research / Security assessment