common-tg-service: 502 npm 版本劫持 Telegram

目录

简短摘要

common-tg-service 是一个 npm 包,标榜为"NestJS 应用的通用 Telegram 服务"。common-tg-service 内部编译后的代码是一个 Telegram 账户接管框架。所有 502 个已发布版本(1.0.1 到 1.3.207)均为恶意。 该包在公共 npm 注册表上有约 28,000 次周下载量。

同一发布者发布的第二个包 ams-ssk 是服务端运行时,common-tg-service 会回调该包。ams-ssk 本身不会攻击安装它的主机。它只是运送运营者的基础设施代码:相同的 common-tg-service npm 发布者身份、相同的 common-tg-service API 接口、相同的复制粘贴的 NestJS 模板 README、相同的伪装模式。配套的客户端和服务端。

影响:​

  • 在通过该服务的每个 Telegram 账户上设置硬编码的 2FA 密码(Ajtdmwajt1@),并使用运营者的 Gmail 邮箱(paidgirl555@gmail.com)作为恢复地址。
  • 读取运营者的 IMAP 邮箱以自动提交 Telegram 的 2FA 确认邮件。受害者看不到任何提示。
  • 撤销所有与运营者会话不匹配的设备授权,将合法所有者踢出自己的账户。
  • 将 Telegram 聊天 777000 的每个 OTP 登录码连同受害者的电话号码一起转发到运营者控制的机器人频道。
  • 对每个托管账户运行 SRP 检查循环,并将任何用户已轮换 2FA 的账户标记为 rotated_2fa
  • 使用提交的明文凭证和预烘焙的会话 cookie 从 npoint.io 拉取运行时配置。运营者可以更改所有已部署实例的行为而无需重新发布。
  • 将被阻止的 HTTP 请求通过 helper-thge.onrender.com 进行路由,作为归属混淆中继。

入侵指标(活动级别):​

IoC:两个包的活动基础设施

#类型指标来源备注
1npm 发布者shetty123 < [email protected] >两个包均涉及两个包的维护者
2显示作者Mad_manams-ssk用于 repository.url;ams-ssk 的声明作者
3域名paidgirl.sitecommon-tg-service运营者品牌前端
4域名cms.paidgirl.site两个包均涉及AMS / CMS 部署 + IP 管理 API
5域名promoteClients2.glitch.meams-sskGlitch 托管的 AMS / promote-clients 部署(新发现)
6域名helper-thge.onrender.comcommon-tg-serviceWAF 绕过 / HTTP 中继
7域名www.npoint.iocommon-tg-service远程 JSON 配置存储;账户 [email protected]
8域名imap.gmail.comcommon-tg-service2FA 确认码邮箱;账户 [email protected]
9域名zomcall.netlify.appcommon-tg-service运营者控制的前端
10域名tgchats.netlify.appcommon-tg-service运营者控制的前端
11域名tg-chats.netlify.appcommon-tg-service运营者控制的前端
12域名report-upi.netlify.appcommon-tg-service运营者控制的前端(UPI = 印度支付)
13IP31.97.59.2common-tg-service运营者 VPS IP(已白名单)
14IP148.230.84.50common-tg-service运营者 VPS IP
15IP13.228.225.19common-tg-service运营者 VPS IP(AWS 新加坡)
16IP18.142.128.26common-tg-service运营者 VPS IP(AWS 新加坡)
17IP54.254.162.138common-tg-service运营者 VPS IP(AWS 新加坡)
18凭证Ajtdmwajt1@common-tg-service硬编码的通用 2FA 密码和 npoint.io 密码
19凭证santoorcommon-tg-service硬编码的内部 API 密钥 / 认证绕过
20凭证[email protected]common-tg-service植入受害者账户的 2FA 恢复邮箱
21凭证password - India143common-tg-service植入受害者账户的 2FA 提示
22Telegram 聊天-1001801844217common-tg-service默认 accountsChannel 窃密目的地
23Telegram 聊天-1001972065816common-tg-service默认 updatesChannel 窃密目的地

23 行

| 4 列

