Is 포인트백 for ADPICK safe?

Medium risk

포인트백 for ADPICK sends visited page URLs to ADPICK's shopping-link endpoint when an ADPICK login or affiliate ID is present.

The extension runs a content script on every website and checks whether the browser has an ADPICK login cookie or stored affiliate ID. When one is present, it sends the current page URL to ADPICK to request a shopping or tracking link, and may redirect the page if the response contains one.

(주)오드엠v1.6Chrome Web Store
47Risk
Who publishes it

(주)오드엠 - no other listings under this identity

What this publisher told the store about itself, and the other listings that told it the same thing.

Publisher
(주)오드엠
Declared legal entity
(주)오드엠
Registered address
역삼로 17길 10, 부강빌딩 4층, 강남구, 서울특별시 06246, KR
Registered contact
박무순

AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.

Publishers can request a review.

Findings

Extension reports every new site you visit to ADPICK's server

This Korean cashback extension's content script runs on every site.

With an ADPICK login cookie or stored affiliate ID, it sends each newly visited domain's URL to adpick.co.kr's GetShoppingLink.php, which can redirect via affiliate link.

Severity
Medium unwanted
Type
Unexpected
CWE
CWE-359
Source
Dynamic sandbox
What actually happens
You did this

You browse to any website while you have an ADPICK login cookie or a stored affiliate ID.

This includes sites with no relationship to ADPICK's shopping or cashback network.

The extension did this

The extension sends the exact URL of the page you're on to ADPICK's server to check whether the site is a shopping partner.

A decision for that domain is then cached for up to 24 hours before the check repeats.

Fields sent to ADPICK's server on each newly visited domain
  • Page URL
    https://www.example-news-site.com/article/12345 (illustrative)

    The full address of the page you're viewing, including its path and any query parameters, is included in the outbound request.

  • Affiliate / account ID
    aff-7a41c9de (illustrative)

    This ties every URL report to your specific ADPICK member or affiliate ID, letting ADPICK associate the reports with an individual account.

  • Domain visit pattern
    example-news-site.com, retailer.example, forum.example (illustrative)

    Repeating automatically for every new domain lets ADPICK's server build a record of the sites you browse while the extension is active.

Captured request
GEThttps://adpick.co.kr/extentions/GetShoppingLink.php?md=mall&apHash=&apAffid=aff-7a41c9de&url=https%3A%2F%2Fwww.example-news-site.com%2Farticle%2F12345 (illustrative)

HTTP 200 with a JSON body that echoed the submitted page URL back and included a partnership status field.

The code that does this

content.js builds the request; background.js performs it

Readable version

content.js - annotated

content.js
function StartAdpickShopping(){	// Runs on every page load (content_scripts matches <all_urls>) once the	// user has an ADPICK login cookie or a stored affiliate ID.	var apCurrentUrl = window.location.href;          // full URL of the page you're on	var apCurrentDomain = window.location.hostname;	apCurrentDomain = apCurrentDomain.replace(/^www\./,'');	// Skip domains that were already checked recently (cache key per domain).	getAdpickLocalData("apMall_"+apCurrentDomain,function(val){		if(val=="nopartner"){			// Cached "not a partner" result (valid 24h) - no request sent.		}else if(val=="applied"){			// Cached "already applied" result (valid 60min) - no request sent.		}else{			// No cached decision for this domain yet: build the ADPICK request,			// carrying the current page URL and the account/affiliate ID.			var apiUrl="https://adpick.co.kr/extentions/GetShoppingLink.php?md=mall&apHash="+adpickHash+"&apAffid="+adpickAffid+"&url="+encodeURIComponent(apCurrentUrl);			// Ask the background service worker to fetch it (content scripts			// can't make this cross-origin request directly).			chrome.runtime.sendMessage({ type: "fetchData", url:apiUrl }, (data) => {				if(typeof data.affid!=="undefined"){                    adpickAffid=data.affid;                    setAdpickLocalData("apAffid",data.affid,60*24*365); // cache 1 year                }                if(data.status=="pass"){                    // no action                }else if(data.status=="aleady"){                    // affiliate link already applied for this domain                    setAdpickLocalData("apMall_"+apCurrentDomain,"applied",60);                }else if(data.status==true){                    // domain IS an ADPICK partner: cache it, then redirect the                    // current tab through the returned affiliate tracking link                    setAdpickLocalData("apMall_"+apCurrentDomain,"applied",60);                    location.replace(data.trackinglink);                }else{                    // domain is NOT a partner: cache that for 24h                    setAdpickLocalData("apMall_"+apCurrentDomain,"nopartner",60*24);                }			});		}	});}

background.js - annotated

background.js
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {	if (request.type == "getAdpickLogin") {		// Reads the ADPICK login cookie to decide whether tracking should run.		chrome.cookies.get({"url": "https://www.adpick.co.kr", "name": "PODGATE_D1"}, function(cookie) {			sendResponse(cookie);		});		return true;	}	if (request.type === "fetchData") {		// Performs the actual outbound request on the content script's behalf,		// using whatever URL content.js constructed (the current page's URL).		fetch(request.url)		.then((response) => response.json())		.then((data) => sendResponse(data))		.catch((error) => console.log("ap Fetch error:", error));		return true;	}});
When this fires

Every 1 day

Every domain you visit while logged into ADPICK triggers a check unless it was already checked recently: a 'not a partner' result is cached for 24 hours, and an 'already applied' result is cached for 60 minutes, before that domain is checked again.

Where the page URL goes
    • adpick.co.kr

    ADPICK's own shopping-link API. Receives the page URL and an affiliate/account ID for every new domain, returning partnership status and an affiliate redirect when applicable.

What it can do

Permissions this extension asks for, as declared in version 1.5. Asking for a permission is not a finding on its own - it is what the extension can do if it chooses to. The current listed version is 1.6, which we have not unpacked yet.

  • Read and change your data on sean.adpick.co.kr

    https://sean.adpick.co.kr/*

  • Read and change your data on www.adpick.co.kr

    https://www.adpick.co.kr/*

  • Read and change your data on adpick.co.kr

    https://adpick.co.kr/*

  • Store data in your browser

    storage

  • Read and change cookies, including the ones that keep you signed in

    cookies

  • See the address and title of every tab you have open

    tabs

Where it sends data

Destinations our analysis observed %ED%8F%AC%EC%9D%B8%ED%8A%B8%EB%B0%B1-for-adpick contacting. Sending data somewhere is not a finding on its own - an extension that syncs your settings has to talk to its own server - but it is where your data can go, and who else it goes to.

  • adpick.co.kr

    %ED%8F%AC%EC%9D%B8%ED%8A%B8%EB%B0%B1-for-adpick sends data to adpick.co.kr. No other extension we have analysed sends data here.

Updated 30 September 2026gkbopfgdnonnkobieobkihdahfdhhihh