Microsoft Outlook

ID: ajanlknhcmbhbdafadmkobjnfkhdiegm

Could be malicious

Supported Languages

🇪🇹Amharic
🇸🇦Arabic
🇧🇩Bengali
🇧🇷Brazilian Portuguese
🇬🇧British English
🇧🇬Bulgarian
🇪🇸Catalan
🇨🇳Chinese (Simplified)
🇹🇼Chinese (Traditional)
🇭🇷Croatian
🇨🇿Czech
🇩🇰Danish
🇳🇱Dutch
🇺🇸English
🇪🇪Estonian
🇵🇭Filipino
🇫🇮Finnish
🇫🇷French
🇩🇪German
🇬🇷Greek
🇮🇳Gujarati
🇮🇱Hebrew
🇮🇳Hindi
🇭🇺Hungarian
🇮🇩Indonesian
🇮🇹Italian
🇯🇵Japanese
🇮🇳Kannada
🇰🇷Korean
🇱🇻Latvian
🇱🇹Lithuanian
🇲🇾Malay
🇮🇳Malayalam
🇮🇳Marathi
🇳🇴Norwegian
🇮🇷Persian
🇵🇱Polish
🇵🇹Portuguese
🇷🇴Romanian
🇷🇺Russian
🇷🇸Serbian
🇸🇰Slovak
🇪🇸Spanish
🇸🇪Swedish
🇮🇳Tamil
🇮🇳Telugu
🇹🇭Thai
🇹🇷Turkish
🇺🇦Ukrainian
🇺🇸US English
🇻🇳Vietnamese

Extension Info & Metadata

Status
Removed
Version
0.0.29
Size
0.29 MB
Rating
1.9/5
Reviews
209
Users
200,000
Type
Extension
Updated
Nov 8, 2023
Category
Productivity Workflow
Price
Free
Featured
No
Visibility
Unlisted
Mature
No
By Google
No
Trusted
Yes

Publisher Contextual Analysis

Trusted
Author
MicrosoftView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Website
Visit
Total Extensions
7
Active
5
Obsolete
2
Listed
6
Unlisted
1
Total Users
34,230,420

Send and receive email, manage your calendar, tasks, and more without opening a new tab.

The Microsoft Outlook browser extension brings you the power of mail, calendar, contacts, and tasks using an icon in the browser. You can quickly access your Outlook work account or your Outlook.com or Hotmail account without switching to another tab or app. Features - Access work or personal accounts - Read, send, and manage email and get notifications - Create events, view upcoming ones, and join online meetings - Create, track, and manage tasks - Add and view contacts Great for doing all this without switching tabs - Reading an important message - Checking your calendar - Adding a task based on what you’re reading on the web - Fast look up of a contact’s phone number - Referring to info on a webpage while writing an email

Item
Type
Severity
Description
webRequest
Permission
Critical
This permission enables the extension to monitor and analyze all web requests made by the browser. Rated Critical because it can observe all network traffic including sensitive data, track browsing behavior, and gather authentication tokens.
webRequestBlocking
Permission
Critical
This permission allows the extension to intercept, modify, or block any web request in real-time before it reaches its destination. Rated Critical because it can modify sensitive data (like passwords, credit cards) before encryption, redirect traffic to malicious sites, or block security updates.
<all_urls>
Permission
Critical
This permission grants access to all websites without restriction. Rated High because it can access any web content, monitor all web activity, and potentially steal sensitive data across all sites.
Dangerous Permission Combination
Risk Factor
Critical
This extension can intercept, modify, and block web requests in real-time.
Contextual Risk Factors
Risk Factor
High
The following context increases the overall risk:• 10% increase: Early script execution enables pre-emptive content manipulation• 15% increase: Older manifest version lacks modern security controls
Early Content Script Execution
Risk Factor
Medium
This extension runs content scripts at document_start.
Older Manifest Version
Risk Factor
Medium
This extension uses Manifest Version 2
notifications
Permission
Low
This permission displays system notifications. Rated Low because it can only show user-visible notifications without accessing system data.

The popup registers a blocking webRequest.onBeforeSendHeaders listener against ei={urls:["https://*/*"]}, intercepting ALL outbound HTTPS request headers from the browser with the extraHeaders flag (required to access Cookie headers). While actual header modification is gated on ti(e.url) (URLs containing ?isExtension=true), the listener fires and executes JavaScript for every single HTTPS request in the browser. For matching URLs, it clears the Cookie header entirely and spoofs the User-Agent to appear as an iPhone running Microsoft Edge on iOS.

