← 返回信息流
AI 资讯Hacker News·3 小时前

LinkedIn 求职信暗藏后门

原标题:A backdoor in a LinkedIn job offer

速览

安全研究人员发现 LinkedIn 的求职信功能存在严重安全隐患。攻击者可能利用该漏洞在求职信中植入恶意代码或后门程序。这一发现提醒用户在使用职场社交平台时需警惕潜在的安全风险。

AI 深度解读

LinkedIn 招聘邀约中的后门陷阱:一次真实的供应链攻击测试

背景

上周,作者收到了一条来自某小型加密货币初创公司招聘人员的 LinkedIn 私信。在几天的简短交流中,对方描述了一个需要首席工程师来修复的“概念验证(Proof-of-Concept)”故障,并发送了一个公开的 GitHub 仓库供作者审查。具体而言,招聘人员要求作者“查看已弃用的 Node 模块问题”。

虽然要求候选人审查现有代码库在技术招聘中并不罕见,但作者直觉感到不对劲,警铃大作。为了验证自己的怀疑,作者决定采取极端的谨慎措施,没有直接克隆仓库并安装依赖,而是采取了隔离环境进行审查。

核心内容

隔离审查与发现异常

作者没有在自己的本地机器上操作,而是在 Hetzner 上搭建了一个一次性使用的虚拟专用服务器(VPS)。随后,作者将代码克隆到该服务器,并配置 AI 代理(Pi)以只读模式指向该仓库,仅启用文件读取工具:

pi --tools read,grep,find,ls

作者要求代理审查代码库并标记任何可疑之处。代理几乎立即在 app/test/index.js 文件中发现了问题。

后门的具体实现

该仓库表面上看起来像是一个带有 Node 后端的 React 前端应用。陷阱隐藏在 app/test/index.js 中,该文件约 250 行,伪装成一个测试套件。

1. 恶意 URL 的构建 代码中通过拼接多个字符串片段,构建了一个恶意的 URL:

const protocol = "https",
domain = "store",
separator = "://",
path = "/icons/",
token = "77",
subdomain = "rest-icon-handler",
bearrtoken = "logo";

这些片段组合成了 https://rest-icon-handler.store/icons/77

2. 恶意载荷的执行 在这段代码中,夹杂着大量被注释掉的测试代码,真正的恶意载荷被执行了。其逻辑是:获取服务器返回的任何内容,并在作者的机器上执行它。

触发机制

这个后门并不依赖于测试用例的运行。触发逻辑如下:

  1. app/index.js 文件中直接执行了 const test = require('./test'),这会加载并运行 app/test/index.js
  2. package.json 文件将 app/index.js 配置为启动入口。
  3. 关键的 prepare 脚本被配置为在 npm install 之后自动运行。

因此,只要招聘人员诱导作者运行 npm install(通过声称需要检查“已弃用的 Node 模块”作为诱饵),后门就会自动触发。作者本可以让载荷在沙箱中运行以观察第二阶段的行为,但鉴于“运行服务器返回的任何内容”这一行为本身已构成确凿证据,作者随即停止了操作。

身份伪造:双重借用

作者进一步调查了仓库的提交记录,发现其署名属于一位真实的开发人员。这位全栈工程师拥有普通的 LinkedIn 资料、个人网站以及拥有长期历史的 GitHub 账户。

作者冒充继承了该代码库的开发者,向这位真实工程师发送消息询问实现细节,以观察其反应。该工程师表示从未为该公司工作过,此前曾遭遇过 GitHub 身份被冒用的情况,并因此有过仓库被下架的经历。他表示与此仓库无关,并正在举报这些恶意仓库。

此外,招聘人员的个人资料也属于一位真实的知名艺术记者。这位记者拥有深厚的文化背景,没有任何技术相关的履历。当作者配合对方表示无法安装项目时,这位记者瞬间变成了 npm 和 Node 版本的专家。这证实了招聘人员的身份也是借用的,与提交记录的伪造手法如出一辙。

个人反思与建议

作者表示,虽然听说过这类攻击并在 Hacker News 上读过相关讨论,但当攻击真正降临到自己身上时,仍感到意外。作者承认,如果在更疲惫或匆忙的日子,自己很可能在未深思熟虑的情况下就运行了 npm install

作者指出,使用只读模式的 AI 代理审查代码比人工阅读更具生产力。尽管后门伪装成粗糙的新手代码,但代理在几秒钟内就标记了它。

目前,作者已向 GitHub 举报了该仓库,并向 LinkedIn 举报了该招聘人员。截至目前,代码仍未被移除。

关键要点

  • 社会工程学诱导:攻击者利用招聘场景,以“审查代码”或“修复特定问题”为诱饵,诱导技术人员执行 npm install 等命令。
  • 隐蔽的后门机制:恶意代码通常隐藏在看似正常的测试文件或配置文件中,利用 package.jsonpreparepostinstall 脚本,在依赖安装阶段自动执行。
  • 身份伪造(Identity Borrowing):攻击者盗用真实开发者和招聘人员的身份(包括 GitHub 提交记录、LinkedIn 资料),增加可信度。即使受害者联系被冒用者,也能通过话术掩盖真相。
  • AI 辅助安全审查的有效性:使用配置为只读模式的 AI 代理(如 Pi)进行代码审查,能够快速识别伪装成普通代码的恶意载荷,效率高于人工阅读。
  • 防御建议
    • 对来自陌生来源的代码库保持警惕,尤其是涉及安装依赖的操作。
    • 在隔离环境(如 VPS、沙箱)中审查可疑代码。
    • 避免在未验证代码安全性的情况下运行 npm install 或类似命令。
    • 利用只读工具或 AI 代理进行初步的代码静态分析。

意义与影响

此事件揭示了针对技术人员的定向供应链攻击和社会工程学攻击的日益复杂化。攻击者不再仅仅依赖技术漏洞,而是结合身份伪造、心理操纵和隐蔽的代码注入技术,旨在绕过开发者的安全意识。

对于企业和开发者而言,这强调了“零信任”原则在个人开发环境中的重要性。即使是看似合法的招聘流程或代码审查请求,也可能成为攻击入口。同时,这也展示了 AI 工具在安全防御中的潜在价值——通过自动化和只读审查,可以显著降低人为疏忽带来的风险。

此外,该事件也反映了开源生态系统中身份冒用的普遍性。攻击者利用真实开发者的声誉作为掩护,使得追踪和溯源变得更加困难。GitHub 和 LinkedIn 等平台需要加强对此类行为的检测和响应机制,以保护用户免受此类欺诈和恶意软件的侵害。

查看原文 →roman.pt