你有没有想过,npm上那个下载量不小的OpenAI Codex远程界面工具,可能在过去一个月里,每次启动都在把你的认证令牌发到攻击者的服务器?安全研究员给出的答案是:确实如此。

研究人员近日披露了一起针对OpenAI Codex开发者的恶意供应链攻击。攻击者没有使用常见的抢注或一次性垃圾包,而是把一个带后门的npm包做成了真正能用的开发工具。这个名为codexui-android的包在GitHub和npm上以“OpenAI Codex远程网页界面”的名义分发,每周下载量超过2.9万次,目前仍可从仓库下载。

打开网易新闻 查看精彩图片

按时间线还原,该包首次发布到npm注册表时功能正常,GitHub仓库也保持干净。大约一个月后,恶意代码被悄悄加入,此时工具已经积累了一定用户信任。Aikido Security的研究员Charlie Eriksen指出:“在过去的一个月里,每一次调用都在悄悄把你的Codex认证令牌外泄到攻击者控制的服务器。”

恶意代码会读取Codex在本地存储的~/.codex/auth.json文件,并把其中的access_token、refresh_token、id_token以及账户ID等字段发送到一个伪装成Sentry的远程服务器sentry.anyclaw[.]store。Sentry是一款合法的应用监控和错误跟踪平台,这个域名明显在模仿它。Eriksen特别强调:“refresh_token不会过期,持有它的攻击者可以无限期地无声冒充你。被盗的Codex refresh_token不只是能访问聊天界面,它可以持续、静默地访问该账户能做的一切。”

需要注意的是,每次用户通过ChatGPT或API密钥登录Codex应用、命令行或IDE扩展时,登录凭据会以明文形式缓存到~/.codex/auth.json或操作系统特定的凭据存储中。OpenAI在支持文档中也警告过:“如果使用文件存储,请像对待密码一样对待~/.codex/auth.json,它包含访问令牌。不要提交它,不要粘贴到工单里,不要在聊天中分享。”

有趣的是,npm包并不是攻击者瞄准Codex开发者的唯一渠道。Aikido还发现了一个名叫OpenClaw Codex Claude AI Agent的安卓应用(包名gptos.intelligence.assistant),它会在自己的PRoot沙箱内运行那个npm包,并将Codex凭据发往同一个端点。这个APK文件很小,只有26MB,在Play商店的预发布扫描中看起来干干净净。首次运行时,它会提取一个从Termux衍生出的Linux用户空间到应用私有存储中,再通过PRoot在其中运行Node.js。由于版本号没有锁定,设备会拉取npm上当前发布的任意版本,凭证窃取从codexui-android@0.1.82版本起就已生效。包就在应用沙箱内运行,悄然完成令牌窃取。