popup.bundle.js (Line 60)
chrome.webRequest.onBeforeSendHeaders.addListener((function(e) {  var t, n = e.requestHeaders;  if (!ti(e.url) && !(null == e ? void 0 : e.url.includes("sw.js"))) return {    requestHeaders: n  };  if (n) {    for (var r = 0, o = n.length; r < o; ++r) "cookie" === (null === (t = n[r].name) || void 0 === t ? void 0 : t.toLowerCase()) && (n[r].value = ""), "User-Agent" !== n[r].name || (null == e ? void 0 : e.url.includes("sw.js")) || (n[r].value = "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 EdgiOS/44.5.0.10 Mobile/15E148 Safari/604.1");    return {      requestHeaders: n    }  }}), ei, ["requestHeaders", "blocking", "extraHeaders"]);// where: ei={urls:["https://*/*"]}

The popup registers a blocking onHeadersReceived listener with no explicit URL filter, causing the fallback ei={urls:["https://*/*"]} to activate — intercepting ALL HTTPS response headers in the browser. For responses where the URL has ?isExtension=true or matches Microsoft Outlook/OAuth logout URLs, the extension strips Content-Security-Policy frame-ancestors restrictions and — critically — does not merely remove X-Frame-Options but actively replaces it with a fabricated 'x-powered-by: ASP.net' header, disguising the manipulation as a benign IIS response header.

popup.bundle.js (Line 60)
chrome.webRequest.onHeadersReceived.addListener(n, t, ["responseHeaders", "blocking"])}((function(e) {  return ti(e.url) || ui.some((function(t) {    return e.url.includes(t)  }))}));// t is undefined here; fallback: void 0===t&&(t=ei); ei={urls:["https://*/*"]}// Callback n modifies response headers:// "content-security-policy"===u && (a[s].value = a[s].value.replace("frame-ancestors","frame-ancestors "+location.origin))// "x-frame-options"===u && (a[s]={name:"x-powered-by",value:"ASP.net"})

The background script uses a blocking onHeadersReceived listener (guarded to the Outlook inbox URL) to modify security headers on responses. The content-security-policy frame-ancestors directive is injected with the extension's chrome-extension:// origin to permit iframing, and the x-frame-options header is fully replaced by a fake 'x-powered-by: ASP.net' header — actively deceiving any observer into thinking the response came from IIS without clickjacking protection rather than revealing that a header was stripped.

background.bundle.js (Line 32)
function r(t) {  var r, n, o, i, a = t.responseHeaders;  if (!e(t)) return {    responseHeaders: a  };  if (console.log("iframe-ing: " + t.url), a) {    for (var s = 0, c = a.length; s < c; ++s) {      var u = (a[s].name || '').toLowerCase();      "content-security-policy" === u && (a[s].value = a[s].value.replace("frame-ancestors", "frame-ancestors " + location.origin));      "x-frame-options" === u && (a[s] = {        name: "x-powered-by",        value: "ASP.net"      });    }    return {      responseHeaders: a    };  }}void 0 === t && (t = ga); // ga={urls:["https://*/*"]}chrome.webRequest.onHeadersReceived.addListener(r, t, ["responseHeaders", "blocking"]);// Called as: }((function(e){return e.url.includes(go)}),{urls:[go]})// go="https://outlook.office.com/mail/mini/opxdeeplink/mail/inbox"

The content script runs at document_start on Microsoft login pages (login.live.com and login.microsoftonline.com). On the Outlook redirect URI page, it captures window.location.hash — which in Microsoft's MSAL redirect flow contains the OAuth authorization code or access/id token after a successful authentication — and transmits the full hash to the background script via chrome.runtime.sendMessage. While this is MSAL's intended redirect completion mechanism, the extension's background then processes these tokens to authenticate with Microsoft APIs on behalf of the user, making this a high-privilege credential-handling operation that warrants scrutiny.

contentScript.bundle.js (Line 31)
// Content script injected at document_start into: login.live.com/*, login.microsoftonline.com/*// and: https://outlook.office.com/mail/mini/opxdeeplink/mail/inboxvar fo = window.location.href;if (function(e) {    return e.startsWith(ao)  }(fo) &&  (go && function(e) {    return e.includes(so) && e.includes("msal")  }(go) || Nn.isInIframe())) {  var yo = window.location.hash;  var mo = jn();  e({    type: Hn.AppLoginRedirectDone,    payload: {      hash: yo    },    cid: mo  });  // e() is chrome.runtime.sendMessage  // so=clientId: "6a1a91a6-19f9-4a37-b68b-9bed3f4e6595"  // ao="https://outlook.office.com/mail/mini/opxdeeplink/mail/inbox"}

Multiple CDN URLs are obfuscated using a string-reversal technique — a classic pattern used to evade static analysis tools and content security policy scanners that pattern-match URL strings. While the decoded URLs resolve to legitimate Microsoft Office CDN domains, the deliberate obfuscation is a behavioral red flag and indicates the author was aware that these strings could trigger detection. This technique is functionally identical to the obfuscation patterns used in known malicious extensions.

