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:
- 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.
- 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. - The Account Key itself is generated using C's deterministic
random(), seeded withsrandom(time(NULL)), rather than a cryptographically secure random-number generator. This substantially undermines the claimed strength of the 46-character Account Key. - Password-based wrapping uses 10,000 PBKDF2-SHA1 iterations, which is weak by contemporary standards for offline password guessing.
- Changing the Account Password does not rotate the Account Key or re-encrypt the vault in the examined build.
- 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:
| Property | Value |
|---|---|
| Application | mSecure.app |
| Bundle identifier | com.mseven.msecuremac |
| Marketing version | 7.1.0 |
| Build number | 1127 |
| Main executable SHA-256 | 1665c16ff01fbbf9dc4ee4799b5205c6533d41ee5927dfd42551aeece205fa94 |
| Architectures | arm64, x86_64 |
| Primary architecture reviewed | arm64 |
| Apple team identifier | ZL5FFY3M32 |
| Code-signature status | Valid on disk; satisfies designated requirement |
| Gatekeeper assessment | Accepted; source: Mac App Store |
| Cloud endpoint embedded in binary | https://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
userHeuristicsKeyor 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:
- A vault-decryption key or its password-encrypted wrapper; and
- 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
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:
| Evidence | ARM64 address |
|---|---|
| Parse login-command construction | 0x100223bc8 |
mSecure sign-in calls logInWithUsername:password:error: | 0x1000a10d4 |
| Embedded production Parse endpoint | https://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
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:
| Evidence | ARM64 address |
|---|---|
MUser.generatePDFForAccountKeyData:sendEmail:wasPasswordChange: | 0x10001cf44 |
| Encrypted-key base64 conversion | 0x10001cf80 |
callFunction:withParameters:error: invocation | 0x10001d044 |
| Signup generates Account Key | 0x1000a0818 |
| Signup generates/sends encrypted-key QR data | 0x1000a0d24 |
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()
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:
| Evidence | ARM64 address |
|---|---|
Startup invokes time | 0x10005e6c0 |
Startup invokes srandom | 0x10005e6c4 |
GeneratePassword.random: invokes random | 0x100026390 |
MCheckPassword.generateAccountKey invokes password generator | 0x1000339dc |
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
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
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:
| Evidence | ARM64 address |
|---|---|
Empty MCryptor.updateUserPassword: | 0x10006e82c |
| Existing Account Key re-wrapped | 0x10006e830 |
| Password-change handler | 0x1000a0260 |
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
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:
| Evidence | ARM64 address |
|---|---|
| Tags read for cloud object | 0x1000973d4 |
| Login URLs read for cloud object | 0x1000976c4 |
| App name read for cloud object | 0x1000976f8 |
| Encrypted record data read | 0x1000975d4 |
| Passkey ciphertext read | 0x100097674 |
| Nil-aware direct Parse setter | 0x1000a4d64 |
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
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:
- Obtain Account Passwords from authentication processing or URL/request logs.
- Obtain
encryptedKeyvalues from Parse Cloud Code processing, application logs, or other retained request data. - Decrypt the Account Key offline using the Account Password.
- Obtain the encrypted mSecure Cloud records.
- 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:
- Obtain the cloud
heuristicsciphertext and encrypted vault data. - Estimate account-creation time and candidate PRNG call positions.
- Generate Account Key candidates from time-seeded
random()output. - Test candidates against the known plaintext protected by
heuristics. - 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
- Obtain an encrypted Account Key from QR-generation traffic, a backup, or another store.
- Use the embedded salts and HMAC to test password guesses at 10,000 PBKDF2-SHA1 iterations per candidate.
- 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 scope | Assessment supported by this review |
|---|---|
| Encrypted mSecure Cloud database acquired — confirmed by mSeven's follow-up email | Sensitive 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 logs | Account 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 data | Potentially 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 change | The 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 sync | mSeven'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 sync | mSeven'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.
11. Recommended user actions
11.1 Immediate priorities
- Do not rely solely on changing the mSecure Account Password. The examined build does not rotate the Account Key.
- Rotate the most consequential stored credentials first:
- Primary and recovery email accounts;
- Apple, Google, Microsoft, and other identity providers;
- Banking, payment, and financial services;
- Domain registrars, DNS providers, hosting, and cloud administration;
- Password-manager recovery accounts and administrator accounts.
- Re-enroll two-factor authentication secrets stored in the vault. Changing a site's password does not replace its TOTP seed.
- Remove and recreate passkeys stored in mSecure, following each service's official procedure.
- Continue through remaining stored credentials according to sensitivity and reuse.
- Use official apps or manually entered official websites for rotations. Be alert for follow-up phishing that exploits the public incident.
11.2 Vault migration
- Prefer migrating to a different, well-reviewed password manager until mSeven supplies a technical explanation and corrective release.
- Creating a new mSecure account may generate a different Account Key, but in this build the replacement key would still use the time-seeded PRNG; therefore, account creation alone is not a complete technical remedy.
- Verify imported records before deleting the old vault.
- Preserve a secure, offline backup during migration.
11.3 Export and backup files
Plaintext CSV exports should be stored only with strong protection and securely deleted after a successful migration has been verified.
Treat mSecure backup files as highly sensitive. The reviewed backup serialization includes the password-encrypted Account Key.
12. Questions mSeven should answer publicly
Incident scope
- Which systems, versions, platforms, and synchronization methods were affected?
- When did suspicious activity begin, and when was it contained?
- What exact records, database fields, and encryption/key material did the confirmed exfiltrated database contain?
- Were Account Passwords, Account Keys, encrypted Account Keys, session tokens, QR data, or Cloud Code parameters accessed?
- Are the recommendations precautionary, or based on confirmed exposure?
Logging and infrastructure
- Was Heroku
http-router-no-log-queryenabled for every production app serving mSecure authentication? - Were full URLs, query strings, request bodies, or Cloud Code parameters logged by Heroku, Parse, Express, monitoring tools, support tools, or log drains?
- Were
generatePdfForKeyparameters or generated QR/email artifacts retained? For how long, and by whom? - Which subprocessors could access authentication and QR-generation request data?
Cryptography and remediation
- Why does Account Key generation use
random()seeded with time instead ofSecRandomCopyBytesor another CSPRNG? - Will mSeven migrate password wrapping to a modern, appropriately configured KDF?
- Will password changes support actual Account Key rotation and vault re-encryption?
- Can users create a genuinely fresh vault/key and invalidate all older key material?
- 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
- CyberInsider — “mSecure warns users to change passwords after security incident”
- mSecure Support — Important Security Notice Nov 3, 2026, page 3
- mSecure Support — Important Security Notice 2026-11-03, page 5
- mSecure Support — mSecure's Security Model: Secure by design
- mSecure Support — Can an mSecure Employee Access My Account Password or Account Key?
- Heroku Dev Center — HTTP Routing, router log format and query-string redaction
- RNCryptor — Data Format Specification v3
- German Federal Office for Information Security (BSI) — IT Security in the Digital Consumer Market: Focus on Password Managers, December 2025
- The Hacker News — “mSecure Warns Users to Change Passwords, Reset 2FA and Passkeys After Suspicious Activity”
- mSeven Software support email,
Re: Data breach, sent 2026-11-04 06:49:18 UTC; DKIM, SPF, and DMARC passes recorded formsevensoftware.com.