赏金故事 | 绕过Netflix多因素认证(MFA)

admin 2025年5月6日15:10:51赏金故事 | 绕过Netflix多因素认证(MFA)已关闭评论2 views字数 4913阅读16分22秒阅读模式

扫码领资料

获网安教程

赏金故事 | 绕过Netflix多因素认证(MFA)
赏金故事 | 绕过Netflix多因素认证(MFA)

Track安全社区投稿~  

赢千元稿费!还有保底奖励~(
https://bbs.zkaq.cn)

Netflix —— 绕过多因素认证(MFA)

赏金故事 | 绕过Netflix多因素认证(MFA)

介绍

在参与 Netflix 漏洞赏金计划期间,我发现了一个漏洞,可以绕过其在“更改邮箱”接口上实施的多因素认证(MFA)

这一问题之所以存在,是因为存在一种替代方法可以更改邮箱地址,而无需完成MFA流程。

这个漏洞在 Bugcrowd 上被评为P3等级。

我想感谢 Netflix 允许我公开这份报告。该漏洞现已修复并完成上线。

理解 Netflix 的 MFA

当你登录 Netflix 账户时,可以通过这个网址更新邮箱地址:
https://netflix.com/email。访问该链接后,你会被重定向到
 
/mfa 接口,在进行任何更改之前需要完成身份验证。

验证方式包括:通过电子邮件或手机号接收验证码,或者提供与账户关联的信用卡号码。

赏金故事 | 绕过Netflix多因素认证(MFA)
赏金故事 | 绕过Netflix多因素认证(MFA)

这意味着,如果你成功窃取了某人的凭证,你仍然需要完成MFA流程才能更改邮箱地址并完全接管他们的账户。

一些常见的MFA/2FA绕过技术包括:

1. 响应篡改。2. 直接请求接口。3. 缺失2FA验证码完整性验证。4. 缺乏暴力破解保护/速率限制。5. 2FA验证码泄露在响应中。

在这个案例中,这些方法都不起作用。因此,在这阶段,我认为MFA接口是安全的。

TL;DR

在这篇博客文章中,我展示了一个发现,即 Netflix 上的一个替代接口“/extramember/create-credentials”缺少多因素认证(MFA),使得用户能够在无需完成额外验证步骤的情况下更改邮箱地址。

重现步骤报告

1. 访问 
            https://www.netflix.com/YourAccount
           并选择“更改邮箱”。2. 你将遇到MFA页面 — 
            https://www.netflix.com/mfa。
          3. 为绕过此步骤,访问“
            https://www.netflix.com/extramember/create-credentials”。
          4. 使用新邮箱地址和密码填写表单,然后点击下一步。5. 你将被重定向到 
            https://netflix.com,邮箱地址和密码将被更新,无需MFA。
          

发现阶段 — 漫长的路径

Netflix 为特定国家提供了一些功能。因此,我的策略最初是浏览他们的“帮助中心”以收集更多关于可用功能和相应国家的信息。

在这个阶段,我创建了一些自动化脚本,浏览Netflix帮助中心页面并检查其标题,以识别任何有趣的功能。

有一个特别引起我注意:“Extra Member。” 链接: 
https://help.netflix.com/en/node/123279/cl

在测试时,这个功能仅在以下国家/地区可用:

  • • 秘鲁
  • • 智利
  • • 尼泊尔

这意味着,为了获得该功能,你需要从这些国家之一注册并支付订阅费用。

为了测试,我尝试使用来自这三个国家的 IP 地址,并成功注册了一个新账户。

为了继续支付订阅费用,对于某些国家,也可以通过第三方网站购买礼品卡,并在Netflix支付过程中使用它们。然而,在这种情况下,对于这三个国家,我没有找到任何购买礼品卡的方法。

最终,我放弃了尝试支付订阅费用,因为没有任何支付方式有效。

公司公告— 几周后

在参与漏洞赏金计划时,我认为如果你订阅公司的新闻发布,可以及时收到关于近期变动和新功能介绍的消息,这会是非常有益的。

在 Netflix 的案例中,我注意到以下文章于2023年2月8日发布。

链接: 
https://about.netflix.com/en/news/an-update-on-sharing

“在过去的一年里,我们一直在探索解决拉丁美洲问题的不同方法,我们现在已经准备好在未来几个月广泛推出这些方法,今天从加拿大、新西兰、葡萄牙和西班牙开始。我们的重点是为会员提供更大的控制权,决定谁可以访问他们的账户。”

文章中介绍了“Extra Member”功能的更新。该功能现在还在以下国家/地区可用:

  • • 加拿大
  • • 新西兰
  • • 葡萄牙
  • • 西班牙

它仍然不适用于我目前所在的国家,但知道了这些新信息后,我决定尝试从上述国家之一注册并再次支付订阅费用。

注册账户

如果你尝试使用知名的VPN服务,注册新账户可能会变得困难,因为该VPN的IP地址可能已经被用于创建大量注册,随后被列入黑名单。在这种情况下,尝试在
Netflix.com
上注册将导致错误信息“
发生错误”。

在我的情况下,我使用的是来自西班牙的IP,并且这并非来自任何知名VPN服务。

不幸的是,这仍然不够,因为一旦你使用这些国家的IP注册,你将需要使用以下几种方式支付订阅费用:

  • • PayPal
  • • 借记卡
  • • 礼品卡

再次,我尝试使用 PayPal 和几张借记卡支付订阅费用,但再次失败,显示错误信息“发生错误”。

最后,我决定使用礼品卡方式。在Netflix中,当你使用来自西班牙的IP并访问礼品卡页面时,你会发现可以从以下网站购买礼品卡:
startselect.com

注意:购买礼品卡也取决于国家。在西班牙,似乎
startselect.com
可用。

赏金故事 | 绕过Netflix多因素认证(MFA)

我所做的是打开
https://startselect.com/es-es/tarjeta-regalo-netflix-variable/42228
并注册。

赏金故事 | 绕过Netflix多因素认证(MFA)

不幸的是,仅在
startselect.com
上注册还不够。我需要通过该网站的验证检查,验证内容包括:

无论如何,我这么做了,目的是为了能够使用那个功能。

准备使用礼品卡。

终于!我使用西班牙的 IP 地址注册,并使用最近购买的西班牙礼品卡。

接下来,解锁了以下功能:

赏金故事 | 绕过Netflix多因素认证(MFA)

拥有了该功能的访问权限后,我决定查找所有与之相关的端点。我检查了主要的 JS 文件,发现了多个与“Extra Member”相关的端点。

)), (0, 
            M.default)
           (j, J, (H = {      }, (0, 
            M.default)
           (H, 
            et.ADD_ON_DECLINE_INVITE,
           '/extramember/declineinvitation'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_DECLINE_CONFIRM,
           '/extramember/declineconfirmed'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_ACTIVATE_ERROR,
           '/extramember/error'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_ACTIVATE_INVITE_ACCEPTED_ERROR,
           '/extramember/accepted-error'), (0, 
            M.default)
           (H, 
            et.ADD_ON_ACTIVATE_INVITE_INVALID_ERROR,
           '/extramember/invalid-error'), (0, 
            M.default)
           (H, 
            et.ADD_ON_CLAIM_REGISTRATION_CONTEXT_ERROR,
           '/extramember/claim-error'), (0, 
            M.default)
           (H, 
            et.ADD_ON_ACTIVATE_CONTEXT,
           '/extramember/activate'), (0, 
            M.default)
           (H, 
            et.ADD_ON_PASSWORD_CONTEXT,
           '/extramember/context'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_LOGIN_CREDENTIALS_SETUP_CONTEXT,
           '/extramember/activate-credentials'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_CLAIM_REGISTRATION_SETUP_CONTEXT,
           '/extramember/claim'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_PASSWORD_CREATION,
           '/extramember/createpassword'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_LOGIN_CREDENTIALS_SETUP,
           '/extramember/create-credentials'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_CLAIM_REGISTRATION_SETUP,
           '/extramember/claim-setup'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_REGISTRATION,
           '/extramember/registration'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_PROFILE_SELECTION,
           '/extramember/profileselection'),    (0, 
            M.default)
           (H, 
            et.PASSWORD_ENTRY,
           '/extramember/nameprofile'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_WELCOME_BACK,
           '/simpleSetup/welcomeback'),    (0, 
            M.default)
           (H, 
            et.ADD_ON_PROFILE_CREATION,
           '/simpleSetup/createprofile'),    (0, 
            M.default)
           (H, 
            et.ENTER_PASSWORD_RESET,
           '/loginhelp'), H)),    (0, 
            M.default)
           (j, $, (L = {      }, (0, 
            M.default)
           (L, 
            et.DEMO_ADS_OPT_OUT,
           '/settings/demographics/demographicAdsOptOut'),   (0, 
            M.default)
           (L, 
            et.BEHAVIORAL_ADS_OPT_OUT,
           '/settings/demographics/behavioralAdsOptOut'),   (0, 
            M.default)
           (L, 
            et.EDIT_GENDER,
           '/settings/demographics/editGender'), L)), (0, 
            M.default)
           (j, ee, (_ = {      }, (0, 
            M.default)
           (_, 
            et.NOTIFICATION_SETTINGS,
           '/notificationsettings'), (0, 
            M.default)
           (_, 
            et.NOTIFICATION_SETTINGS_EMAIL,
           '/notificationsettings/email'), (0, 
            M.default)
           (_, 
            et.NOTIFICATION_SETTINGS_TEXT,
           '/notificationsettings/text'), (0, 
            M.default)
           (_, 
            et.NOTIFICATION_SETTINGS_PUSH,
           '/notificationsettings/push'), _)), j);      
            t.MONEYBALL_PATHS
           = er

检查所有端点后,我发现其中一个行为异常。访问 /create-credentials 时,我看到以下页面:

赏金故事 | 绕过Netflix多因素认证(MFA)

如果你输入新的电子邮件和密码,你当前的电子邮件和密码会被更改,并且你会被重定向到 /youraccount 页面。

该端点不需要任何 MFA。这意味着 MFA 被绕过了。

在这一步,我认为这个端点仅对“Extra Member”用户可用,但最终发现它对所有 Netflix 用户都有效。

获取更多精彩内容,尽在Track安全社区~:
https://bbs.zkaq.cn

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前沿漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,即可加入。

赏金故事 | 绕过Netflix多因素认证(MFA)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月6日15:10:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   赏金故事 | 绕过Netflix多因素认证(MFA)https://cn-sec.com/archives/4033328.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.