目录导航
这篇文章中的漏洞是真实的。故事和人物显然不是。
你很担心你的好伙伴兼联席首席执行官史蒂夫·斯蒂文顿。Steveslist 的生意一直很糟糕,这是你们共同创立的在线市场,人们可以在这里买卖东西,而且没人会问太多问题。Covid-19 大流行对大多数科技行业都一反常态,但对您特定的一小部分则不然。你的董事会指责“昏迷的、猴脑的领导”。你责怪你无法控制的宏观经济因素和懒惰的员工。
无论哪种方式,您一直在尽最大努力让公司维持生计,使您的账簿变得比以往任何时候都更加褐色,并对明显的重罪交易视而不见。但是你害怕你的联合首席执行官史蒂夫变得冷漠。你一直告诉他,摆脱这场风暴的唯一出路就是渡过难关,但他认为这个比喻在这里并不适用,而且他不明白进一步陷入欺诈和浮躁的漩涡是如何从另一面引出的。这让您更加担心 – 史蒂文纳特总是推动更多螺旋上升。一定有什么事情正在发生。
您位于旧金山公共图书馆 19 世纪文学部的办公室距离旧金山联邦调查局总部仅一英里。史蒂夫会骂你吗?当他说他是为了清脑而绞尽脑汁时,他实际上是在为了清心而绞尽脑汁吗?你会跟着他,但他只会在你开会的时候突然出去。
幸运的是,Stevester 是流行的在线约会应用程序 Bumble 的狂热用户,您认为您可以使用 Steve 的 Bumble 帐户找出他偷偷溜到的地方。

这是计划。与大多数在线约会应用程序一样,Bumble 会告诉用户他们之间的距离有多远。这使用户能够做出明智的决定,看看一个潜在的情人是否值得在一个阴冷的星期三晚上骑 5 英里的踏板车,或者冰箱里有一个冷比萨,还有数百万小时他们没有看过的 YouTube。粗略地了解假设的情人有多近是实用且具有启发性的,但 Bumble 不会透露用户的确切位置非常重要。这可以让攻击者推断出用户住在哪里,他们现在在哪里,以及他们是否是 FBI 线人。
简短的历史课
然而,将用户的确切位置保密是非常容易搞砸的。作为上一篇博文的一部分,您和 Kate 已经研究了位置揭示漏洞的历史。在那篇文章中,您试图利用 Tinder 的用户位置功能来激发另一个与此类似的以 Steve Steveington 为中心的场景。尽管如此,已经熟悉那篇文章的读者仍然应该坚持阅读这篇文章——下面的回顾很简短,在那之后事情确实变得有趣了。
作为定位网恋的开拓者之一,Tinder也难免也是定位安全漏洞的开拓者之一。多年来,他们不小心允许攻击者以几种不同的方式找到用户的确切位置。第一个漏洞是平淡无奇的。直到 2014 年,Tinder 服务器向 Tinder 应用程序发送潜在匹配项的确切坐标,然后应用程序计算该匹配项与当前用户之间的距离。该应用程序没有显示其他用户的确切坐标,但攻击者或感兴趣的小偷可以在从 Tinder 服务器到他们手机的途中拦截他们自己的网络流量,并从中读取目标的确切坐标。
{
"user_id": 1234567890,
"location": {
"latitude": 37.774904,
"longitude": 122.419422
}
// ...etc...
}为了减轻这种攻击,Tinder 转而在其服务器上而不是在用户手机上计算用户之间的距离。他们没有将匹配的确切位置发送到用户的手机,而是仅发送预先计算的距离。这意味着 Tinder 应用程序从未看到潜在匹配项的确切坐标,因此攻击者也没有看到。然而,即使应用程序只显示四舍五入到最近的英里(“8 英里”、“3 英里”)的距离,Tinder 仍将这些距离以 15 位小数精度发送到应用程序,并让应用程序在显示它们之前将它们四舍五入。这种不必要的精度使安全研究人员能够使用一种称为三边测量(类似于三角测量但在技术上不相同)的技术来重新推导受害者的几乎准确位置。
{
"user_id": 1234567890,
"distance": 5.21398760815170,
// ...etc...
}以下是三边测量的工作原理。Tinder 知道用户的位置,因为他们的应用程序会定期将其发送给他们。但是,欺骗虚假位置更新很简单,使 Tinder 认为您位于您选择的任意位置。研究人员欺骗了 Tinder 的位置更新,将攻击者用户转移到受害者所在的城市。从每个欺骗的位置,他们询问 Tinder 距离他们的受害者有多远。Tinder 没有发现任何问题,返回了精确到小数点后 15 位的答案。研究人员将这个过程重复了 3 次,然后在地图上画了 3 个圆圈,圆心等于欺骗的位置,半径等于报告的用户距离。所有 3 个圆圈相交的点给出了受害者的确切位置。

