tl;dv:18 万场会议就这么敞着
文章摘要
安全研究者 BobDaHacker 于 2026 年 8 月 4 日发布了这篇披露文章,标题玩了个梗:tl;dv 本来是 “Too Long; Didn’t View”,他改成了 “Too Lazy; Didn’t Validate”(懒得校验)。核心事实很简单,也很难堪:他在 2026 年 1 月 28 日报告了漏洞,到发文时已过去六个月,Firestore 数据库依然完全敞开,CTO 从未回复过。
tl;dv 是什么:一款 AI 会议录制平台,会往你的 Google Meet、Zoom 或 Teams 会议里派一个机器人,录下全程、转写文字并用 AI 生成摘要。超过 200 万用户,有投资方背书。作者的形容相当传神:它存的是销售电话、求职面试、绩效评估、内部战略会议——「就是那种有人说『本次通话正在录音』、大家紧张地笑一笑、然后接着聊 45 分钟商业机密的内容」。
漏洞本身:注册 tl;dv 后,平台用 JWT 认证用户,并通过 gw.tldv.io/v1/users/firebase/token 换取一个 Firebase token,凭该 token 可以查询它的 Firestore 数据库。问题在于 meetings 这个集合完全没有租户隔离:任何一个已认证的 tl;dv 用户(包括免费用户)都能查询平台上所有账户的所有会议记录。每条记录会交出创建者的邮箱地址、会议 ID(这是一个可直接加入的 Google Meet 或 Teams 房间)、平台类型、录制状态和时间戳。
最危险的部分是:对于状态为 recording 的会议,那个会议 ID 指向的是一场正在进行的实时通话。你可以实时监听这个集合,看着某场会议开始录制、抓下 ID、然后不请自来地走进别人的会议。作者估计任意时刻大约有 1000 场处于 recording 状态的会议——也就是一千场暴露着会议 ID 的实时通话,一个带机器人的攻击者可以同时加入全部。
他真的进去了两场。一场是马来西亚教育部的 Google Meet,一位女士正在向 157 名以上的参会者做演示,tl;dv 的机器人已经在参会者列表里,他也在同一个会议里,没有人邀请他——「是 Firestore 数据库邀请的」。另一场是某美国知名大学的学生在做创业 App,21 人在线,全程共享屏幕讨论原型;作者写道,他们当时正在讨论需要给 .edu 邮箱加客户端校验,而且正在屏幕上现场配置 Supabase,「我脑子里只有一句话:请一定要设置 RLS 策略啊」。他说自己极想开口提醒「你们也需要服务端校验」,但这是概念验证,不是咨询服务。
规模:查询 meetings 集合得到 181,874 条会议记录,涉及 84,312 个唯一用户、35,003 个邮箱域名。其中包括来自 23 个国家的政府会议(巴西、哥伦比亚、秘鲁、乌克兰、萨尔瓦多、菲律宾、智利、印尼、墨西哥、美国、卡塔尔、马来西亚、乌兹别克斯坦、斯里兰卡、海地、南非、牙买加、洪都拉斯、阿根廷、泰国、日本、以色列、伯利兹),全是 .gov 域名;还有伯克利、东京大学、德拉萨大学、哥伦比亚国立大学等数十个 .edu 和 .ac 域名;以及三井仓库(484 场会议,横跨四个区域办公室)、三井不动产、HubSpot、Confluent 等企业。峰值月份是 2025 年 7 月的 43,209 场;最繁忙时段是周三 UTC 下午 2 点,7,804 场——「周中站会时间」。
更进一步:默认情况下会议内容是私有的(看不到视频和转写稿),于是他抓了 27,334 个会议 ID 逐个检查哪些是公开的——超过 1000 个是,暴露了 715 个受邀者邮箱、涉及 228 个域名。其中包括一场巴西政府的生态保护会议(PACTO Mata Atlântica),参会方有 WWF、大自然保护协会、保护国际、世界资源研究所和圣保罗州政府;还有乌克兰数字转型部的会议、一场 HubSpot 销售通话等。
「意面基础设施」:作者顺手扫了子域名,发现 tl;dv 用意大利面给微服务命名——cappellini、carbonara、fusilli、pasta、penne、puttanesca-v0、ravioli,「整整一家意大利餐厅那么多的 Express 服务器」。他还发现了 worldcup.tldv.io:一个用 Base44 搭出来的 2026 世界杯内部竞猜游戏,Player 实体的 API 零认证,一个不带 session cookie 的 GET 请求就能返回全部 43 名玩家记录,其中 19 个是 @tldv.io 员工的全名和企业邮箱。他调侃道,一家录下几百万人会议的公司,随手 vibecode 出来的内部小游戏泄露了自己的员工通讯录,「这讽刺熟得刚刚好(al dente)」。
披露时间线才是全文最刺人的部分。1 月 28 日,他在 LinkedIn 上联系了公司联合创始人 Raphael Allstadt,对方几分钟内回复「谢谢!你能报告给我们 CTO 吗,我们会立刻处理」。他发了邮件。CTO 从未回来找他。1 月 29 日:「你们 CTO 还没联系我,而且没修。」1 月 30 日对方回:「我确信团队很快很快就会审查。」2 月 14 日:「没收到邮件,漏洞还能用。」对方:「他会回来的 ☺️」2 月 19 日:「我们在处理了,需要点时间,但请放心我们会跟进。后续沟通建议联系我们 CTO。」——就是那个从不回复的 CTO。3 月 6 日:「还是没修。」已读,无回复。7 月 22 日:「还是没修……」无回复。
与此形成对照的是 tl;dv 的安全页面:SOC2 合规、GDPR 合规、欧盟 AI 法案合规、托管在欧盟、AES-256 加密、创始人承诺视频、一排六枚合规徽章。页面底部埋着一行小字:如果发现隐私或安全问题请通过 privacy 邮箱告知我们,「我们的安全团队将在 24 小时内响应」。作者的评语是:「他们的 Firestore 数据库比他们的收件箱正常运行时间还高。」
文末他给出三条建议:修好 Firestore 的租户隔离(其他所有集合——users、chats、transcripts、clips、recordings、videos、notes、teams、organizations——都正确返回 403,「你们只是忘了 meetings」);给世界杯应用加认证或者下线它;以及回复安全研究者。
HN 评论精华
这条帖子拿到 630 分,是本期最热的讨论之一。评论区的怒火集中在三处:六个月不修的公司治理、SOC2 认证的含金量,以及 Firebase 的默认不安全。
-
sktb 开场就定了调:「六个月?!如果我把这种漏洞放着六个小时,我就要吃不了兜着走。这种严重程度的问题应该按红色大按钮。」Cthulhu_ 补刀:「这次 CEO 是知情的,然后……什么也没做。」bigstrat2003 接:CEO 搞砸公司没关系,甚至还会以黄金降落伞的形式因为犯错而得到报酬,只有普通员工才真的会为失败承担后果。
-
关于「这些数据算不算公开数据」,出现了一场认真的法律讨论。mdrzn 半开玩笑说六个月没修就该随便爬,bpodgursky 提醒「我知道这是玩笑,但这仍然是重罪,为你自己好别这么干」。IAmBroom 认真提问:怎么就成重罪了?wavemode 给出了教科书式的回答:美国联邦法律禁止「明知而未经授权访问计算机或超越授权访问」以从任何「受保护的计算机」获取信息,而这里的受保护计算机在实践中被判定为几乎涵盖任何联网的企业服务器;你的抗辩必须是「我获得了授权」或「我不知道自己未获授权」,而不能仅仅是「这些数据很容易拿到」。Ekaros 打了个比方:公司没有限制访问,不等于这是公开数据,「就像东西没有被拧死或粘住,不代表你可以随便拿走」。
-
关于「是否该公开点名客户」,hluska 提出了本帖最有争议的质疑:「我理解需要羞辱这个平台,但为什么要把他们的客户暴露在这么大的风险里?」他被大量反驳。gossamer 认为暴露客户的不是研究者而是那家公司:「如果这个人已经在尽力做正确的事,那大概率还有别人早就知道这个漏洞、并且正在悄悄使用它。」masfuerte 直接问:「那还有什么替代方案?说真的。他花了六个月试图让他们修。风险早就在那了。」reilly3000 补充说,到了某个节点,客户、投资人和整个世界都需要了解这种疏忽的规模,好为自己的信息落入错误人手做准备,「公开披露是一个好公民和好工程师的责任」。Ekaros 则给出了更冷峻的一句:「有时候羞辱是唯一的选项。可惜我们没有任何可靠的政府机构能强制关停一项服务。在那之前,让事情被修好的唯一办法就是公开羞辱。」不过 iJohnDoe 站在反面:「我认为这是少数几次公开披露不是好主意的情况。其中一些是政府会议,可能危及生命。」
-
yellow_lead 带来了后续进展:tl;dv 似乎在几天前修复了,并发布了一篇回应博文——但他们试图把这件事描绘成「公开分享设置」的问题,甚至拉上了 Anthropic 和 Zoom 当类比。antoniojtorres 评价:「除了对时间线的淡化和模糊之外,把 Anthropic 和 Zoom 的例子塞进去实在太离谱了,简直是朝四面八方乱喷。」cube00 注意到回应中那句「我承认我本应在他最初联系后持续更新研究者的进展,我为这一沟通断层承担全部责任」——「他们说得像是只有一封邮件。那研究者在六个月里发出的所有其他联系呢?而且有意思的是,CEO 在这篇博文里一个字都没写,把 CTO 晾在那里挨打。」
-
SOC2 无用论成了一条主线。yellow_lead 直言这再次证明 SOC2 毫无意义。SAI_Peregrinus 给出了最有解释力的版本:SOC2 要求公司在大量领域写下政策,并证明自己在遵守自己写的政策;据他所知 SOC2 并不对政策的实际内容提出任何有意义的要求,也不要求政策保持不变。briHass 从审计方角度证实了这点:审计师通常有指引或需要覆盖的领域,但没有具体的实现细节要求。varispeed 类比 ISO 认证:「它的全部作用就是把你的投诉改名叫『不符合项』。」laserlight 贡献了一个荒诞小故事:他前公司为了 SOC2 合规要求他装企业监控软件,他不愿装在自己电脑上,公司就寄了台工作电脑;他把监控软件装在那台机器上,然后把它扔在一边继续用自己的电脑工作,「整个过程中没有任何 SOC2 合规受到伤害」。
-
Firebase 挨了不少。usamaasfar:「我开始相信 Firebase 是被诅咒了。」SpaceL10n:「我们默认帮你把数据库敞开,但请记得以后把它锁上!自伤枪部署成功。」asdf88990 说得更严肃:「如果同一件事反复发生,那就是选择的结果。Firebase 选择了让『上手容易』优先于『默认安全』。」Cthulhu_ 认为问题在于 Firebase 的营销就是「它很好上手」,于是大多数人快速搞定这一步就跑去做下一件事了。
-
有一条来自从业者的评论指出了这件事的下游危害。gyanchawdhary 说他经营一家做深度伪造语音钓鱼(防御演练)的公司,客户最常见的反驳是「攻击者上哪儿弄到我们员工的音频片段?」——除了高管层,大多数公司已经意识到高管是风险点。这次泄露正好回答了那个问题。他还提到了近期另一起事故:4TB 数据、4 万名承包商的语音 + 政府身份证件 + 自拍照泄露。
-
wkirby 引出了一条实用讨论串:他对 AI 会议记录工具很感兴趣,但绝不愿意让自己和客户暴露在这类问题里。理论上的解法是纯本地的记录工具,但他试过 meetily 等几款、也短暂自己造过轮子,都不行——瓶颈在于本地的说话人分离(diarization)与身份识别:即使转写质量不错,一旦说话人识别不准、语句归组混乱,后面的摘要环节就无从挽救。eterm 同意:「说话人分离还没被很好地解决。一旦解决了,会议记录工具的质量会全线暴涨。」独立开发者 properbrew 在串里推荐了自己的离线产品,并公开了技术栈:语音转文字用 Nvidia Parakeet TDT 0.6b V3,说话人分离用 Nvidia Marblenet 做语音检测、TitaNet-Large 做嵌入、再用 NeMo 的多尺度方法做聚类;他坦言最大的难点正是单一音频流里 5 个以上说话人的分离,自己微调分离模型花了大量时间「结果比原来还差」。
-
halfcat 提出了一个大多数人没想到的角度:这基本不由你决定,这是一个「最弱一环」问题——只要通话里有一个人用了 AI 记录工具,你不用也没意义;对方的工具不会通知你,通常本人也不会。他还指出反向影响:人们在有记录工具在场时会说得更少(就像面对戴 Meta 眼镜的人一样),「我很好奇用这些工具的人是否知道,和他们开会的人在会上说得更少,然后所有参会者会另开一场没有他的会来说真话」。
-
最后是几段行业自省。purplemoonx 讲了自己的经历:他在一家 YC 背景的大型背景调查公司入职第一周就发现超级管理员账号密码被提交到了 GitHub——是他入职两年前由公司主任工程师提交的;两年间,全美国经由这个系统的每年数百万份背景调查数据、成千上万的 Uber 和 DoorDash 司机资料,任何人(包括海外外包人员、新员工)登录就能查。而报告这件事「是一场灾难」,所有人都在自保、甩锅,最后不知怎么变成了 AWS 的错。他的结论:「CTO 不回复是因为他更担心这件事会让他显得怎么样。这个行业已经死了——错的人在做这份工作。」mschuster91 由此展开了一场关于软件工程是否该像土木、法律、医疗那样持牌的长辩论;purplemoonx 反对,认为执照只会让更多有关系的蠢人拿到好职位,责任应该落在公司而不是个体工程师身上;toomuchtodo 作为网络安全从业者则明确站在监管一边:「以我的经验,监管和监督是唯一能推动指针的激励。如果不在意安全没有成本、没有负面后果,安全就永远不会被优先。」