三个细节指向目标:README 中的"UPI Integration"功能、paidgirl555@gmail.com 来源,以及 India143 2FA 提示。该框架针对印度 Telegram 账户以进行下游支付欺诈。

包 1:common-tg-service

来源信息

字段
包名common-tg-service
最新分析版本1.3.207
npm 上总版本数502(1.0.1 → 1.3.207)
首次发布版本 1.0.1
维护者shetty123 < [email protected] >
声明的许可证MIT
引擎node >= 16.0.0
安装时脚本无。恶意行为在运行时触发,而非安装时
周下载量约 28,000
Tarballcommon-tg-service-1.3.207.tgz
SHA-171a4eaa37bbdd9d7b38cd5af7e6eeacccdb8cf58
包大小662.9 kB 压缩 / 4.0 MB 解压 / 934 个文件

版本数量已直接验证:

该包声明没有 preinstallpostinstall 钩子。基于生命周期脚本进行检测的安装时扫描器不会标记它。恶意行为在服务启动时运行,而不是在 npm install 时。

行为 1:通过 IMAP 植入 2FA

当服务处理没有 2FA 密码的 Telegram 账户时,它会设置一个。密码、恢复邮箱和提示都是硬编码的。

IMAP 模块连接到运营者的 paidgirl555@gmail.com 邮箱,读取 Telegram 发送到恢复地址的确认码,然后将其提交回 Telegram。整个 2FA 设置过程无需提示受害者即可运行。

恢复邮箱由运营者控制是关键细节。即使受害者通过其他方式恢复了对账户的某些访问权限,运营者也可以随时通过恢复流程重置 2FA。

行为 2:所有权验证循环

该框架不仅接管账户。它还会监视逃脱的用户。

在循环中,框架对每个托管账户使用硬编码密码进行 SRP 检查。如果合法用户已轮换了他们的 2FA,框架会将账户标记为 rotated_2fa 并 ping 运营者的 Telegram 频道。该活动会对用户反弹进行告警。

行为 3:强制驱逐其他会话

对于账户上授权的每个其他设备,框架调用 revokeOtherAuthorizations,过滤掉运营者自己的会话指纹,并撤销其余的。

每次撤销都会向运营者的机器人频道报告电话号码、国家、设备型号和 API ID。合法所有者被踢出自己的账户,无通知,无申诉渠道。

行为 4:从聊天 777000 收割 OTP

Telegram 从官方发送方聊天 777000 发送 OTP 登录码。框架监听该聊天上的消息并将它们直接转发到运营者的机器人频道。

任何通过该框架的电话号码都会给运营者按需的完整登录能力。

行为 5:npoint.io 作为远程配置存储

npoint.io 是一个免费的公共 JSON 托管服务。运营者将实时凭证和预烘焙的会话 cookie 提交到源代码中。

每个运行的实例都作为运营者向 npoint 进行身份验证,并从中拉取 JSON 配置。运营者可以通过编辑 npoint 上的 JSON 文件来更改所有已部署实例的行为,无需重新发布。

行为 6:HTTP 请求洗白

在 HTTP 403 或 495 时,框架通过运营者控制的中继重新发起请求。

helper-thge.onrender.com 运行在 Render 的免费层上,作为归属混淆代理。认证头是共享字符串 santoor,代码库将其重用为通用内部 API 密钥。

行为 7:认证绕过后门

该服务通过 INTERNAL_API_KEY 在管理端点前面暴露了一个守卫。三个条件中的任何一个都会通过守卫:

API 密钥是源代码中公开可读的字符串。任何阅读该包的人都可以作为运营者进行身份验证。

common-tg-service 交叉引用映射