contentScript.bundle.js (Line 31)
"ten.eciffo.ndc.1-kooltuo//".split("").reverse().join(""),  "nc.kooltuo.rentrap.ndc.1-kooltuo//".split("").reverse().join(""),  "ten.eciffo.ndc.2-kooltuo//".split("").reverse().join(""),  "nc.kooltuo.rentrap.ndc.2-kooltuo//".split("").reverse().join("");// Decoded at runtime to:// "//outlook-1-cdn.office.net"// "//outlook-1-cdn.partner.outlook.cn"// "//outlook-2-cdn.office.net"// "//outlook-2-cdn.partner.outlook.cn"

auth.html is exposed as a web-accessible resource to a second extension ID (kkpalkknhlklpbflpcpkepmmbnmfailf) in addition to this extension's own ID. More critically, auth.html loads all four extension bundles simultaneously — including the full background script, content script, popup script, and service worker bundle — meaning any page or extension that can navigate to this URL causes the full extension logic (including all webRequest listeners and token-processing code) to execute in that context. This cross-extension exposure combined with full-bundle loading is an unusual attack surface.

auth.html (Line 1)
<!doctype html><html lang="en"><head>  <meta charset="UTF-8">  <title>Auth Redirect</title>  <script defer="defer" src="/popup.bundle.js"></script>  <script defer="defer" src="/background.bundle.js"></script>  <script defer="defer" src="/contentScript.bundle.js"></script>  <script defer="defer" src="/serviceworker_webpush.bundle.js"></script></head><body></body></html><!-- manifest.json web_accessible_resources:  "kkpalkknhlklpbflpcpkepmmbnmfailf/auth.html",  "ajanlknhcmbhbdafadmkobjnfkhdiegm/auth.html" -->

By severity

Critical2
High2
Medium2
Low0

Versions scanned

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

Extension VersionCode Review Findings
0.0.296

Files with findings

4 distinct paths — top paths by unique finding count:

  • contentScript.bundle.js2
  • popup.bundle.js2
  • auth.html1
  • background.bundle.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Network Interception
critical
popup.bundle.js (line 60)The popup registers a blocking webRequest.onBeforeSendHeaders listener against ei={urls:["https://*/*"]}, intercepting ALL outbound HTTPS request headers from the browser with the extraHeaders flag (required to access…
2Network Interception
critical
popup.bundle.js (line 60)The popup registers a blocking onHeadersReceived listener with no explicit URL filter, causing the fallback ei={urls:["https://*/*"]} to activate — intercepting ALL HTTPS response headers in the browser. For responses…
3Credential Theft
high
contentScript.bundle.js (line 31)The content script runs at document_start on Microsoft login pages (login.live.com and login.microsoftonline.com). On the Outlook redirect URI page, it captures window.location.hash — which in Microsoft's MSAL redirec…
4Network Interception
high
background.bundle.js (line 32)The background script uses a blocking onHeadersReceived listener (guarded to the Outlook inbox URL) to modify security headers on responses. The content-security-policy frame-ancestors directive is injected with the e…
5Obfuscation
medium
contentScript.bundle.js (line 31)Multiple CDN URLs are obfuscated using a string-reversal technique — a classic pattern used to evade static analysis tools and content security policy scanners that pattern-match URL strings. While the decoded URLs re…
6Privilege Escalation
medium
auth.html (line 1)auth.html is exposed as a web-accessible resource to a second extension ID (kkpalkknhlklpbflpcpkepmmbnmfailf) in addition to this extension's own ID. More critically, auth.html loads all four extension bundles simulta…
URLs
27
IPv4
2
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.

browser.pipe.aria.microsoft.com/Collector/3.0/https://browser.pipe.aria.microsoft.com/Collector/3.0/
login.microsoftonline.com/common/https://login.microsoftonline.com/common/
login.microsoftonline.com/common/discovery/instancehttps://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=
tools.ietf.org/html/rfc7515https://tools.ietf.org/html/rfc7515
docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applicationshttps://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options
github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.
login.microsoftonline.com-https://login.microsoftonline.com
outlook.office.com/mail/mini/opxdeeplink/mail/inboxhttps://outlook.office.com/mail/mini/opxdeeplink/mail/inbox
outlook.office.com/M365.Accesshttps://outlook.office.com/M365.Access
outlook.office.com/OWA.AccessAsUser.Allhttps://outlook.office.com/OWA.AccessAsUser.All
Showing 1 to 10 of 30 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

4.3.2.1
IPv4
-
44.5.0.10
IPv4
-
Showing 1 to 5 of 10 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.