Is VU Quiz Firewall safe?
VU Quiz Firewall is high risk. The extension starts a background loop when the service worker runs. Every 3 seconds it lists installed Chrome extensions, stores the list locally, and disables any extension whose ID is not its own. Testing had no other extension present.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
Recurring disable loop for other extensions
The extension starts a background loop when the service worker runs.
Every 3 seconds it lists installed Chrome extensions, stores the list locally, and disables any extension whose ID is not its own.
Testing had no other extension present.
You install the extension and Chrome starts its background worker.
No quiz page has to be open for the worker code to schedule its recurring check.
The extension repeatedly lists your installed add-ons and asks Chrome to turn off every other extension.
The loop repeats every 3 seconds and excludes only VU Quiz Firewall's own extension ID.
| Field | Value | Why it matters | |
|---|---|---|---|
Other extension ID | aapocclcgogkmnckokdopfmhonfmgoek (illustrative) | Shows which add-ons are installed in your browser. Uncommon combinations can distinguish one browser profile from another. | |
Item type | extension | Lets the loop separate extensions from other Chrome-managed items before taking action. | |
Saved extension list | chrome.storage.local extData = JSON.stringify(installedExtensions) | Keeps a local copy of the installed-extension list that the quiz-page content script can read later. | |
Disable target | setEnabled(otherExtensionId, false) | Marks every other installed extension as eligible to be turned off by Chrome. |
The background worker repeats the installed-extension check every 3 seconds while it is running.
The background worker stores the extension list and disables other extensions
try {
setInterval(CheckInstallExtensions, 3000);
} catch {
console.log(chrome.runtime.lastError);
}
function CheckInstallExtensions(s) {
chrome.management.getAll(function(e) {
if (e) {
try {
const data = JSON.stringify(e);
chrome.storage.local.set({
extData: data
}, function(e) {
if (chrome.runtime.lastError);
});
} catch (err) {
console.log(err);
}
e.forEach(function(item) {
try {
if (item.type == "extension" && item.id != chrome.runtime.id) {
chrome.management.setEnabled(item.id, false, function(e) {
if (chrome.runtime.lastError);
});
}
} catch (err) {
console.log(err);
}
});
}
});
}
The quiz-page script reads the stored extension list
chrome.storage.local.get(["extData"], function(obj) {
try {
if (window.location.href.indexOf("QuizStart.aspx") > -1 || window.location.href.indexOf("QuizQuestion.aspx") > -1 || window.location.href.indexOf("ExtensionDetected.aspx") > -1) {
if (obj.extData != null) {
let extBrowserList = JSON.parse(obj.extData),
index = 0,
extFound = false;
for (index = 0; index < extBrowserList.length; index++) {
if (extBrowserList[index].type == "extension" && extBrowserList[index].id != chrome.runtime.id) extFound = true;
else try {
delete extBrowserList[index];
} catch {}
}
if (extFound === true) {
try {
localStorage.setItem("sysdata", JSON.stringify(extBrowserList));
} catch (error) {
console.error("Error saving to localStorage", error);
} finally {
if (window.location.href.indexOf("ExtensionDetected.aspx") < 0) window.location.href = "ExtensionDetected.aspx";
}
}
} else {
window.location.href = "ExtensionNotInstalled.aspx";
}
}
} catch (err) {
console.error("Error processing extension data", err);
}
});
Dynamic analysis observed the background worker repeatedly writing extension-list data on the expected cadence. The test profile contained only this extension, so there was no separate extension available for Chrome to disable during that run.