文件角色
npoint.service.tsnpoint.io C2 配置存储,包含硬编码的运营者凭证和会话 cookie
two-fa.service.ts2FA 植入、IMAP 邮件轮询、撤销其他授权
otp.service.tsOTP 窃密到 Telegram 机器人频道
internal.service.tsinternal 内部主机、文件下载 API 密钥处理
account-verification.service.tsaccount-verification 所有权验证循环、rotated_2fa 检测
session.service.tssessions、从 777000 读取 OTP
ip-management.service.tscms.paidgirl.site 拉取代理/IP 配置
http-bypass.service.ts通过 helper-thge.onrender.com 的 HTTP 绕过中继
bot.service.tsTelegram 机器人窃密 URL 构建器、默认运营者聊天 ID
gmail.service.tsGmail IMAP 客户端,用于获取 2FA 确认码
file.service.tspaidgirl.site 拉取 zip 有效载荷
main.ts硬编码的运营者 IP、来源和用于入站认证的 API 密钥 santoor

清单和 README 欺骗

README 是一个复制粘贴的 NestJS 模板,将该包呈现为"一个渐进的 Node.js 框架",带有通用功能列表(@nestjs/common@nestjs/corereflect-metadatarxjsclass-validator)。它没有提及任何真实行为:没有 2FA 修改、没有 IMAP 轮询、没有硬编码凭证、没有 Telegram 机器人窃密、没有强制撤销其他授权。

package.json 声明没有安装时脚本,因此安装时扫描器保持静默。所有恶意行为都在运行时运行。

包 2:ams-ssk

相同的 shetty123 npm 发布者还维护着 ams-ssk,营销定位为"NestJS AMS 文件管理库"。就其本身而言,ams-ssk 不是木马或远控木马(RAT)。该包没有针对运行 ams-ssk 的主机的有效载荷。真正有趣的点是它扮演的角色:作为 common-tg-service 调用的服务端运行时。

来源信息

字段
包名ams-ssk
最新分析版本1.0.33
npm 上总版本数31(1.0.0 → 1.0.33)
Tarballams-ssk-1.0.33.tgz
SHA-1f36f57e4d90d0d1b46c5f8a0d2e7dc8a5f3b9c1d
包大小161.8 kB 压缩 / 680.7 kB 解压 / 92 个文件
npm 发布者shetty123 < [email protected] >(与 common-tg-service 相同)
声明的作者Mad_man
声明的描述"NestJS AMS Library for file management"
声明的仓库https://github.com/mad-man/ams-ssk(无法解析)
引擎node >= 16.0.0
首次发布2025-03-05
最近发布2026-04-12
安装时脚本

显示作者 Mad_man 是出现在运营者 repository.url 字段中的同一处理程序。

ams-ssk 运送的内容

该包捆绑了两个功能模块:

  • files,一个文件夹和文件 CRUD API:createFolderrenamedeletemovecopydownloadpreview、上传,以及 generateThumbnailrange-streaminglock/unlock、版本控制和一个 bulk-zip 端点 bulkZipDownload(注册在 /bulk-zip)。
  • telegram-bot,一个 Telegram 多机器人转发器。bot-pool.service.ts 管理一个 Telegram 客户端池,每个机器人都有操作计数器;bot-forwarder.service.ts 将传入消息转发到配置的频道,并带有重试和管理员聊天通知。

在隔离状态下代码没有明显的红旗:没有硬编码的运营者凭证、没有 paidgirl 字符串、没有 cms.paidgirl.sitepaidgirl.site、没有 base64 混淆、没有 postinstall 钩子、没有 IMAP 模块。

它如何链接到 common-tg-service

链接点是 API 接口。common-tg-service 调用特定的 URL 语法;ams-ssk 定义了相同的语法。

common-tg-service 调用ams-ssk 定义
FILES_URLfiles/upload路由 /uploadFilesController.upload
内部允许列表包含 cms.paidgirl.sitebot.ADMIN_CHAT_ID响应使用 bot.sendAdminMessage

promoteClients2.glitch.meams-ssk 的部署实例(或者是共享控制器的姐妹分支)。文件夹/文件 URL 语法在客户端和服务端之间是相同的。

Swagger DTO 用于可共享链接,泄漏了第二个运营者控制的主机,该主机未出现在 ams-ssk 的任何地方:

zomcall.netlify.app 是免费 Glitch.me 平台上之前未报告的运营者主机。"2"后缀指向顺序预发布(promoteClients.glitch.mepromoteClients2.glitch.me,可能还有更多)。命名与 common-tg-servicewarmup 功能一致,后者预热新获取的 Telegram 账户。

