iOS Insecure Keychain Usage
Overview
iOS Keychain stores sensitive data with different accessibility levels:
kSecAttrAccessibleAlways— accessible even when device is locked (insecure)kSecAttrAccessibleWhenUnlocked— accessible only when device is unlocked (preferred)kSecAttrAccessibleAfterFirstUnlock— accessible after first unlock (less secure)
Using kSecAttrAccessibleAlways means data can be read by malware or when device is physically stolen while locked.
Remediation
- Use
kSecAttrAccessibleWhenUnlockedThisDeviceOnlyfor most sensitive items - Use
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnlyfor highest security - Never use
kSecAttrAccessibleAlways