- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Smartcard: "Windows Hello" stops firefox from working
I have noticed that Linux firefox does not start anymore if I add "Windows Hello".
(The same is true for thunderbird)
Setup:
- rhel 7.9 Agent version: 8.6
- win10 vmware-view version: 2206/8.6
Under Linux the smartcard slots looks like:
[vogt]$ pkcs11-tool -L
Available slots:
Slot 0 (0x0): Alcor Micro USB Smart Card Reader 0
(empty)
Slot 1 (0x4): Microsoft IFD 0
(empty)
Slot 2 (0x8): Windows Hello for Business 1
token label : UserPIN (GIDS card)
token manufacturer : www.mysmartlogon.com
token model : PKCS#15 emulated
token flags : login required, token initialized, PIN initialized
hardware version : 0.0
firmware version : 0.0
serial num : 4d8e5bbcf2badc3b
pin min/max : 4/15
If I remove smartcard support from Linux firefox, or remove "Windows Hello" from
Windows, my Linux firefox starts as expected.
This can be reproduced with:
- create "Windows Hello" slot
- check that its exported with "pkcs11-tool -L"
- start firefox and verify that its not working
- stop firefox (CTRL-C)
- Keep Horizon session open
- Open cmd.exe and type:
- certutil.exe -DeleteHelloContainer
After that you can verify on Linux that slot2 ist gone.
Now start Linux firefox.
==> firefox works again
It's unclear if it's firefox or the VMware Virtual channel extension which
causes this behaviour.
When I enable pcscd logging I see countless SC_CARD_TRANSMIT but no replies,
so it may be helpfull do enable IRP smartcard debugging, but this changed in
vmware horizon from the last time I had a problem with it:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
What kind of smart card and driver do you use? I have a PIV card, below is the command output:
[root@redhat79sc ~]# pkcs11-tool -L
Available slots:
Slot 0 (0x0): ActivIdentity USB Reader V3 0
token label : PIV_II
token manufacturer : piv_II
token model : PKCS#15 emulated
token flags : login required, rng, token initialized, PIN initialized
hardware version : 0.0
firmware version : 0.0
serial num : 00000000
pin min/max : 4/8
Slot 1 (0x4): Windows Hello for Business 1
token label : UserPIN (GIDS card)
token manufacturer : www.mysmartlogon.com
token model : PKCS#15 emulated
token flags : login required, token initialized, PIN initialized
hardware version : 0.0
firmware version : 0.0
serial num : 45bc2b483356ae99
pin min/max : 4/15
I use the PIV card(not the 'Windows Hello' slot) to logon the Linux remote desktop and Firefox could be launched successfully. How do you use 'Windows Hello' slot, do you use it to do authentication? How do you config your Firefox to use the smart card?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
>What kind of smart card and driver do you use? I have a PIV card, below is the command output:
Thanks for your reply. The driver is from cryptovision a read only driver for StarCos. Version scinterface-8.0.1-1.x86_64.
You are right, if I remove the module from firefox it starts fine. Now its easy to say contact your pkcs11 driver vendor".
I did that.
But its turns out that the driver works "locally" fine and even with horizon windows->windows connection. (Okay some error pops up), but overall it works. But under Linux it freezes.
Thus its both, the driver and the Smartcard virtual Channel extension and on top of that: It freezes only with Linux.
My assumption is that it's the Smart Card virtual channel extension, which triggers the behavior, maybe in combination with some unhandled return code in the pkcs11 driver, or something else. On the pcscd side I see only endless SCARD_TRANSMIT but never a reply from the "marshalling" layer.
The Vitual Channel implements this:
but its possible that the the problem happens on the IRP layer too, but this is only an assumption.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
When freeze, can you dump the APDU that SCARD_TRANSMIT command sends out but fail to get response? Is it "00 CB 3F FF 03 5C 01 7E" ?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
>When freeze, can you dump the APDU that SCARD_TRANSMIT command sends out but fail to get response?
>Is it "00 CB 3F FF 03 5C 01 7E" ?
It seems vmware patched pcscd so it does not log anymore apdu commands.
I started pcsd with --foreground --apdu --debug and there are no apdus.
I grepped through the log file for "rv=", which seems the only option to look for errors.
Here is the only part which looks suspicious:
00000022 winscard_svc.c:641:ContextThread() BEGIN_TRANSACTION rv=0x0 for client 7
00000036 winscard_svc.c:793:ContextThread() TRANSMIT rv=0x0 for client 7
00000030 winscard_svc.c:793:ContextThread() TRANSMIT rv=0x0 for client 7
00000027 winscard_svc.c:793:ContextThread() TRANSMIT rv=0x0 for client 7
00000034 winscard_svc.c:793:ContextThread() TRANSMIT rv=0x0 for client 7
00000027 winscard_svc.c:661:ContextThread() END_TRANSACTION rv=0x0 for client 7
00000005 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000005 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000013 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000013 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000005 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000011 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000013 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000019 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000005 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000004 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000005 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000017 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000013 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000015 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000015 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000014 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000005 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000013 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000030 winscard_svc.c:641:ContextThread() BEGIN_TRANSACTION rv=0x0 for client 7
00000048 winscard_svc.c:793:ContextThread() TRANSMIT rv=0x0 for client 7
00000038 winscard_svc.c:793:ContextThread() TRANSMIT rv=0x0 for client 7
00000025 winscard_svc.c:661:ContextThread() END_TRANSACTION rv=0x0 for client 7
00000016 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 7
00000020 winscard_svc.c:622:ContextThread() DISCONNECT rv=0x0 for client 7
00000019 winscard_svc.c:530:ContextThread() RELEASE_CONTEXT rv=0x0 for client 7
00000009 winscard_svc.c:440:ContextThread() CMD_VERSION rv=0x0 for client 7
00000055 winscard_svc.c:511:ContextThread() ESTABLISH_CONTEXT rv=0x0 for client 7
00000002 winscard_svc.c:440:ContextThread() CMD_VERSION rv=0x0 for client 8
00000109 winscard_svc.c:511:ContextThread() ESTABLISH_CONTEXT rv=0x0 for client 8
00000012 winscard_svc.c:493:ContextThread() CMD_STOP_WAITING_READER_STATE_CHANGE rv=0x0 for client 8
00000042 winscard_svc.c:577:ContextThread() CONNECT rv=0x0 for client 7
00000008 winscard_svc.c:840:ContextThread() CONTROL rv=0x80100004 for client 7
00000005 winscard_svc.c:840:ContextThread() CONTROL rv=0x80100004 for client 7
00000035 winscard_svc.c:622:ContextThread() DISCONNECT rv=0x0 for client 7
00000030 winscard_svc.c:577:ContextThread() CONNECT rv=0x80100069 for client 7
00000031 winscard_svc.c:577:ContextThread() CONNECT rv=0x0 for client 7
00000006 winscard_svc.c:840:ContextThread() CONTROL rv=0x80100004 for client 7
00000007 winscard_svc.c:840:ContextThread() CONTROL rv=0x80100004 for client 7
00000024 winscard_svc.c:622:ContextThread() DISCONNECT rv=0x0 for client 7
00000002 winscard_svc.c:950:MSGSignalClient() SIGNAL rv=0x0 for client 8
00000003 winscard_svc.c:440:ContextThread() CMD_VERSION rv=0x0 for client 9
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You can logoff the session, set "VVC.ScRedir.logLevel=debug" and "log.throttleBytesPerSec=0" in /etc/vmware/config, then reproduce the issue, there are logs about APDU in /tmp/vmware-vmwblast/vmware-VVCScRedir-*, the format is not user-friendly but you can see the bytes in the command buffer.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Attached is a rather long log, which is reduced to "host 7400" and there only the last part from the last
BEGIN_TRANSATCTION:
SCARD_IOCTL_BEGINTRANSACTION, completionID=0000120f, ioStatus=00000000
to the last Transmit (when the channel dies)
It ends with:
ScRedirVvc_DumpMsg():1053: Entry
72 44 Header->RDPDR_CTYP_CORE = 0x4472
43 49 Header->PAKID_CORE_DEVICE_IOCOMPLETION = 0x4943
ScRedirVvc_DumpMsg():1096: Exit
ERROR(c0000023) | 7400|: Incorrect IO completion status
ScRedirVvc_ParseIOCompletion():1473: Exit
ERROR(c0000001) | 7400|: Failed to parse IO completion message
But there is no dump from the failed completion message, which is the interesting part.
ScRedirVvc_RedirectScResponse():2025: Exit
ERROR(c0000001) | 7400|: Failed to redirect SC IO completion packet
ScRedirVvc_HandleRequests():2159: Exit
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Please file a SR for this issue, we will work on it.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
BTW, what distribution do you use, and what is the Linux Agent version?