Possible CXF epoch bug in 1Password item timestamps
Hello 1Password team,
I found a possible timestamp encoding issue when exporting credentials from 1Password through Apple’s Credential Exchange Framework (CXF) to another password manager.
Environment:
- 1Password: iOS 8.12.36
- OS: iOS 27.0 (24A435)
- Destination: another password manager using Apple AuthenticationServices and ASCredentialImportManager
Steps:
1. Export credentials from 1Password using Apple Credential Exchange.
2. Import them into another password manager.
3. Inspect the imported item creation and modification dates.
Expected behavior:
According to the CXF format, creationAt and modifiedAt are Unix timestamps in seconds. The destination should preserve those timestamps.
Actual behavior:
The batch timestamp is normal, but the per-item timestamps are shifted by approximately 30 years:
Batch timestamp:
1789134572.928309
Item 0:
- created.timeIntervalSince1970: 2736400894.0
- created.timeIntervalSinceReferenceDate: 1758093694.0
- lastModified.timeIntervalSince1970: 2736400923.0
- displayed date: September 17, 2056
The difference between the two Date intervals is the normal 978307200-second Foundation epoch offset. The reference-date interval itself looks like a plausible Unix timestamp, which suggests that the per-item CXF timestamp may be constructed or decoded using the Foundation reference date instead of the Unix epoch.
The receiving app reads ASImportableItem.created and lastModified immediately after ASCredentialImportManager.importCredentials() returns, before performing any application-specific timestamp conversion.
For comparison, exports from other password managers through the same Apple Credential Exchange receiving path did not show this timestamp problem:
- Apple Passwords: created Unix timestamp 1789123732.745129
- Bitwarden: created Unix timestamp 1789138382.0
- Secrets: created Unix timestamp 1789139107.781056
These values are all valid and earlier than their respective batch timestamps. Apple Passwords may reset timestamps to import time when importing from 1Password, but its own exported timestamps do not show the 2056/2057 epoch problem.
This suggests the problem is likely in the 1Password-specific CXF export path, especially the construction or serialization of the per-item creationAt and modifiedAt values. A general bug in the receiving app’s timestamp conversion seems unlikely because the same path handles Apple Passwords, Bitwarden, and Secrets correctly.
Could you please verify that 1Password exports creationAt and modifiedAt as Unix seconds and that the values are converted to Apple Date using the Unix epoch rather than the Foundation reference date?
Thank you.
