unrolld

ID: bjkgggkbokfjifbjeehgdlecfjilmjpk

Could be malicious

Supported Languages

🇺🇸English

Extension Info & Metadata

Status
Removed
Version
1.0.0.3
Size
0.32 MB
Rating
0.0/5
Reviews
0
Users
12
Type
Extension
Updated
Apr 14, 2022
Category
Lifestyle Shopping
Price
Free
Featured
No
Visibility
Listed
Mature
Yes
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
Strange Clouds Inc.View Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Total Extensions
1
Active
0
Obsolete
1
Listed
1
Unlisted
0
Total Users
12

Rate and review Cannabis across Ontario.

unrolld is Ontario's resource for rating and reviewing products available at the Ontario Cannabis Store website.

Item
Type
Severity
Description
*://ocs.ca/*
Host
Medium
Host permission — access limited to this URL pattern.

The content script injects a DOM login form containing email+password <input> fields directly into ocs.ca pages (and a matching signup form at line 624). Because the overlay is rendered inside a third-party site rather than in the extension popup, users can be misled into believing they are entering credentials into ocs.ca. This is a phishing-adjacent pattern even when the credentials are used for the extension's own Firebase auth.

contentScript.bundle.js (Line 600)
E = function(e) {    document.body.classList.add("overflow-hidden");    var t = document.createElement("div");    t.id = "unrolld-login", t.innerHTML =      '\n    <div class="w-full max-w-md p-8 space-y-3 rounded-xl text-gray-900 bg-white relative shadow-xl">\n      ... <h1 class="text-2xl font-bold text-center text-gray-900">Login</h1>\n      <form novalidate="" action="" class="space-y-6 ng-untouched ng-pristine ng-valid">\n        ... <input type="email" name="email" ...>\n        <input type="password" name="password" ...>\n        <button ...>Sign in</button>\n      ...'    document.body.appendChild(t);...    // triggered by: chrome.runtime.onMessage ... "injectLogin" -> E(v)

Form submit handlers harvest the email and password entered on the injected overlay and forward them via chrome.runtime.sendMessage to the background service worker. The background script then ships the credentials out to Firebase Auth (unrolld-extension.firebaseapp.com / identitytoolkit.googleapis.com). This is the same code shape credential stealers use; while here the destination is the extension's own backend, it is the pattern the ML model is almost certainly flagging.

contentScript.bundle.js (Line 447)
v = function(e) {    e.preventDefault(), chrome.runtime.sendMessage({      command: "login",      data: {        email: e.target.email.value,        password: e.target.password.value      }    }, (function(e) {      ...    }))  },  g = function(e) {    e.preventDefault(), chrome.runtime.sendMessage({      command: "register",      data: {        email: e.target.email.value,        password: e.target.password.value      }    }, ...)

Review images chosen by the user are uploaded via an unauthenticated POST to a hardcoded third-party Cloudinary account (strangeclouds, preset ardhbad4). There is no server-side validation of the content before it is sent off-origin, and the endpoint is not declared in host_permissions (the fetch goes out from the content script on ocs.ca). Exfiltrating file contents to an arbitrary third-party bucket is a standard data-exfiltration primitive.

contentScript.bundle.js (Line 489)
a = n.target.images.files,  "https://api.cloudinary.com/v1_1/strangeclouds/image/upload", i = new FormData,  e.next = 8, Promise.all(Array.from(a).map(function() {        ...        return i.append("file", t),        i.append("upload_preset", "ardhbad4"),        e.next = 4,        fetch("https://api.cloudinary.com/v1_1/strangeclouds/image/upload", {          method: "POST",          body: i        }).then((function(e) {          return e.json()        }));

The service worker initializes a Firebase app pointed at the 'unrolld-extension' project and wires chrome.runtime.onMessage handlers that authenticate with Firebase using the email/password harvested by the injected form, then fetch the user's record from the Realtime Database. All account and review data leaves the user's browser to this third-party Firebase backend, which is the exfiltration sink the ML model is most likely responding to even though the flow is by design.

background.bundle.js (Line 11737)
apiKey: "AIzaSyDillcBlZjMrYnKsRHT2begxDhWGNgdARM", authDomain: "unrolld-extension.firebaseapp.com", projectId: "unrolld-extension", storageBucket: "unrolld-extension.appspot.com", messagingSenderId: "537627294096", appId: "1:537627294096:web:f92d1b25dc55978df41b15", measurementId: "G-23RW2C8NJX"})), Rc = ...chrome.runtime.onMessage.addListener((function(e, t, n) {        var i = e.command,          ...          switch (i) {            case "injectLogin":              ...            case "user":              Pc ? Sr(br(Nc, "users/".concat(Pc)))...                case "login" : (function(e, t, n) {                    return pa(F(e), Xo.credential(t, n))                  }

By severity

Critical0
High0
Medium2
Low2

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
1.0.0.34

Files with findings

2 distinct paths — top paths by unique finding count:

  • contentScript.bundle.js3
  • background.bundle.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Credential Theft
medium
contentScript.bundle.js (line 447)Form submit handlers harvest the email and password entered on the injected overlay and forward them via chrome.runtime.sendMessage to the background service worker. The background script then ships the credentials ou…
2Phishing
medium
contentScript.bundle.js (line 600)The content script injects a DOM login form containing email+password <input> fields directly into ocs.ca pages (and a matching signup form at line 624). Because the overlay is rendered inside a third-party site rathe…
3Data Exfiltration
low
contentScript.bundle.js (line 489)Review images chosen by the user are uploaded via an unauthenticated POST to a hardcoded third-party Cloudinary account (strangeclouds, preset ardhbad4). There is no server-side validation of the content before it is …
4Unauthorized Data Collection
low
background.bundle.js (line 11737)The service worker initializes a Firebase app pointed at the 'unrolld-extension' project and wires chrome.runtime.onMessage handlers that authenticate with Firebase using the email/password harvested by the injected f…
URLs
17
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.

www.w3.org/2000/svghttp://www.w3.org/2000/svg
github.com/uuidjs/uuidhttps://github.com/uuidjs/uuid#getrandomvalues-not-supported
api.cloudinary.com/v1_1/strangeclouds/image/uploadhttps://api.cloudinary.com/v1_1/strangeclouds/image/upload
www.apache.org/licenses/LICENSE-2.0http://www.apache.org/licenses/LICENSE-2.0
console.firebase.google.com-https://console.firebase.google.com/.
${a}-http://${a}?ns=${l.namespace}`,c=mr(r,s
localhost-http://localhost
apis.google.com/js/api.jshttps://apis.google.com/js/api.js?onload=${t}`
${e.config.authdomain}/__/auth/iframe%60,i=%7BapiKey:t.apiKey,appName:e.name,v:ce%7D,s=fc.get(e.config.apiHosthttps://${e.config.authDomain}/__/auth/iframe`,i={apiKey:t.apiKey,appName:e.name,v:ce},s=fc.get(e.config.apiHost
${e.authdomain}/$%7Byc%7D%60;returnhttps://${e.authDomain}/${yc}`;return
Showing 1 to 10 of 20 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

1.0.0.3
IPv4
-
Version
Size
Is Malicious
Findings
Permhash
1.0.0.3
Latest
0.32 MB
Malicious
4N/A
1.0.0.2
0.32 MB
Malicious
N/A
1.0.0.1
0.32 MB
Malicious
N/A
1.0.0.0
0.32 MB
Malicious
N/A
1.0.1
0.32 MB
Malicious
N/A
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.