PowerShell / SecretStore

MIT License
155 stars 23 forks source link

Fix for username char case bug in Windows platform #86

Closed PaulHigin closed 2 years ago

PaulHigin commented 2 years ago

This PR fixes the UserName character case bug (Issue #62) on Windows platforms. Where the UserName returned by environment variable or WindowsIdentity API is incorrect and reflects what the user typed in the RunAs command instead.

PS C:\> runas.exe /user:domain\userNaME pwsh.exe

# In new pwsh PowerShell shell, user name has wrong case (it should be 'UserName')
PS C:\> [System.Security.Principal.WindowsIdentity]::GetCurrent().Name.Split('\')[1]
userNaME

The UserName is used to encrypt data to avoid having plain text in some files (store configuration data), and also as a replacement for the no-password configuration (where file system protections are relied on for a less secure but more convenient configuration). A consistent UserName is vital and if it is provided by the OS in different character casing, data cannot be decrypted and read.

Fix is to convert the provided UserName to all upper case to ensure consistent values. Fix also includes a fallback option to use the original character casing when reading old data (that hasn't been updated to the all upper case).