Tinder 通过计算和四舍五入其服务器上用户之间的距离来修复此漏洞,并且只向他们的应用程序发送这些完全四舍五入的值。你已经读过 Bumble 也只发送完整的值,也许是从 Tinder 的错误中吸取了教训。舍入距离仍可用于进行近似的三边测量,但仅限于一英里一英里左右的平方范围内。这对您来说还不够好,因为它不会告诉您 Stevester 是在 FBI 总部还是在半英里外的麦当劳。为了以您需要的精确度定位史蒂夫,您将需要找到一个新的漏洞。

你会需要帮助。
形成假设
你总是可以依靠你的另一个好伙伴 Kate Kateberry 来帮助你摆脱困境。你仍然没有为她去年给你提供的所有系统设计建议付钱给她,但幸运的是,她有自己的敌人需要密切关注,而且她也可以很好地利用 Bumble 中揭示的漏洞用户的确切位置。打了一个简短的电话后,她就赶到您在旧金山公共图书馆的办公室开始寻找。
当她到达时,她嗡嗡作响,并且有了一个想法。
“我们的问题”,她说,“是 Bumble 将两个用户之间的距离四舍五入,并且只将这个近似距离发送到 Bumble 应用程序。如您所知,这意味着我们无法以任何有用的精度进行三边测量。然而,在 Bumble 如何计算这些近似距离的细节中,存在着让他们犯错的机会,我们可能会利用这些机会。
“一种看似合理的方法是让 Bumble 计算两个用户之间的确切距离,然后将该距离四舍五入到最近的英里数。执行此操作的代码可能如下所示:
def calculate_approximate_distance(user1_location, user2_location):
# Calculate the exact distance
exact_distance = calculate_exact_distance(
user1_location,
user2_location,
)
# Round it
rounded_distance = math.round(exact_distance)
# Return the rounded distance
return rounded_distance“看似通情达理,但也有危险的不安全感。如果攻击者(即我们)可以找到报告的与用户的距离从 3 英里变为 4 英里的点,则攻击者可以推断出这是他们的受害者距离他们正好 3.5 英里的点. 3.49999 英里向下舍入到 3 英里,3.50000 向舍入到 4 英里。攻击者可以通过欺骗位置请求来找到这些翻转点,使它们大致位于受害者附近,然后在每个点上向一个恒定方向缓慢移动它们的位置询问 Bumble 距离他们的受害者有多远。当报告的距离从(比如)3 英里变为 4 英里时,他们发现了一个转折点。如果攻击者可以找到 3 个不同的翻转点,那么他们将再次获得与受害者的 3 个精确距离,并且可以执行精确的三边测量,

我们怎么知道这是否是 Bumble 所做的?你问。“我们尝试一次攻击,看看它是否有效”,凯特回答说。
这意味着您和 Kate 将需要编写一个自动化脚本,将精心设计的请求序列发送到 Bumble 服务器,让您的用户在城市周围跳跃并反复询问与受害者的距离。为此,您需要解决:
- Bumble 应用程序如何与服务器通信
- Bumble API 的工作原理
- 如何发送更改您位置的 API 请求
- 如何发送 API 请求,告诉您另一个用户有多远
您决定在笔记本电脑上使用 Bumble 网站,而不是 Bumble 智能手机应用程序。您发现检查来自网站的流量比检查来自应用程序的流量更容易,并且您可以使用桌面浏览器的开发人员工具来读取支持网站的 JavaScript 代码。
创建帐户
您需要两个 Bumble 配置文件:一个是攻击者,一个是受害者。您将受害者的帐户放置在已知位置,并使用攻击者的帐户重新定位他们。一旦您在实验室中完善了攻击,您将诱使 Steve 匹配您的一个帐户并对他发起攻击。
您注册了第一个 Bumble 帐户。它要求您提供个人资料图片。为了保护您的隐私,您上传了天花板的图片。Bumble 拒绝接受它,因为它“没有通过我们的照片准则”。他们必须进行面部识别。你上传了一张照片,一个男人穿着漂亮的衬衫,指着白板。

