我如何在下载按钮中发现价值30万美元的秘密
Source: Dev.to
请提供您希望翻译的正文内容(除代码块和 URL 之外的文本),我将为您翻译成简体中文并保持原有的格式。
Introduction
它开始了,和大多数灾难一样,源于轻微的好奇心和一个空闲的下午。
我下载了一个应用程序。不是因为我是黑客。不是因为我在进行企业间谍活动。也不是因为我知道自己在干什么。我下载它是因为我想使用它。
革命性的概念,我知道。
安装程序是一个 .exe 文件。对外行来说,这相当于一个包装好的礼物。就像互联网上陌生人送来的礼物,我决定把它拆开。
“里面有什么?”我想,像孩子在用锤子砸钟之前好奇里面有什么一样。
事实证明,每个现代桌面应用程序其实只是一个冒充软件的网站。这就像发现你的“自制”餐点其实是从冷冻袋里拿出来的——技术上是真实的,哲学上却令人失望。
这个特定的应用是用 Electron 构建的,这意味着内部有一个名为 app.asar 的文件。把它想象成一个压缩文件,只是它极力想让你相信它 不是 压缩文件。
npx asar extract app.asar ./unpacked
解压后是 JavaScript——成千上万行的压缩、混淆代码,看起来像是有人在键盘上打喷嚏后称之为架构。而在那里,像公园长椅上的钱包一样裸露着的,是一个 .env 文件。
对于那些毫不知情的人来说,
.env文件是开发者存放机密的地方:API 密钥、数据库凭证,这类东西绝对、绝对、绝对不应该在生产环境中发布。
这就是 安全 101。字面意思。它是他们教你的第一件事:
🚨 软件开发规则 #1: 不要提交你的
.env文件。
这不是高级知识,也不是代代安全研究者传下来的神秘智慧。这是软件开发中的“上完厕所后洗手”常识。然而……它就在那儿,闪闪发光。未加密。充满凭证。
我不会点名,也不会指责。我只会像自然纪录片描述狮子捕食羚羊一样,客观而略带惊恐地描述我所发现的。
发现
| 项目 | 严重程度 | 我的反应 |
|---|---|---|
| API Keys | 🔴 Critical | 多个。活跃。代价高昂。 |
| Infrastructure URLs | 🔴 Critical | 内部端点。绝不公开。 |
| Service Credentials | 🟠 High | Analytics logging everything. |
| ML Inference Endpoints | 🟠 High | Cloud GPUs go brrrr on their dime. |
总的潜在泄露有多大?可以说已经足够严重,以至于我短暂地考虑过换职业。
现在,事情变得个人化了。
发布这段代码的工程师?根据行业平均水平、地点以及整体技术就业市场的状况,他们的年薪大约是 $300 000。
三。百。千。美元。
这就像把房门钥匙留在门垫下——只不过门垫是透明的,而且你贴了个标示写着 “KEYS UNDER HERE”。
我并不怨恨。我一点也不怨恨。我只是想在记录中说明,我——一个抱有谦逊好奇心的人——在大约 45 分钟 的随意调查(吃剩披萨的同时)中找到了这些。与此同时,在某处,一名高级软件工程师正在收取股票期权。
📍 情节反转: 披萨是凉的,凭证却不是。
在发现了显而易见的漏洞后,我做了任何负责任的研究者都会做的事:继续深入查找。
JavaScript 包已经被压缩,但压缩就像风衣是伪装一样,只是混淆而已。它在技术上隐藏了内容,但只要看超过五秒钟的人就能看到底下的东西。我发现了:
- 🗂️ Source‑map hints 指向内部仓库
- 🐛 Debug symbols 本应被剥离的调试符号
- 📋 Hard‑coded configuration 从开发环境复制粘贴的硬编码配置
- 📡 gRPC definitions 概述整个 API 结构的 gRPC 定义
每一次发现都像打开一个套娃,只是里面的不是更小的娃娃,而是更小的失误。
如果你看到这里,可能在期待一个戏剧性的结局:与公司对峙、漏洞赏金、CEO 的真诚道歉。相反,我想给你更有价值的东西:一堂课。
你的构建流水线不是安全特性。
Electron 应用本质上是带有额外步骤的 zip 文件。
压缩并不是加密。
并且,为了所有神圣之事,请 在发货前检查你到底在发什么。
快速“发货前”检查清单
# Extract the asar archive
npx asar extract your-app.asar ./check-this
# Grep for obvious secrets
grep -r "API_KEY\|SECRET\|PASSWORD" ./check-this
那个你花 300 000 美元雇佣的工程师?也许可以把预算定在 $50 for a security audit。我可以做。我有空。我还有披萨。
你下载的每个应用都是一个神秘盒子。谜团通常是“我的数据被处理得有多糟糕?”答案通常是“糟透了”。
免责声明
- 我没有利用任何漏洞。
- 我没有访问我不该访问的系统。
- 我仅查看了作为用户从官方网站下载的应用程序中提供给我的内容。
我发现的所有内容都位于一个包中,任何人只要花十五分钟并使用搜索引擎就能提取。唯一使用的高级工具是 npm,以及一种模糊的难以置信感。
本文未指名道姓,也未指责任何人,除了已经因在桌面应用中随意提供凭证而受到指责的行为之外。
我仍在使用该应用,它实际上相当不错。我只是带着这样一种安静的认识:在某个数据中心,有一台服务器运行着我本不该知道的端点,通过我技术上可以调用的 API 处理请求,而这些凭证正放在我的 Downloads 文件夹中。
引发这一切的下载按钮天真地位于他们的网站上,愉快地邀请用户安装他们的应用。它下面可能应该有一条免责声明:
“下载此软件即表示您同意接受一次免费的应用安全教育。”
如果您发布 Electron 应用,请检查
- 不应在生产包中包含
.env文件 - 不应出现硬编码的机密(API 密钥、密码、令牌)
- 源映射已被剥离或设为私有
- 调试符号已被移除
- 所有第三方依赖均为最新且已审查
构建检查清单
- 没有硬编码的 API 密钥
- 没有暴露内部 URL
- 生产环境中没有调试符号
- Source maps 未 包含
- 您已经实际检查了
.asar文件
如果您在阅读时在自己的应用中发现了凭据,欢迎。
如果您是那位花了30万美元发布此应用的工程师……我们应该聊聊。
作者是一名安全研究员,就像在地上捡到钱包的人是“侦探”。
私信随时开放。欢迎提供披萨推荐。