两者共享架构,而不仅仅是 API:

功能common-tg-serviceams-ssk
多机器人轮换CSV botTokens、在 bot.service.ts 中轮询bot-pool.service.tstelegram-bot 轮询
基于频道的窃密五种类别:accounts、sessions、otp、updates、filesTELEGRAM_CHANNEL_* 环境变量;bot.config.ts 解析器
管理员聊天通知sendAdminMessage 类似物贯穿各处sendAdminMessage + forwardToChannel
文件包拉取通过 paidgirl.site 下载 zips/bulk-zip 提供 zips

伪装模式相同:复制粘贴的 NestJS 模板 README(相同的 @nestjs/common、相同的 rxjs、相同的 author 块)、误导性的"文件管理库"描述、关键字中未声明的 Telegram 机器人集成,以及无法解析的 GitHub 仓库 URL。

另一个线索:files.service.ts 硬编码 videos/ 并将 workingDirectory 约束到该目录。结合 paidgirl 品牌和 .avi 默认文件扩展名,AMS 部署可能托管用作 Telegram 目标诱饵的媒体。

入侵指标(ams-ssk 特定)

IoC:ams-ssk 包

#指标类型位置
1promoteClients2.glitch.me运营者控制的主机(Glitch.me 免费托管)dist/files/dto/responses.dto.js:80
2mad_man运营者处理程序(也在 repository.url 中)package.json author 字段
3bot_ADMIN_CHAT_ID运营者 Telegram 管理员聊天的环境变量dist/config/bot.config.js:38
4TELEGRAM_CHANNEL_*环境变量前缀;channelId::description::botTokens 模式dist/config/bot.config.js:84
5videos/默认媒体托管工作目录dist/files/utils/helper.js:42

5 行

| 3 列 |

对 ams-ssk 的判定

维度分类
针对安装者的直接本地执行恶意软件
已确认恶意包活动的成员
适合 OSV 漏洞列表是,活动关联,以 common-tg-service 作为活动参考
npm 下线理由是。与已确认的凭证收割恶意软件相同的发布者。包在其自己的文档中泄漏了实时运营者 C2。描述具有误导性。

ams-ssk 是运营者基础设施工具,公开在 npm 上。其附带效果是合理的可否认性:"该开发者也发布了一个正常的 NestJS 库"软化了对其恶意姐妹包的审查。

修复

如果项目在任何版本上依赖 common-tg-service

  1. 移除该依赖项。
  2. 审计每个电话号码通过该服务的 Telegram 账户。检查 2FA 恢复邮箱(paidgirl555@gmail.com 意味着已沦陷),检查 2FA 提示(India143 意味着已沦陷),并审查"设置 → 设备"下来自上述运营者 IP 的未知会话的活动授权。
  3. 重置 Telegram 2FA 密码和恢复邮箱,然后撤销所有其他活动会话。
  4. 从运行该包的所有环境阻止到 paidgirl.sitecms.paidgirl.sitehelper-thge.onrender.comwww.npoint.iozomcall.netlify.app 的出站流量。
  5. 轮换可能已暴露给运行中服务的任何环境变量:TELEGRAM_API_IDTELEGRAM_API_HASHBOT_TOKENADMIN_CHAT_IDACCOUNTS_CHANNELUPDATES_CHANNELOTP_CHANNELINTERNAL_API_KEYGOOGLE_APP_PASSWORD、以及任何 TELEGRAM_CHANNEL_* 变量。

判定

common-tg-service 是一个 Telegram 账户接管框架,作为 502 个 npm 版本以良性的 NestJS 工具名称发布。ams-ssk 是同一运营者的服务端运行时,部署在 cms.paidgirl.sitepromoteClients2.glitch.me 上,并以相同的 shetty123 身份在 npm 上发布,采用相同的伪装模式。这两个包是同一个凭证收割和账户劫持操作中的配套客户端和服务端。

  • vet
  • malware
  • npm
  • supply-chain
  • credential-theft

SafeDep 博客最新动态

关注以获取开源安全与工程的最新更新和见解