Bumble 再次拒绝了它。也许他们正在将照片与库存照片数据库进行比较。您可以使用画笔工具裁剪照片并在背景上涂鸦。Bumble 接受了这张照片!但是,接下来他们会要求您提交一张自己将右手放在头上的自拍照,以证明您的照片确实是您本人。你不知道如何联系库存照片中的那个人,你也不确定他会不会给你发一张自拍照。你尽力了,但 Bumble 拒绝了你的努力。在您通过此验证之前,无法更改您最初提交的个人资料照片,因此您放弃此帐户并重新开始。

您不想通过提交自己的真实照片来损害您的隐私,因此您拍了实习生 Jenna 的个人资料照片,然后再拍一张她右手放在头上的照片。她很困惑,但她知道谁支付她的薪水,或者如果接下来的六个月进展顺利并且有合适的全职职位空缺,至少有一天谁会支付她的薪水。你在营销中拍摄了同样的威尔逊照片?金融?谁在乎。您成功创建了两个帐户,现在您可以开始刷卡了。
尽管您可能不需要这样做,但您希望让您的帐户相互匹配,以便让他们尽可能多地访问彼此的信息。您将 Jenna 和 Wilson 的匹配过滤器限制在“1 英里内”并开始滑动。不久之后,您的 Jenna 帐户就会显示您的 Wilson 帐户,因此您向右滑动以表明她的兴趣。但是,您的 Wilson 帐户一直向左滑动,却没有看到 Jenna,直到最终他被告知他已经看到了他所在地区的所有潜在比赛。奇怪的。您会看到一条通知,告诉 Wilson 某人已经“喜欢”了他。听起来很有希望。你点击它。Bumble 需要 1.99 美元才能向您展示您并不那么神秘的仰慕者。
当这些约会应用程序处于高速增长阶段并且你的幽会由风险投资家支付时,你更喜欢它。你不情愿地伸手去拿公司信用卡,但凯特把它从你手里打掉了。“我们不需要为此付费。我打赌我们可以绕过这个付费墙。让我们暂停让 Jenna 和 Wilson 匹配的努力,并开始调查该应用程序的工作原理。” 永远不要放弃花几块钱的机会,你高兴地同意了。
自动化对 Bumble API 的请求
为了弄清楚应用程序是如何工作的,您需要弄清楚如何将 API 请求发送到 Bumble 服务器。他们的 API 没有公开记录,因为它不打算用于自动化,而且 Bumble 不希望像你这样的人做你正在做的事情。“我们将使用一种名为 Burp Suite 的工具,”Kate 说。“这是一个 HTTP 代理,这意味着我们可以使用它来拦截和检查从 Bumble 网站到 Bumble 服务器的 HTTP 请求。通过研究这些请求和响应,我们可以确定如何重放和编辑它们。这将使我们能够从脚本发出我们自己的、定制的 HTTP 请求,而无需通过 Bumble 应用程序或网站。”

