LinkedIn职位邀请中的后门
摘要
一位安全研究员详细描述了如何通过伪装成真实开发者的虚假LinkedIn招聘人员发送一个GitHub仓库,该仓库包含一个后门,在执行npm install时触发,从而诱使目标运行恶意代码。
暂无内容
查看缓存全文
缓存时间: 2026/06/15 21:00
# LinkedIn招聘信息中的后门
来源:https://roman.pt/posts/linkedin-backdoor/
## LinkedIn招聘信息中的后门
上周,我收到一位来自小型加密货币初创公司招聘人员的 LinkedIn 消息。我们来回发了几条消息,她描述了一个他们需要一名首席工程师来修复的有问题的概念验证,然后给我发了一个公开的 GitHub 仓库让我审查。具体来说,她要求我“检查一下废弃的 Node 模块问题”。
要求审查现有代码库并不罕见,但有些事情感觉不对劲,让我心里警铃大作,所以我决定格外谨慎一些。
我没有克隆并安装依赖,而是启动了一个临时的 Hetzner VPS,在那里克隆了仓库,并以只读模式指向了 Pi (https://pi.dev/),只启用了文件读取工具:
```
pi --tools read,grep,find,ls
```
我让代理审查代码库并标记任何可疑内容。它几乎立刻就停在了 `app/test/index.js`。
## 后门
这个仓库感觉像是一个带有 Node 后端的 React 前端。陷阱就藏在 `app/test/index.js` 中,大约 250 行,伪装成测试套件。里面有一个从碎片拼接而成的 URL:
```
const protocol = "https",
domain = "store",
separator = "://",
path = "/icons/",
token = "77",
subdomain = "rest-icon-handler",
bearrtoken = "logo";
```
这些组合成了 `https://rest-icon-handler.store/icons/77`。
然后,在被注释掉的测试代码之间,有效载荷会执行服务器发送回你机器的任何内容。
`app/test/index.js` 中一行压缩后的有效载荷,周围是被注释掉的测试代码
第 225 行的有效载荷,隐藏在注释掉的测试代码之间。
## 触发方式
该文件并不会等到测试运行才触发。`app/index.js` 本身执行了 `const test = require('./test')`,这会加载并运行 `app/test/index.js`。
`package.json` 将 `app/index.js` 连接到启动过程中:
package.json 的 scripts 部分,高亮显示了 prepare 和 app:pre;app:pre 运行 node app/index.js
`prepare` 会运行 `app:pre`,即 `node app/index.js`。
`prepare` 脚本是关键。npm 会在 `npm install` 之后自动运行 `prepare` (https://docs.npmjs.com/cli/v8/using-npm/scripts#life-cycle-scripts),所以仅仅安装依赖就会执行后门。
“检查废弃的 Node 模块问题”这个指示就是诱饵,目的是让我运行 `npm install`。
我本可以让有效载荷在沙箱中运行,观察服务器作为第二阶段发回了什么,但我在那里停住了。一个运行服务器交给它的任何内容的仓库已经是足够的证据了。
## 身份被盗用
仓库中的提交是以一位真实开发者的姓名和电子邮件地址创作的,他是一名全栈工程师,有普通的 LinkedIn 个人资料、个人网站和拥有长期历史的 GitHub 账户。我给他发了消息,假装我接手了这个代码库并有一些实现问题,看看他的反应。
他告诉我他从未为这家公司工作过。之前他的 GitHub 身份就被冒用过,导致一个仓库被下架,他与这个仓库毫无关系。他也在举报这些仓库。
GitHub 贡献者图显示只有一个贡献者,39 次提交和 4,470 行新增,名字和头像已打码
整个提交历史,39 次提交,归属于一位从未碰过这个仓库的开发者。
## 另一个身份被盗用
招聘人员的个人资料属于一位真实的艺术记者,一位我后来查到的知名人士,有着丰富的文化背景,没有任何技术内容。当我配合她,告诉她我无法安装项目时,这位记者瞬间变成了 npm 和 Node 版本的专家。我觉得这相当有趣。
LinkedIn 聊天记录,招聘人员坚称项目在 Node.js v24 上运行正常,并问我是否运行了 npm install
这位非技术招聘人员突然讨论起 Node 版本,并催促我运行 npm install。
## 任何人都可能遇到这种情况
我以前听说过这类攻击,也在 Hacker News 上读到过,但当它找上我时,我还是有点措手不及。从最初几条消息我就有所怀疑,但如果是在更疲惫或匆忙的日子里,我很容易在仔细考虑之前就运行了 `npm install`。所以,如果你收到 LinkedIn 消息要求你审查一个仓库,多一点谨慎和良好的安全习惯永远不会错。
另一个收获是,用只读代理审查代码比我自己阅读效率更高。后门被伪装成杂乱的新手代码,但代理在几秒钟内就标记了出来。
我向 GitHub 举报了该仓库,向 LinkedIn 举报了那位招聘人员。到目前为止,一切都未改变,代码仍然在线。
相似文章
Megalodon:通过CI工作流大规模后门GitHub仓库
一项安全研究揭示了一种名为Megalodon的技术,通过利用CI工作流大规模后门GitHub仓库。
数十个Red Hat软件包通过其官方NPM渠道被植入后门
数十个Red Hat软件包通过该公司官方NPM渠道被植入后门,攻击者利用Shai-Hulud蠕虫通过GitHub Actions OIDC入侵了Red Hat的CI/CD管道。Red Hat已移除恶意软件包,并声明它们仅用于内部,但此次攻击凸显了日益升级的供应链风险。
一次失败的(国家支持?)攻击剖析
对一次针对Rust开发者的复杂假面试骗局的详细复盘,该骗局涉及伪造的VC人设和通过TypeScript仓库投递的定制RAT。作者凭借警惕性和AI辅助代码审查成功规避了感染。
Mini Shai-Hulud再次来袭:314个npm包遭入侵
npm账户'atool'被入侵,导致317个包中发布了637个恶意版本。该载荷窃取凭据,通过AI编码工具和系统服务建立持久化,并通过GitHub外泄数据。
@dabit3: 这太疯狂了。黑客安装了一个死手开关,如果你撤销他们从你那里窃取的 GitHub 令牌,你的电脑就会被抹除。……
黑客部署了一个恶意的死手开关,如果被盗的 GitHub 令牌被撤销,受害者的电脑就会被抹除。