我如何在下载按钮中发现价值30万美元的秘密

发布: (2026年2月4日 GMT+8 16:05)
10 min read
原文: Dev.to

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🟠 HighAnalytics logging everything.
ML Inference Endpoints🟠 HighCloud 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万美元发布此应用的工程师……我们应该聊聊。

作者是一名安全研究员,就像在地上捡到钱包的人是“侦探”。

私信随时开放。欢迎提供披萨推荐。

Back to Blog

相关文章

阅读更多 »

安全是关于安全失效的

系统会出现故障。人们会犯错。安全并不是假装不会出现这些情况,而是确保故障是可承受的。良好的安全设计:- l...

复杂性很容易。简洁需要努力。

添加 code 感觉很有成效。删除它感觉很冒险。但 complexity 会自然增长。必须捍卫简洁。伟大的工程师通过以下方式对抗 entropy:- 删除…

软件质量的视角

软件质量的不同视角 软件质量——或任何产品的质量——可以从多个视角进行审视,因为不同的利益相关者带来……