Kate 设置 Burp Suite,并向您展示您的膝上型电脑发送到 Bumble 服务器的 HTTP 请求。她在rando上刷了yes。“看,这是当你在某人上滑动 yes 时 Bumble 发送的 HTTP 请求:
POST /mwebapi.phtml?SERVER_ENCOUNTERS_VOTE HTTP/1.1
Host: eu1.bumble.com
Cookie: CENSORED
X-Pingback: 81df75f32cf12a5272b798ed01345c1c
[[...further headers deleted for brevity...]]
Sec-Gpc: 1
Connection: close
{
"$gpb": "badoo.bma.BadooMessage",
"body": [
{
"message_type": 80,
"server_encounters_vote": {
"person_id": "CENSORED",
"vote": 3,
"vote_source": 1,
"game_mode":0
}
}
],
"message_id": 71,
"message_type": 80,
"version": 1,
"is_background": false
}“在person_id字段内的body字段中,有 swipee 的用户 ID 。如果我们能找出 Jenna 帐户的用户 ID,我们就可以将它插入到来自我们 Wilson 帐户的“swipe yes”请求中。如果 Bumble 没有检查您滑动的用户当前是否在您的 Feed 中,那么他们可能会接受滑动并将 Wilson 与 Jenna 匹配。” 我们如何算出 Jenna 的用户 ID?你问。
“我确信我们可以通过检查我们的 Jenna 帐户发送的 HTTP 请求来找到它,”Kate 说,“但我有一个更有趣的想法。” Kate 找到了 HTTP 请求和响应,该请求和响应加载了 Wilson 的预先确定的帐户列表(Bumble 将其称为“Beeline”)。

“看,这个请求返回一个模糊图像列表以显示在直线页面上。但在每张图片旁边,它还显示了图片所属的用户 ID!第一张照片是珍娜的,所以旁边的用户 ID 一定是珍娜的。”
{
// ...
"users": [
{
"$gpb": "badoo.bma.User",
// Jenna's user ID
"user_id":"CENSORED",
"projection": [340,871],
"access_level": 30,
"profile_photo": {
"$gpb": "badoo.bma.Photo",
"id": "CENSORED",
"preview_url": "//pd2eu.bumbcdn.com/p33/hidden?euri=CENSORED",
"large_url":"//pd2eu.bumbcdn.com/p33/hidden?euri=CENSORED",
// ...
}
},
// ...
]
}难道不知道 Beeline 中人们的用户 ID 就不会允许任何人在不向 Bumble 支付 1.99 美元的情况下欺骗所有对他们刷过“是”的人的“是”请求吗?你问。“是的,”Kate 说,“假设 Bumble 没有验证您尝试匹配的用户是否在您的匹配队列中,根据我的经验,约会应用程序往往不会这样做。所以我想我们可能已经发现了我们的第一个真正的,如果不令人兴奋的漏洞。
“无论如何,让我们将 Jenna 的 ID 插入一个 swipe-yes 请求,看看会发生什么。”
发生的情况是 Bumble 返回“服务器错误”。
伪造签名
“这很奇怪”凯特说。“我想知道它对我们编辑过的请求有什么不满意的地方。” 经过一些实验,Kate 意识到如果您编辑有关请求的 HTTP 正文的任何内容,即使只是在其末尾添加一个无关紧要的额外空间,编辑的请求也会失败。“这向我表明该请求包含称为签名的内容,”凯特说。你问这是什么意思。
“签名是从一段数据中生成的一串看起来随机的字符,它用于检测该段数据何时被更改。生成签名的方式有很多种,但对于给定的签名过程,相同的输入总是会产生相同的签名。

“使用签名来验证一段文本未被篡改,验证者可以自己重新生成文本的签名。如果他们的签名与文本附带的签名相匹配,则该文本自签名生成以来未被篡改。如果它不匹配,那么它有。如果我们发送给 Bumble 的 HTTP 请求在某处包含签名,那么这将解释为什么我们会看到错误消息。我们正在更改 HTTP 请求正文,但没有更新其签名。
“在发送 HTTP 请求之前,运行在 Bumble 网站上的 JavaScript 必须从请求的正文中生成一个签名,并以某种方式将其附加到请求中。当 Bumble 服务器收到请求时,它会检查签名。如果签名有效,则接受请求,否则拒绝。这使得像我们这样的运动鞋用户很难弄乱他们的系统。

