- Published on
伪装成LinkedIn职位邀请的后门攻击
- Authors
- Name
- lwhsiao
- roman.pt

伪装成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 条评论。