Is cherry pick maximize cred safe?
cherry pick maximize cred is high risk. After you sign in via Google OAuth or email/password, your email is saved locally. Dynamic analysis captured it in a POST to the cards-sync endpoint beside the stored card list, and in every checkout-triggered rank-cards request.…
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
Signed-in email address sent to developer backend on every checkout
After you sign in via Google OAuth or email/password, your email is saved locally.
Dynamic analysis captured it in a POST to the cards-sync endpoint beside the stored card list, and in every checkout-triggered rank-cards request.
- Severity
- High unwanted
- Type
- Unexpected
- CWE
- CWE-200
- Source
- Dynamic sandbox
You sign into the extension with your Google account or email/password.
Sign-in is handled via Supabase auth in profile.js using the hardcoded anon JWT.
Your email address is written to chrome.storage.local and subsequently included in every POST to the developer's backend on checkout page visits.
Once stored, the email is read automatically by the service worker without any further user interaction.
200 OK, returns updated card list if server copy has changed
- Content-Type
- application/json
{ "source": "extension", "email": "a planted marker email address", "storedCards": [ { "bank": "SBI", "name": "SBI Cashback Card" } ], "updatedAt": "2020-01-01T00:00:00.000Z"}After sign-in, the extension stores your email and Supabase tokens locally, reading the email on every checkout visit for outbound requests.
- Location
- chrome.storage.local
{ "email": "priya.sharma@gmail.com", "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "refresh_token": "v1.refresh.abc123xyz"}Email persisted to storage after Google OAuth (profile.js lines 5314-5318)
await chrome.storage.local.set({ email: session.user.email, access_token: accessToken, refresh_token: refreshToken }); chrome.tabs.update({ url: `chrome-extension://${chrome.runtime.id}/profile.html` });Email read and sent in cards-sync and rank-cards (background.js lines 9-24 and 1437-1447)
// syncStoredCards() — called on every checkout visit const stored = await chrome.storage.local.get("email"); if (!stored.email) return; const userEmail = stored.email; const payload = { source: "extension", email: userEmail, storedCards: storedCards, updatedAt: lastUpdated }; await fetch("https://vozpwalfclvkjlpamkza.supabase.co/functions/v1/cards-sync", { method: "POST", body: JSON.stringify(payload) });- vozpwalfclvkjlpamkza.supabase.co
Developer-controlled Supabase project. Receives your email via /functions/v1/cards-sync (card sync) and /functions/v1/rank-cards (checkout analysis) on every matching navigation.
Checkout page content and URL transmitted to developer backend
At checkout on 31 hardcoded Indian e-commerce and travel sites, the extension reads the full page text, which can include totals, item names, addresses, and payment methods, and sends it to the developer's Supabase function.
- Severity
- High unwanted
- Type
- Unexpected
- CWE
- CWE-359
- Source
- Dynamic sandbox
You visit a checkout or payment page on Flipkart, Amazon.in, Myntra, or 28 other supported sites.
Matching is done against a hardcoded list of 31 exact URLs and a generic checkout-path pattern.
The extension reads the full page text and POSTs it, along with your email and stored cards, to the developer's cloud backend.
The POST goes to vozpwalfclvkjlpamkza.supabase.co/functions/v1/rank-cards on every matching page navigation.
200 OK, returns ranked card recommendations object
- Content-Type
- application/json
{ "pageUrl": "https://www.flipkart.com/checkout", "pageTitle": "flipkart checkout", "pageContent": "flipkart assured cash on delivery available ... items in your cart ... sbi cashback card ... enter delivery address ...", "cards": [ { "name": "SBI Cashback Card", "bank": "SBI" } ], "email": "a planted marker email address"}- Full page textflipkart checkout ... add new address ... sbi cashback card ... cod available ...
The complete visible text of the checkout page, lowercased, including item names, prices, shipping address fields, and payment options.
- Checkout URLhttps://www.flipkart.com/checkout
The exact URL of the payment page you are on, identifying the merchant and your cart state.
- Account emailpriya.sharma@gmail.com
Your email address as stored after sign-in, included in every request if you are signed into the extension.
- Stored card list[{"name":"SBI Cashback Card","bank":"SBI"}]
The list of credit/debit cards you have saved in the extension, sent alongside the page content for ranking.
Content script payment detection and data extraction (content.js lines 38-92)
const paymentGateways = ["sdk.cashfree.com", "fastrr-boost-ui.pickrr.com/assets/images", "cdn.shopify.com/shopifycloud/checkout-web", "sdk.breeze.in/gallery/icons", "pgi.billdesk.com"]; const checkoutUrls = ["https://www.vegnonveg.com/checkout", "https://www.amazon.in/gp/buy/payselect/handlers/display.html", "https://www.flipkart.com/checkout", "https://www.myntra.com/checkout/payment", ...28 more]; // On match: chrome.runtime.sendMessage({ isPaymentPage: true, pageTitle: document.title.toLowerCase(), pageContent: document.body.innerText.toLowerCase(), url: window.location.href });Service worker rank-cards POST (background.js lines 1437-1459)
const stored = await chrome.storage.local.get("email"); let userEmail; if (stored.email) { userEmail = stored.email; await syncStoredCards(); // also sends email + cards to /cards-sync } const storedCards = (await chrome.storage.sync.get(["storedCards"])).storedCards || []; const payload = { pageUrl: event.url, pageTitle: event.pageTitle, pageContent: event.pageContent, cards: storedCards, email: userEmail }; await fetch("https://vozpwalfclvkjlpamkza.supabase.co/functions/v1/rank-cards", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) });- vozpwalfclvkjlpamkza.supabase.co
Developer-controlled Supabase project. Receives checkout page text, URL, email, and card list on every matching navigation. Also hosts /cards-sync, syncing saved cards.
Behavioral telemetry with email and card names sent to Mixpanel
The extension uses a hardcoded Mixpanel token to send analytics to api.mixpanel.com.
Captured POSTs set distinct_id to the user's email (or a random ID if signed out), with events naming saved cards and checkout URLs.
- Severity
- Medium unwanted
- Type
- Unexpected
- CWE
- CWE-200
- Source
- Dynamic sandbox
You interact with the extension, opening the popup, adding a card, visiting a checkout page, or starting the browser.
Multiple events are instrumented throughout background.js and popup.js.
The extension sends an analytics event to Mixpanel containing a distinct_id tied to your email address or a persistent random identifier.
Events include card names, checkout URLs, and gateway detection results, all tied to the same persistent identity across sessions.
200 OK
- Accept
- text/plain
- Content-Type
- application/json
[ { "event": "Payment Page Detected", "properties": { "url": "https://www.flipkart.com/checkout/", "gatewayFound": false, "foundInPage": true, "foundInScript": false, "token": "dd89a1b5134eee35a1acbf9ac4e6722f", "distinct_id": "<planted-marker-id>", "time": 1746016800 } }]- Project tokendd89a1b5134eee35a1acbf9ac4e6722f
A hardcoded identifier that routes all events into the developer's Mixpanel project. This token cannot be rotated by users.
- Persistent user identitypriya.sharma@gmail.com
Your email if signed in, otherwise a random ID that persists across browser restarts. Mixpanel uses this to link all your events over time.
- Saved card namesSBI Cashback Card | HDFC Regalia | Axis Flipkart
Included in Synced Cards events as a pipe-separated string of the card names stored in the extension.
- Checkout page URLhttps://www.flipkart.com/checkout/
Included in Payment Page Detected events, revealing which merchants you shop at and when.
Mixpanel tracking function in background.js (lines 1339-1369)
async function trackEvent(eventName, props = {}) { const payload = [{ event: eventName, properties: { ...props, token: "dd89a1b5134eee35a1acbf9ac4e6722f", distinct_id: await new Promise(resolve => { chrome.storage.sync.get(["email", "userId"], data => { if (data.email) resolve(data.email); else if (data.userId) resolve(data.userId); else { const newId = "user_" + Math.random().toString(36).substr(2, 9); chrome.storage.sync.set({ userId: newId }, () => resolve(newId)); } }); }), time: Math.floor(Date.now() / 1000) } }]; fetch("https://api.mixpanel.com/track", { method: "POST", headers: { "Content-Type": "application/json", Accept: "text/plain" }, body: JSON.stringify(payload) }); }- api.mixpanel.com
Mixpanel analytics platform (Mixpanel, Inc.). Receives behavioral events including card names, checkout URLs, and a persistent user identity tied to the signed-in email address.