What mTLS actually adds
Ordinary TLS authenticates the server. Mutual TLS asks the client to present a certificate the server already issued. A proxy that only swaps the server cert still fails the handshake — it has no client key.
Enrollment, in one picture
Lab apps that roll their own client identity usually: ask the server for a nonce, generate a key pair on device, sign the nonce, receive a signed client cert, stash the private key next to it. The interesting question is where that private key lives after enrollment.
What AndroScope is allowed to say
The defense deck already has an mTLS observer. In an authorized lab build it answers three questions. It does not publish a second APK, a TrustAll manager, or a PEM dump.
E DEFENSE 50 TLS pinning observer 55 mTLS observer ★ session — lab.sample.app [mTLS] client-cert API present [mTLS] store class: software KeyStore / PKCS12 [mTLS] AndroidKeyStore: not used for this alias [mTLS] password for the bag is derived at runtime — derived ≠ hardware-bound mitsec@lab.sample.app:
The actual finding class
A PKCS12 bag encrypted with a long PBKDF2 stretch still decrypts inside the process when the app wants to speak mTLS. If the key was built with a software KeyPairGenerator and never entered AndroidKeyStore, that object is a normal Java key. Runtime instrumentation of an authorized lab build can see the same object the app already unlocked.
That is not “PBKDF2 is weak.” It is “the key is not sealed to hardware.” The public writeup stops there.
Fix
- Generate and keep the client key in AndroidKeyStore. StrongBox when the device has it. Do not mark the key exportable.
- Do not keep a software PKCS12 of that key “just in case.”
- Treat a runtime-derived file password as disk obfuscation, not as a TEE.
- On the server, bind the client cert to device posture you actually trust — not only to “somebody presented a cert we once signed.”
Credit
Enrollment shape and the software-vs-KeyStore distinction are well covered in a public demo by kiratliygt. This page is an AndroScope note, not a reprint, and not a bypass manual.