Hey, was poking around the source code. The sandbox implementation is really solid, but I noticed a few security holes that probably need fixing:
Pin hashing: In SandboxSecurityManager.kt, PINs are hashed with plain SHA-256 without any salt and saved to Settings.Secure. A 4-digit PIN has only 10k combinations, so anyone with ADB/root can grab the hash and crack it instantly. Needs PBKDF2 or at least a salt.
Vault bridge leaks: To open a media file, FileVaultManager dumps the fully decrypted file into .vault_bridge. If the app crashes or the phone reboots before cleanup, the unencrypted file just stays on the storage. Would be much safer to stream it directly via ParcelFileDescriptor.createPipe().
Split-screen bypass: WindowModeUtil uses reflection for ActivityTaskManager to detect multi-window. Since Android 15/16 strictly blocks these hidden APIs, it just throws an exception now. This means the split-screen lock bypass might actually work on newer builds.
Hey, was poking around the source code. The sandbox implementation is really solid, but I noticed a few security holes that probably need fixing:
Pin hashing: In SandboxSecurityManager.kt, PINs are hashed with plain SHA-256 without any salt and saved to Settings.Secure. A 4-digit PIN has only 10k combinations, so anyone with ADB/root can grab the hash and crack it instantly. Needs PBKDF2 or at least a salt.
Vault bridge leaks: To open a media file, FileVaultManager dumps the fully decrypted file into .vault_bridge. If the app crashes or the phone reboots before cleanup, the unencrypted file just stays on the storage. Would be much safer to stream it directly via ParcelFileDescriptor.createPipe().
Split-screen bypass: WindowModeUtil uses reflection for ActivityTaskManager to detect multi-window. Since Android 15/16 strictly blocks these hidden APIs, it just throws an exception now. This means the split-screen lock bypass might actually work on newer builds.