Is AnswerAI - Homework AI Tutor & Study Helper safe?
Answer AI is medium risk. A shipped rule targets XHR to `etpweb.answerai.pro/*`: strips `Origin`, sets `Content-Type: application/x-www-form-urlencoded` and `X-Requested-With`, adds `Access-Control-Allow-Origin: *`. Confirmed from the shipped rule file.…
Who publishes itANSWER AI LAB INC - no other listings under this identity
ANSWER AI LAB INC - no other listings under this identity
What this publisher told the store about itself, and the other listings that told it the same thing.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
AnswerAI rewrites headers for its analytics domain
A shipped rule targets XHR to etpweb.answerai.pro/*: strips Origin, sets Content-Type: application/x-www-form-urlencoded and X-Requested-With, adds Access-Control-Allow-Origin: *.
Confirmed from the shipped rule file.
What actually happens
The extension is installed with its packaged network request ruleset enabled.
Chrome applies the shipped rule to matching analytics requests and rewrites request and response headers.
Headers changed by rule 5
- Origin request headerOrigin header removed
Removes the browser header that normally describes where a cross-origin request came from.
- Request content typeContent-Type: application/x-www-form-urlencoded
Changes how the request declares its body format to the server.
- XHR markerX-Requested-With: XMLHttpRequest
Marks the request as an XMLHttpRequest-style call.
- Response CORS headerAccess-Control-Allow-Origin: *
Allows browser code to read responses from any origin when the rule modifies the response.
Captured request
POST traffic to this endpoint returned HTTP 200 during dynamic analysis; request and response headers were not captured.
The code that does this
The manifest enables the ruleset and rule 5 performs the header rewrite
Readable manifest rule-resource entry
manifest.jsonconst manifestHeaderRuleConfig = { manifest_version: 3, background: { service_worker: "static/background/index.js" }, permissions: [ "storage", "scripting", "activeTab", "clipboardWrite", "tabs", "declarativeNetRequest", "declarativeNetRequestWithHostAccess", "declarativeNetRequestFeedback", "unlimitedStorage", "contextMenus" ], declarative_net_request: { rule_resources: [ { id: "ruleset_1", enabled: true, path: "header.7c1f959a.json" } ] }};Readable header-rewrite rule
header.7c1f959a.jsonconst headerRewriteRule = { id: 5, priority: 1, action: { type: "modifyHeaders", responseHeaders: [ { header: "Access-Control-Allow-Origin", operation: "set", value: "*" } ], requestHeaders: [ { header: "Content-Type", operation: "set", value: "application/x-www-form-urlencoded" }, { header: "Origin", operation: "remove" }, { header: "X-Requested-With", operation: "set", value: "XMLHttpRequest" } ] }, condition: { urlFilter: "https://etpweb.answerai.pro/*", resourceTypes: ["xmlhttprequest"] }};Host matched by the header rule
- etpweb.answerai.pro
AnswerAI analytics/API host whose XHR traffic matches the packaged header-rewrite rule.
AI assistant clicks send page details to analytics
Asking the AI assistant a question from a webpage makes the content script build a search_click event with the page URL, title, domain, and device ID, sent to etpweb.answerai.pro/event/report/web.
Not captured in this test session.
What actually happens
You ask the AI assistant a question while viewing a webpage.
The extension prepares a tracker event that includes that page's URL, title, domain, and a stored device ID.
Fields the code attaches to the assistant-click tracker event
- Current page URLhttps://en.wikipedia.org/wiki/Photosynthesis
Links the assistant question to the exact webpage you were viewing.
- Page titlePhotosynthesis - Wikipedia
Adds a readable description of the page where you used the assistant.
- Page domainen.wikipedia.org
Shows which site you were on when the assistant interaction happened.
- Stored device ID1897719478737
Lets separate tracker events be linked back to the same browser profile over time.
Captured request
Tracker POSTs to this endpoint were observed during dynamic analysis; the specific search_click body was not captured.
The code that does this
The content script builds the page-context tracker event; the background tracker adds the stored ID
Readable assistant action handler
root-container.e09813a7.jslet handleAssistantAction = async (askType, acceptLanguage, isRegenerate = false) => { let selectedText = activeSelectionString.current; if (askType === AskAIButtonType.Translate && !isRegenerate && acceptLanguage) { let cached = store.getTranslationCache(selectedText, acceptLanguage); if (cached) { setAskType(askType); setWindowVisible(true); if (!windowOpen) { setPosition({ x: selectMenuPosition.left, y: selectMenuPosition.top - 15 }); } setReply({ type: "reply", content: cached, source: ChatSource.extTranslate, acceptLanguage }); return; } } sendToBackground({ name: "tracker", body: { name: "tracker", props: { class: askType + 1, message: selectedText, domain: domain.current } } }); setAskType(askType); setWindowVisible(true); if (!windowOpen) { setPosition({ x: selectMenuPosition.left, y: selectMenuPosition.top - 15 }); } store?.setActiveTab?.(0); setReply(null); if (!sendMessageRef.current || !await sendMessageRef.current({ curString: selectedText, askType, acceptLanguage, isRegenerate })) { if (!store.isLogin) { setAuthOpen(true); return; } if (!store.flash) { setWindowVisible(true); } return; } sendToBackground({ name: "tracker", body: { name: "search_click", props: { class: 1, url: location.href.slice(0, 200), title: document.title.slice(0, 200), domain: domain.current } } }); countPostTimes();};Readable background tracker forwarding function
static/background/index.jsconst localStorage = new Storage({ area: "local" });const sessionStorage = new Storage();const trackEvent = async ({ name, props }) => { const deviceId = await localStorage.get(DEVICE_ID); globalThis.sensors?.track(name, { mid: deviceId, ...props });};Destination for the tracker event
- etpweb.answerai.pro
AnswerAI analytics reporting endpoint receiving extension tracker events.
Persistent device ID joins AnswerAI tracker events
We observed tracker traffic to etpweb.answerai.pro/event/report/web carrying a persistent device identifier and domain en.wikipedia.org.
The worker creates a local device_id if none exists, stores it, adds it as mid before posting.
What actually happens
You use AnswerAI in a way that causes the extension to report a tracker event.
The extension sends the event with a reused device identifier and browsing context to its analytics endpoint.
Captured request
Decoded tracker request contained device identifiers and event properties for en.wikipedia.org.
Observed and code-confirmed fields tied to tracker events
- Persistent device ID1897719478737
Links multiple extension events back to the same browser profile over time.
- Secondary device token19f537a24446c9
Adds another stable-looking identifier to the same tracker event.
- Visited domainen.wikipedia.org
Shows which website was associated with the extension activity.
- Tracker event nameplugin_mainpage
Describes the type of extension activity being reported.
The code that does this
The service worker creates, stores, and attaches the device identifier
Readable device ID initializer
static/background/index.jsconst localStorage = new Storage({ area: "local" });const initDeviceId = async () => { let deviceId = await localStorage.get(DEVICE_ID); if (!deviceId) { deviceId = uuid.v4(); localStorage.set(DEVICE_ID, deviceId); } return deviceId;};Readable tracker forwarding function
static/background/index.jsconst trackEvent = async ({ name, props }) => { const deviceId = await localStorage.get(DEVICE_ID); globalThis.sensors?.track(name, { mid: deviceId, ...props });};Readable API header construction
static/background/index.jsconst headers = { Client: "web", mid: await initDeviceId(), "Content-Type": "application/json", "X-Content-Security": getContentSecurity({ method, path: options?.onelink ? path : "/api/v1" + path, query: query || "", body, onelink: options?.onelink }), cversion, tzoffset: initTzOffset(), ...(token ? { authorization: `Bearer ${token}` } : {}), ...options.headers};Destination receiving tracker events
- etpweb.answerai.pro
AnswerAI analytics reporting endpoint receiving tracker events with device identifiers and event properties.