Microsoft Teams: Always Available

ID: klbhkcdmilipmdaejfmhmphbdfiofoen

Could be malicious

Supported Languages

🇺🇸English

Extension Info & Metadata

Status
Removed
Version
1.2.3
Size
0.02 MB
Rating
2.4/5
Reviews
22
Users
20,000
Type
Extension
Updated
Feb 20, 2024
Category
Productivity Tools
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
Andrew KumpView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Total Extensions
3
Active
1
Obsolete
2
Listed
3
Unlisted
0
Total Users
21,660

A Chrome extension that keeps you available on teams 24/7

THIS EXTENSION IS FREE AND WORKING! You will never have to wiggle your mouse every again with this Chrome extension. This extension will keep you online and available forever. Simply login to https://teams.microsoft.com and the extension will begin. Click the extension's icon in order to validate it is functioning. Note: I do not personally support the use of this functionality for use at a workplace

Item
Type
Severity
Description
scripting
Permission
Critical
This permission allows injection and execution of JavaScript on any webpage. Rated Critical because it can modify page content, steal sensitive data, and inject malicious code into any site the extension has access to.
storage
Permission
Medium
This permission allows storing data locally in the browser. Rated Medium because it can persist sensitive user data, track user activities over time, and potentially store malicious payloads.
tabs
Permission
Medium
This permission enables tab management and monitoring. Rated Medium because it can track open tabs, access tab metadata, and monitor user browsing patterns.
https://*.teams.microsoft.com/*
Host
Medium
Host permission — access limited to this URL pattern.
alarms
Permission
Low
This permission schedules periodic tasks. Rated Low because it can only trigger events at specified times without access to sensitive data.

The injected function reads the user's Microsoft Teams OAuth bearer token directly out of teams.microsoft.com localStorage (key 'ts.<oid>.cache.token.https://presence.teams.microsoft.com/'). Harvesting an authenticated session token from another origin's storage is a credential-access pattern; even though this build only sends the token back to Microsoft, the same code path could trivially be modified (or already abused via a server-pushed update) to exfiltrate the bearer token elsewhere.

src/js/script.js (Line 87)
try {  const latestOid = localStorage['ts.latestOid'];  const tokenJSON = localStorage['ts.' + latestOid +    '.cache.token.https://presence.teams.microsoft.com/'];  const token = JSON.parse(tokenJSON)    .token;  const response = await fetch('https://presence.teams.microsoft.com/v1/me/forceavailability/', {    'headers': {      'Content-Type': 'application/json',      'Authorization': `Bearer ${token}`    },    'body': `{"availability":"${statusType}"}`,    'method': 'PUT'  });

A 30-second alarm continuously injects a function into any open teams.microsoft.com tab via chrome.scripting.executeScript. The injected code runs in the page's MAIN world context and uses the user's session to issue authenticated PUT requests to the Teams presence API, automating account behavior to deceive Microsoft's presence system about whether the user is at their computer. This is privilege escalation / unauthorized automation against a third-party service using the user's credentials.

src/js/script.js (Line 1)
chrome.runtime.onInstalled.addListener(async () => {  chrome.alarms.create('forceTeamsAvailability', {    periodInMinutes: .5  });});chrome.alarms.onAlarm.addListener(alarm => {  if (alarm.name === 'forceTeamsAvailability') {    runForceAvailability();  }});const runForceAvailability = async function() {  chrome.tabs.query({    'url': 'https://teams.microsoft.com/*'  }, function(items) {    for (tab of items) {      console.log("tab found: " + tab.url);      chrome.scripting.executeScript({          target: {            tabId: tab.id          },          function: requestForceAvailability        },        () => {}      );      break;    }  });}

statusType is read from chrome.storage.sync and concatenated unsanitized into a JSON body string. A malicious or corrupted sync value containing a quote could break out of the JSON string and inject arbitrary fields into the body sent to Microsoft's API. Low-impact in this code path (host is restricted to teams.microsoft.com), but it is a JSON injection sink against a privileged authenticated endpoint.

src/js/script.js (Line 94)
const response = await fetch('https://presence.teams.microsoft.com/v1/me/forceavailability/', {  'headers': {    'Content-Type': 'application/json',    'Authorization': `Bearer ${token}`  },  'body': `{"availability":"${statusType}"}`,  'method': 'PUT'});

By severity

Critical0
High1
Medium1
Low1

Versions scanned

Showing 1 of 25 scanned versions with more than one unique finding. Counts are unique findings that include each version.

Extension VersionCode Review Findings
1.2.33

Files with findings

1 distinct path — top paths by unique finding count:

  • src/js/script.js3
S.No.
Category
Severity
File
Summary
Found in Version
1Credential Theft
high
src/js/script.js (line 87)The injected function reads the user's Microsoft Teams OAuth bearer token directly out of teams.microsoft.com localStorage (key 'ts.<oid>.cache.token.https://presence.teams.microsoft.com/'). Harvesting an authenticate…
2Privilege Escalation
medium
src/js/script.js (line 1)A 30-second alarm continuously injects a function into any open teams.microsoft.com tab via chrome.scripting.executeScript. The injected code runs in the page's MAIN world context and uses the user's session to issue …
3Code Injection
low
src/js/script.js (line 94)statusType is read from chrome.storage.sync and concatenated unsanitized into a JSON body string. A malicious or corrupted sync value containing a quote could break out of the JSON string and inject arbitrary fields i…
URLs
15
IPv4
0
IPv6
0

URLs

View the external URLs this extension communicates with to understand its network activity and data interactions.

Gain full insight into all external connections.

Upgrade for full visibility.

clients2.google.com/service/update2/crxhttps://clients2.google.com/service/update2/crx
*.teams.microsoft.com/*https://*.teams.microsoft.com/*
teams.microsoft.com-https://teams.microsoft.com
www.w3.org/1999/02/22-rdf-syntax-nshttp://www.w3.org/1999/02/22-rdf-syntax-ns#
ns.adobe.com/tiff/1.0/http://ns.adobe.com/tiff/1.0/
ns.adobe.com/exif/1.0/http://ns.adobe.com/exif/1.0/
developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessagehttps://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage
github.com/mozilla/webextension-polyfill/issues/130https://github.com/mozilla/webextension-polyfill/issues/130
extensionpay.com-https://extensionpay.com
extensionpay.com`;-https://extensionpay.com`;
Showing 1 to 10 of 20 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

No IP addresses found
Showing 1 to 10 of 30 rows
Rows per page:

Code Diff

Compare extension code between any two versions.

0 changed files (scanned top 25 shared text files)

No comparable text files found between these versions.

Browse and explore files within this extension package

Gain full insight into all external connections.

Upgrade for full visibility.