How to get Feitian MultiPass FIDO U2F working with OnePlus 3T?


Question

Feitian MultiPass FIDO has 3 ways to work as a hardware token: BLE, NFC and USB. I'd like to use it either with NFC or BLE because the USB input can be occupied, and I have a feeling anyway that the USB usage would require some udev rule modifications (https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules) just like it did with my other token for my Linux desktop.




  1. NFC: simply didn't work. I held the key to the back of the phone, moving it around a little (not sure where is the NFC sensor exactly). Since I read somewhere that the NFC is very weak in the key (which can be an advantage for security because an attacker would have a harder time to pick the signal up from distance), I even stripped my phone of it's thin OnePlus carbon protective cover, but didn't help either.


  2. BLE: I press the button long and the BLE pairing icon starts to blink on the key. The Google U2F BLE setup page shows the device. Here you'd click on the device and you'd need to enter the 6 digits on it. When I select the device from the list though, the app errors out with the very descriptive "Something went wrong" error message. (That's what the Linux desktop Chrome did as well, extremely descriptive error message for sure).




So how can I get this to work? Here is some logcat: https://pastebin.com/X6HLK7a0



Two errors I see:




  1. Not sure how related it is:



    E WCNSS_FILTER: do_ioctl,tty_clock_flag=USERIAL_OP_CLK_OFF,clock=USERIAL_OP_CLK_ON


  2. Related for sure:



    E BluetoothEventManager: Got bonding state changed for 78:8C:EB:56:23:F1, but we have no record of that device.



    D StatusBarManagerService: manageDisableList userId=0 what=0x0 pkg=Window{ 3d9a72b u0 Something went wrong } token=android.os.Binder@20e9287 which=1



    E BluetoothEventManager: Got bonding state changed for 78:8C:EB:56:23:F1, but we have no record of that device.




The debug entry wedged in between the two errors might be accidental. I don't see it always. Any help is appreciated, I'd like to transition to hardware tokens to be protected against SIM hijacks.



One more thing: my OxygenOS is rooted because I had to use a hack to be able to run DayDream apps. Because of that I cannot use Google Pay. I hope rooting is not the reason why I cannot pair the key.


Answer

The "Something went wrong" error message was an indirect result of the fact that the device was rooted (+ I have custom bootloader (TWRP), although I'm using stock ROM). I also couldn't use Android Pay in the past because of the rooting although I tried SU Hide techniques for SuperSU. Tonight I reflashed and this time I used the latest beta 14.3 Magisk, which has auto hide feature.



This Magisk could successfully cloak the custom boot loader and the rooting from SafetyNet, which framework+API is used by Android Pay to see if the device is stock. I assume that the U2F key addition uses the same library as well, because now I could get the BLE part working. NFC is still no bueno. Also, after many tries it become clear that I had to add the MultiPass key first on my desktop using a Chrome browser, and only after that I could complete the rest of the procedure (BLE pairing, ...) on the phone.



The workflow on the phone is weird, because at some point the Bluetooth pairing view got into the background abruptly. I thought something failed again and kept retrying, until I realized that the view is there in the background.



Overall it wasn't an easy ride, but now I removed the phones from my 2FA configuration, and I only have the security keys and the Google authenticator app. You cannot remove that latter one, it's needed for 2FA.



I assume other devices than OnePlus 3T would experience the same thing: if you don't hide the custom bootloader and rooting adequately, software which query SafetyNet will be trippin'.


Topics


2D Engines   3D Engines   9-Patch   Action Bars   Activities   ADB   Advertisements   Analytics   Animations   ANR   AOP   API   APK   APT   Architecture   Audio   Autocomplete   Background Processing   Backward Compatibility   Badges   Bar Codes   Benchmarking   Bitmaps   Bluetooth   Blur Effects   Bread Crumbs   BRMS   Browser Extensions   Build Systems   Bundles   Buttons   Caching   Camera   Canvas   Cards   Carousels   Changelog   Checkboxes   Cloud Storages   Color Analysis   Color Pickers   Colors   Comet/Push   Compass Sensors   Conferences   Content Providers   Continuous Integration   Crash Reports   Credit Cards   Credits   CSV   Curl/Flip   Data Binding   Data Generators   Data Structures   Database   Database Browsers   Date &   Debugging   Decompilers   Deep Links   Dependency Injections   Design   Design Patterns   Dex   Dialogs   Distributed Computing   Distribution Platforms   Download Managers   Drawables   Emoji   Emulators   EPUB   Equalizers &   Event Buses   Exception Handling   Face Recognition   Feedback &   File System   File/Directory   Fingerprint   Floating Action   Fonts   Forms   Fragments   FRP   FSM   Functional Programming   Gamepads   Games   Geocaching   Gestures   GIF   Glow Pad   Gradle Plugins   Graphics   Grid Views   Highlighting   HTML   HTTP Mocking   Icons   IDE   IDE Plugins   Image Croppers   Image Loaders   Image Pickers   Image Processing   Image Views   Instrumentation   Intents   Job Schedulers   JSON   Keyboard   Kotlin   Layouts   Library Demos   List View   List Views   Localization   Location   Lock Patterns   Logcat   Logging   Mails   Maps   Markdown   Mathematics   Maven Plugins   MBaaS   Media   Menus   Messaging   MIME   Mobile Web   Native Image   Navigation   NDK   Networking   NFC   NoSQL   Number Pickers   OAuth   Object Mocking   OCR Engines   OpenGL   ORM   Other Pickers   Parallax List   Parcelables   Particle Systems   Password Inputs   PDF   Permissions   Physics Engines   Platforms   Plugin Frameworks   Preferences   Progress Indicators   ProGuard   Properties   Protocol Buffer   Pull To   Purchases   Push/Pull   QR Codes   Quick Return   Radio Buttons   Range Bars   Ratings   Recycler Views   Resources   REST   Ripple Effects   RSS   Screenshots   Scripting   Scroll Views   SDK   Search Inputs   Security   Sensors   Services   Showcase Views   Signatures   Sliding Panels   Snackbars   SOAP   Social Networks   Spannable   Spinners   Splash Screens   SSH   Static Analysis   Status Bars   Styling   SVG   System   Tags   Task Managers   TDD &   Template Engines   Testing   Testing Tools   Text Formatting   Text Views   Text Watchers   Text-to   Toasts   Toolkits For   Tools   Tooltips   Trainings   TV   Twitter   Updaters   USB   User Stories   Utils   Validation   Video   View Adapters   View Pagers   Views   Watch Face   Wearable Data   Wearables   Weather   Web Tools   Web Views   WebRTC   WebSockets   Wheel Widgets   Wi-Fi   Widgets   Windows   Wizards   XML   XMPP   YAML   ZIP Codes