Big deal? They can also read all sorts of stuff out of ~/.config, or my Kerberos tickets out of $KRB5CCNAME, or my tokens out of ~/.kube/config, or my MS Graph/Azure access tokens out of ~/.azure/accessTokens.json!
I guess Microsoft agrees:
> Vectra researchers discovered the problem in August 2022 and reported it to Microsoft. However, Microsoft did not agree on the severity of the issue and said that it doesn't meet the criteria for patching.
> With a patch unlikely to be released, Vectra's recommendation is for users to switch to the browser version of the Microsoft Teams client. By using Microsoft Edge to load the app, users benefit from additional protections against token leaks.
Hold on, can't the same attacker now read my access tokens out of ~/.mozilla/firefox or ~/.config/chromium?
> The researchers advise Linux users to move to a different collaboaration suite, especially since Microsoft announced plans to stop supporting the app for the platform by December.
While I wholeheartedly agree with anyone advising people to ditch the awful Microsoft Teams... why not just switch to the browser version, as already advised? This is what MS are advising users to do anyway...
[additional]
I'm still dreaming of a world where Flatpak runs every app as a separate UID and SELinux domain, to prevent the above attacks.
You are correct. There is no such thing as "multiple OS-level controls". In Google Chrome on Windows, the cookies in question are stored in an SQLite database at '%localappdata%\Google\Chrome\User Data\Default\Network\Cookies'. The cookie is named TSAUTHCOOKIE and contains an authentication token.
There is the same level of protection on this file, as there is on the Microsoft Teams Cookies database.
Source: I build forensics investigation tools for a living.
The recommendation that a browser is safer seems pretty silly though. As far as I can tell no web browser uses secure credential storage.
I was skeptical/curious how Windows's Credential Manager could have gotten around that, but Stackexchange says this (https://security.stackexchange.com/a/120001/76848):
> The Windows Credential Manager is anything but secure. It's "secure" at the user account level, which means that any process that the user ever runs and the user themselves must necessarily be trusted in order to call this system "secure" with a straight face.
So this should be about as secure as Chrome or Firefox's storage. A small layer of obfuscation to deter the least motivated script kiddies, but nothing that changes the nature of the problem. If you store secrets under your user account, then programs running under your user account can also read them back.
Accessing a secret in a file does not necessarily. It could be stored on a network share, included in a backup or archive or an attacker could confuse a program into handing them the file. Especially that used to be a very common attack against browsers.
And even if there was such a secure storage location, any program running as my user can read the token out of /proc/<teams PID>/mem; or it can ptrace(2) Teams and extract the token from the communication with the credential storage API...
Though I haven't checked if the dialog is run in a secure context, like for example the UAC dialog is. And I don't know if the dialog contains any information identifying the processing asking.
If the dialog is just run in the normal context, or doesn't inform the user who wants to decrypt the data, it's not that useful for thwarting an attack I suppose.
[1]: https://docs.microsoft.com/en-us/windows/win32/api/dpapi/ns-...
Until now, I genuinely thought Kerberos was used mostly only by MIT.
Our user accounts live in an AD DS. We use FreeIPA (actually Red Hat Identity Management) to manage a second domain for Linux stuff. There is a trust between the domains so that users can log into systems with their AD credentials. It all works pretty well; most of my frustrations with the system are because of AD's limitations (chiefly, lack of built-in MFA; awful documentation; lack of decent tooling for creating keytabs & configuring resource-based constrained delegation, seriously, I can't believe how bad the AD admin tools are) and flaws in how we have configured AD (obsolete protocols and ciphers still in use; the trust is one-way so users on Windows machines can't authenticate to services in the FreeIPA domain).
This is for logging on to end user devices & accessing servers. Web apps we don't configure (any more) to use LDAP for authentication, rather OpenID Connect (against Azure AD, the confusingly similarly named service from MS, that syncs user accounts from AD DS). Where web apps want access to Kerberos-protected resources, we have some... interesting... setups to allow web apps to use constrained delegation to impersonate the users who have logged in (and this is another thing about AD DS that surprises me... it's incredibly easy to create a service principal that can impersonate any user when authenticating to a resource, including highly privileged users... there's nothing anywhere near as flexible as FreeIPA's Service Constrained Delegation mechanism, that can say "this service can impersonate anyone in group A to resource B")
CI/CD is a bit too advanced of a concept for our AD audience :), we just keep an eye on the platforms and products that our users use & make sure they're doing the right thing with respect to token handling, etc.
I agree with Microsoft that it's a non-issue: there's no concept of a separate user-inaccessible data compartment unlike with Android and iOS, so the best they could do is to store it in system-provided keychain (but usually it is often unlocked during log-in, defeating its purpose).
They only don't support this because Windows is market segmented and Microsoft have fuck all product management and direction that isn't run by an army of crack smoking monkeys.
Would a TPM serve here, in some hypothetical world where folk were willing to put in the work to do this?
Or I guess I'm asking, naively, what are the functional differences between the TPMs on our desktop/laptop machines, and what smartphones have in them?
> Or I guess I'm asking, naively, what are the functional differences between the TPMs on our desktop/laptop machines, and what smartphones have in them?
A security processor on mobile devices are usually actually like TPM and Intel SGX combined together. I won't say it's better than PC TPMs, but have a very different design.
It would require Microsoft to use a different authentication scheme based on ephemeral signed tokens instead of OAUth to be beneficial for security. That is very unlikely to happen.
That scheme would also only reduce the access timeframe from whatever the OAuth token's lifetime is, to a timeframe constrained to the amount of time the computer (the key) is online.
Having tokens in clear text is not a serious security issue as long as the files cannot be accessed by anyone else.
The best way of storing credentials today is to either:
A. Use asymmetric cryptography and store the private keys in a non-exportable format like the Trusted Platform Module.
B. Use an API like the Data Protection API in Windows and store the secrets under "User scope". This encrypts the secrets with the user's logon password.
Only solution A above protects against malware running as the current user, however, the solution is also not very portable and technically difficult to maintain across platforms.
There is no way Microsoft (or any other software vendor on the market today) can truly protect against credential stealing if malware is running in the context of the user. The exception is solution A above, but even then the attacker would have brief access to the remote systems as long as the user is concurrently using those systems.
[1] https://www.vectra.ai/blogpost/undermining-microsoft-teams-s...
Conceptually true. However, you cannot guarantee that the files can't be accessed by anyone else.
I think that storing any critical data in cleartext is a Bad Thing because it eliminates a layer in a layered defense stance, and layered security is always desirable.
Jesus, this article is wrong on so many levels. Electron is fundamentally a way to build cross-platform apps with C, C++, and web technologies. It supports anything the operating system supports.
I like 1Password's secure starter kit: https://github.com/1Password/electron-secure-defaults
Applications are supposed to store secrets in the Keychain, which will give them back only to the same application with code signed by the same developer. macOS applications can't steal each others' secrets willy-nilly.
That analogy doesn't hold up, getting access to a network is usually something done remotely - not by forced entry, with the amount of things running on a network it's only a matter of time until something gets owned, phones home and next thing you know you have someone with a shell on your network.
Electron has _serious_ security problems and as it's footprint grows so does the risk profile.