BlackHalo logo
Published on

伪装成LinkedIn职位邀请的后门攻击

Authors
  • Name
    lwhsiao
    roman.pt
一位开发者查看笔记本屏幕上的代码,旁边LinkedIn消息界面显示可疑招聘信息
头图来源: 来源页面

伪装成LinkedIn职位邀请的后门攻击

上周,一位名为Roman的Python开发者收到了一条来自LinkedIn招聘人员的消息。对方声称来自一家小型加密初创公司,需要一名首席工程师来修复一个已被破坏的概念验证项目。经过几天的沟通,招聘人员发送了一个公开的GitHub仓库,要求他“检查已弃用的Node模块问题”。

警惕与隔离环境

虽然要求审查现有代码库并不罕见,但Roman觉得有些不对劲,决定更加谨慎。他没有直接克隆仓库并安装依赖,而是在Hetzner上启动了一个临时的VPS(虚拟专用服务器),以只读模式克隆了仓库,并使用只启用了文件读取工具(如grep、find、ls)的AI代理Pi来审查代码。

  • 代理立即在app/test/index.js文件中发现了可疑之处。
  • 该文件约250行,伪装成一个测试套件。

后门的工作原理

后门隐藏在测试文件中。代码将部分URL片段拼接成一个完整的地址:https://rest-icon-handler.store/icons/77。然后,在注释掉的测试之间,第225行隐藏了一个有效载荷,它可以执行服务器发送回计算机的任何命令。

触发机制非常巧妙:

  • app/index.js通过const test = require('./test')自动加载并执行app/test/index.js
  • package.json中的prepare脚本会在npm install后自动运行,从而执行app/index.js
  • 招聘人员要求“检查已弃用的Node模块问题”正是为了诱使开发者运行npm install

这意味着只需安装依赖,后门就会自动执行。

被盗用的身份

深入调查后,Roman发现仓库的提交记录使用的是一位真实开发者的姓名和邮箱。该开发者拥有普通的LinkedIn档案、个人网站和GitHub账户。Roman伪装成接手代码库的人,联系了这位开发者,对方表示从未为这家公司工作过,之前曾遭遇过GitHub身份冒充,并已向平台举报了该仓库。

同样,招聘人员的档案也属于一位真实的、知名的艺术记者,其背景完全不涉及技术。当Roman假装无法安装项目时,这位“记者”立刻变成了精通npm和Node版本的专家。

经验教训

Roman表示,虽然听说过这类攻击,但亲身经历时仍感到意外。在疲惫或匆忙的日子里,开发者很容易在没有仔细检查的情况下直接运行npm install。他总结了几点经验:

  • 对于LinkedIn上要求审查仓库的消息保持警惕和良好的安全习惯。
  • 使用只读AI代理审查代码比自己阅读更高效,能快速识别伪装成新手代码的后门。
  • 他已向GitHub和LinkedIn举报了该仓库和招聘人员档案,但截至发稿时,内容仍未被移除。

这起事件再次提醒所有开发者,社交媒体上的招聘信息可能隐藏着精心设计的攻击。

原标题:A backdoor in a LinkedIn job offer。 HN 原始发布时间:2026年6月16日星期二。当前记录为 1499 分、282 条评论。

阅读原文 · 查看 HN 讨论