“然而,”凯特继续说道,“即使不知道这些签名是如何产生的,我也可以肯定地说,它们不提供任何实际的安全性。问题是签名是由运行在 Bumble 网站上的 JavaScript 生成的,它在我们的计算机上执行。这意味着我们可以访问生成签名的 JavaScript 代码,包括可能使用的任何秘密密钥。这意味着我们可以阅读代码,弄清楚它在做什么,并复制逻辑以便为我们自己编辑的请求生成我们自己的签名。Bumble 服务器不会知道这些伪造的签名是由我们生成的,而不是由 Bumble 网站生成的。
“让我们尝试在这些请求中找到签名。我们正在寻找一个看起来随机的字符串,可能有 30 个字符左右。从技术上讲,它可以位于请求中的任何位置——路径、标题、正文——但我猜它在标题中。” 这个怎么样?你说,指着称为HTTP报头X-Pingback用的值81df75f32cf12a5272b798ed01345c1c。
POST /mwebapi.phtml?SERVER_ENCOUNTERS_VOTE HTTP/1.1
...
User-Agent: Mozilla/5.0 (Macintosh; Intel Max OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0
X-Pingback: 81df75f32cf12a5272b798ed01345c1c
Content-Type: application/json
...“完美,”凯特说,“标题的名字很奇怪,但它的值确实看起来像一个签名。” 你说,这听起来像是进步。但是我们如何才能知道如何为我们编辑过的请求生成我们自己的签名呢?
“我们可以从一些有根据的猜测开始,”凯特说。“我怀疑构建 Bumble 的程序员知道这些签名实际上并不能保护任何东西。我怀疑他们使用它们只是为了劝阻没有动力的修补匠,并为像我们这样有动力的人创造一个小小的障碍。因此,他们可能只是使用简单的哈希函数,例如 MD5 或 SHA256。没有人会使用普通的旧哈希函数来生成真实、安全的签名,但使用它们来产生小的不便是完全合理的。” Kate 将请求的 HTTP 正文复制到一个文件中,并通过几个这样的简单函数运行它。它们都与请求中的签名不匹配。“没问题,”凯特说,“我们只需要阅读 JavaScript。”
阅读 JavaScript
这是逆向工程吗?你问。“它没有那么花哨,”凯特说。“‘逆向工程’意味着我们从远处探测系统,并使用我们观察到的输入和输出来推断它内部发生了什么。但在这里我们要做的就是阅读代码。” 我还能在简历上写逆向工程吗?你问。但是凯特很忙。
Kate 是对的,您所要做的就是阅读代码,但阅读代码并不总是那么容易。按照标准做法,Bumble 已将所有 JavaScript 压缩到一个高度压缩或缩小的文件中。他们这样做主要是为了减少必须发送给网站用户的数据量,但缩小也有副作用,使感兴趣的观察者更难理解代码。压缩器已删除所有评论;将所有变量从描述signBody性名称(如f和)更改为难以理解的单字符名称R;并将代码连接到 39 行,每行有数千个字符。

你建议放弃,直接以朋友的身份问史蒂夫是否是联邦调查局的线人。凯特坚决而无礼地禁止这样做。“我们不需要完全理解代码就可以弄清楚它在做什么。” 她将 Bumble 的单个巨大 JavaScript 文件下载到她的计算机上。她通过一个非缩小工具运行它,使其更易于阅读。这不能带回原始变量名称或注释,但它确实将代码重新格式化为多行,这仍然有很大帮助。扩展版本的代码略多于 51,000 行。

接下来她搜索字符串X-Pingback。由于这是一个字符串,而不是一个变量名,它不应该受到缩小和取消缩小过程的影响。她在第 36,875 行找到字符串并开始跟踪函数调用以查看相应的标头值是如何生成的。

你开始相信这可能会奏效。几分钟后,她宣布了两项发现。
“首先”,她说,“我在第 36,657 行找到了生成签名的函数。”

哦,太好了,你说,所以我们只需要在我们的 Python 脚本中重写那个函数就可以了?“我们可以,”凯特说,“但这听起来很难。我有一个更简单的主意。” 她发现的函数包含许多长的、随机的、硬编码的数字。她1732584193将这些数字中的第一个粘贴到 Google 中。它为广泛使用的称为 MD5 的散列函数的实现返回结果页。“这个函数只是用 JavaScript 编写的 MD5,”她说,“所以我们可以从crypto模块中使用 Python 的内置 MD5 实现。”

但是我们已经尝试过 MD5 并且它没有用,你抗议。“没错,”凯特说,“这让我想到了我的第二个发现。在将请求正文传递到 MD5 并登录之前,Bumble 会在正文前加上一个长字符串(精确值已编辑),然后对密钥和字符串的组合进行签名。

const not_actually_secret_key = "REDACTED"
// Exact combination method redacted
const signature = md5(combine_somehow(not_actually_secret_key, http_body))“这有点类似于 HMAC(基于哈希的消息身份验证代码)等真实世界的加密签名算法的工作方式。生成 HMAC 时,您将要签名的文本与密钥组合,然后通过像 MD5 这样的确定性函数传递它。知道密钥的验证者可以重复此过程以验证签名是否有效,但攻击者无法生成新签名,因为他们不知道密钥。然而,这对 Bumble 不起作用,因为他们的秘密密钥必须在他们的 JavaScript 中硬编码,这意味着我们知道它是什么。这意味着我们可以通过将密钥添加到我们的请求正文并通过 MD5 传递结果来为我们自己编辑的请求生成有效的新签名。”
Kate 编写了一个脚本来构建 HTTP 请求并将其发送到 Bumble API。它X-Pingback使用密钥REDACTED和 MD5 算法在标头中对这些请求进行签名。为了让她的脚本充当您的 Jenna 用户,Kate 将 Jenna 用户的 cookie 从她的浏览器复制到她的脚本中,并将它们添加到她的请求中。现在,她能够向 Bumble 发送一个签名、经过身份验证、定制的“匹配”请求,将 Wilson 与 Jenna 进行匹配。Bumble 接受并处理请求,并祝贺她的新比赛。您不必给 Bumble 1.99 美元。
到目前为止有什么问题吗?凯特问。你不想听起来很愚蠢,所以你说不。
测试攻击
既然您知道如何从脚本向 Bumble API 发送任意请求,您就可以开始测试三边测量攻击了。凯特伪造 API 请求,将威尔逊置于金门大桥中间。重新定位他是珍娜的任务。
请记住,Bumble 只会向您显示您与其他用户之间的大致距离。但是,您的假设是他们通过计算精确距离然后四舍五入来计算每个近似距离。如果您可以找到与受害者的距离从(例如)3 英里变为 4 英里的点,您可以推断出该点正是受害者距离 3.5 英里的点。如果你能找到 3 个这样的翻转点,那么你可以使用三边测量来精确定位受害者。
凯特首先将珍娜放在旧金山的一个随机位置。然后她向南移动,每次移动 0.01 度纬度。每次洗牌时,她都会问 Bumble 离威尔逊有多远。当这从 4 英里翻转到 5 英里时,Kate 支持 Jenna 上一步并以 0.001 度的较小增量向南移动,直到距离再次从 4 翻转到 5。这种回溯提高了距离翻转的测量点的精度。
经过反复试验,Kate 意识到 Bumble 并没有像大多数人在学校里教的那样绕开它的距离。当大多数人想到“四舍五入”时,他们会想到一个截止点为 的过程.5。3.4999 向下舍入为 3;3.5000 向上取整为 4。但是,Bumble楼层距离,这意味着所有内容始终向下取整。3.0001、3.4999 和 3.9999 都四舍五入到 3;4.0001 向下舍入到 4。这个发现并没有破坏攻击——它只是意味着你必须编辑你的脚本以注意距离从 3 英里翻转到 4 英里的点就是受害者正好是 4.0 的点英里远,而不是 3.5 英里。
Kate 编写了一个 Python 脚本来重复这个过程 3 次,从 3 个任意位置开始。一旦找到 3 个翻转点,她的脚本就会绘制 3 个圆,每个圆都以一个翻转点为中心,半径等于翻转两侧的两个距离中较大的一个。该脚本需要很长时间来开发,因为如果您提出太多请求或过于频繁地移动自己,那么 Bumble 会限制您的请求并停止接受位置更新一段时间。一个流浪的减号暂时把珍娜放在了中国山东省的中间,但在短暂的暂停后,Bumble 让她回来了。
当脚本最终运行完成时,你们对所看到的都非常满意。
执行攻击
你和凯特一起钓鱼当地陌生人度过了一个有趣的夜晚。您将 Wilson 和 Jenna 的个人资料设置为对您当前位置附近 1 英里范围内的比赛感兴趣,然后度过一个有益健康的夜晚,与人们进行配对,对他们进行三边测量以找出他们住的地方,然后敲他们的门,同时向他们发送奇怪的 Bumble 消息。有时你走错了房子,恶作剧(或者这是否是一种犯罪?)没有发生,但你仍然玩得很开心。
第二天,您已准备好对史蒂夫狗本人进行攻击。为了定位他,你需要找出他的用户名,最简单的方法就是与他匹配。凯特想知道您是否需要制作新的 Bumble 个人资料,因为史蒂夫肯定会认出威尔逊和珍娜。你告诉她史蒂夫对出现在他的提要中的每个人都刷了“是”,以最大限度地扩大他的影响范围,你认为这在 2012 年的 Tinder 上有效,但现在可能只会让 Bumble 的算法认为他很绝望。他也是一个自恋的自恋者,除了自己以外对任何人都不关心,所以他认出任何人的可能性很小。
你让珍娜的账户在史蒂夫上刷“是”,然后焦急地等待 ping。一小时之内,史蒂夫标志性的长厕所休息时间。这是一场比赛。
您假装与潜在的 CFO 通话。史蒂夫溜出大楼。你把凯特叫过来,然后对史蒂夫进行三边攻击。你无法相信你的脚本吐出什么。
三个红色圆圈在旧金山的 J Edgar Hoover 大楼相遇。联邦调查局总部。
复仇与和解
你拿到托尔斯泰的《安娜卡列尼娜》,并发誓要杀死史蒂夫。当他回来时,你把他拖进会议室并开始摇摆。这不是你想的那样,他抗议。我一直试图通过玩 FBI 扑克游戏让公司重新陷入困境。不幸的是,进展并不顺利,我的天哪。我可能需要拿出州的证据才能摆脱这种新的困境。
你挥舞着你的 864 页 19 世纪经典。
或者我想我们可以做一些 A/B 测试并尝试改善我们的销售渠道转换,他建议。
你同意这是个好主意。不要为自己做,你说,为我们的 190 名各种实习生、志愿者和无薪试用人员的团队做,他们都依赖这份工作,如果不是为了收入,那么为了有朝一日可能会帮助他们的宝贵工作经验闯入这个行业。
你用一只胳膊搂着他,给他一个你希望的友好但极具威胁性的挤压。来吧朋友,你说,让我们回去工作吧。
结语
在无利可图的冒险中,您意识到自己仍然拥有数百万人使用的应用程序中的严重漏洞。您尝试在暗网上出售信息,但您不知道如何出售。您在 eBay 上列出了它,但您的帖子被删除了。几乎所有其他选项都用尽了,你做体面的事情并向 Bumble 安全团队报告。Bumble 回复很快,并且在 72 小时内已经部署了看起来像是修复程序的内容。当您几周后回来查看时,他们似乎还添加了一些控件,以防止您匹配或查看不在您匹配队列中的用户。这些限制是减少未来漏洞影响的明智方法,因为它们使对任意用户执行攻击变得更加困难。
在您的报告中,您建议在计算两个用户之间的距离之前,他们应该将用户的位置四舍五入到最近的 0.1 度左右的经度和纬度。然后他们应该计算这两个四舍五入位置之间的距离,将结果四舍五入到最近的英里数,并在应用程序中显示这个四舍五入的值。

通过在计算用户之间的距离之前四舍五入用户的位置,Bumble 既可以修复这个特定的漏洞,又可以很好地保证他们将来不会泄漏位置。未来的漏洞不可能通过三边测量暴露用户的确切位置,因为距离计算甚至无法访问任何确切位置。如果 Bumble 想让这些保证更加强大,那么他们可以让他们的应用程序首先只记录用户的粗略位置。您不能意外暴露您未收集的信息。但是,您怀疑(没有证据或什至可能的原因)他们不愿意这样做是出于商业原因。
Bumble 奖励您 2,000 美元的赏金。你试图让凯特知道这笔意外之财的消息,但她听到你在电话里向妈妈吹嘘,并要求减半。在随后的斗争中,您不小心将其全部捐赠给了抗击疟疾基金会。
你有最糟糕的该死的朋友。
披露时间表
- 2021-06-15:漏洞通过 HackerOne 报告给 Bumble
- 2021-06-18:Bumble 部署修复程序
- 2021-07-21:通过 HackerOne 同意披露
