要点/总结:
-
我入侵了丰田的全球供应商准备信息管理系统(“GSPIMS”),这是一个供丰田员工及其供应商用来协调项目、零件、调查、采购以及与全球丰田供应链相关的其他任务的网络应用程序。
-
通过作为用户模拟/“充当”功能的一部分意外引入后门获得系统管理员访问权限。
-
任何用户只要知道他们的电子邮件就可以登录,完全绕过各种公司登录流程。
-
实现了对包含 14k+ 用户的全局用户目录的读/写访问。
-
实现的数据访问:14k+ 企业用户帐户详细信息、机密文件、项目、供应商排名/评论等。数据访问是全球性的,并不局限于北美。
-
问题已于 2022 年 11 月负责任地披露给丰田并及时解决。
在 2022 年 10 月下旬缓慢的一周中,我决定探索各大公司的子域,看看是否能找到任何值得报告/撰写的漏洞。我发现了几个有趣的丰田网站。在 7 天内,我向丰田报告了 4 个不同的安全问题,所有这些问题都被归类为“严重”。其中一份报告产生了非常严重的影响,是我发现的最严重的漏洞之一(到目前为止!)
我在丰田 GSPIMS 网站/应用程序中发现了本质上是一个后门登录机制,它允许我仅通过知道他们的电子邮箱地址就可以以任何丰田公司用户或供应商的身份登录。我最终发现了通过系统管理员电子邮箱地址,就能够登录到他们的帐户。一旦完成,我就可以完全控制整个全球系统。我可以完全访问丰田内部项目、文件和用户帐户,包括丰田外部合作伙伴/供应商的用户帐户。外部帐户包括以下用户:
-
Michelin
-
Continental
-
Stanley Black & Decker
-
HARMAN
-
Timken
-
BOS
-
Magna
-
更多(请注意下面屏幕截图中的各种电子邮件域)
GSPIMS 代表“全球供应商准备信息管理系统”。它是一个Angular单页应用程序。基于AG Grid应用程序中嵌入的许可证密钥,它由美国 SHI 国际公司代表丰田创建。起初,我不知道 GSPIMS 是什么。谷歌展示了一些关于它的工作列表,但在其他方面似乎很模糊。一开始我并不认为它有那么重要,但我决定花点时间看看登录屏幕后面可能隐藏着什么。直到我绕过登录屏幕,我才看到“全球供应商准备信息管理系统”标签。听起来很重要!
绕过登录
登录屏幕具有公司丰田和供应商登录选项:
两个选项都提供相同的登录方法列表:
-
TMNA = 丰田汽车北美公司
-
TME = 丰田汽车欧洲公司
-
TMC = 丰田汽车公司(日本)
-
TDEM = 丰田大发工程与制造(亚洲)
-
Other Affiliates = Unknown,此按钮当前不起作用
如果您在任何大洲为丰田工作/与丰田合作,您很可能可以使用这些选项之一登录系统。我不为丰田工作,所以我不得不通过修补 JavaScript 代码来绕过这个登录屏幕。
开发人员通过实现CanActivate和CanActivateChild来控制对 Angular 路由/页面的 访问。基本上,当用户尝试导航到路由/页面时,将确定是否允许他们查看它,然后返回 true 或 false。通过修补两者以返回 true,您通常可以完全解锁 Angular 应用程序:
还需要删除注销代码以防止重定向回登录页面:
应用这些补丁后,应用程序加载并可以浏览:
之前案例中,修补 JavaScript 是实现完全访问所需的全部,因为他们的 API 没有得到适当的保护。在 GSPIMS 的情况下,不会从 API 加载任何数据。所有端点都将返回 HTTP 状态 401 – 由于缺少登录 cookie 而未授权响应。我浏览的每个页面都是这种情况。Toyota/SHI 似乎正确地保护了他们的 API,在这一点上,我正要将这个站点注销为“可能安全”。我不会费心报告单页应用程序绕过,除非它也暴露了泄漏/不正确保护的 API。
适合所有人的 JWT!
在放弃 GSPIMS 应用程序的工作之前,我查看了它的代码,看看是否有任何 API 密钥、秘密 API 端点或任何其他可能有趣的东西。我在用户服务中遇到了这个功能。你能发现它的有趣之处吗?
这很有趣,因为它似乎是根据提供的电子邮件生成 JWT。无需密码。我决定编写此 HTTP 请求以查看该createJWT端点是否真的有效。即使有效,如果没有有效的电子邮件也是不够的,这可能很难弄清楚,尤其是在基础用户群很小的情况下。
丰田公司的电子邮件在北美使用一种可预测的格式:[email protected]。这让猜测有效电子邮件变得更容易,但我仍然必须找人。我在谷歌上搜索了涉及供应链的丰田员工,希望能找到可能在 GSPIMS 系统中注册的人。我找到了一个有前途的匹配项,并根据他们的名字制定了他们的电子邮件地址。然后我触发了createJWT HTTP 请求,它返回了一个有效的 JWT!
似乎我发现了一种方法,可以为在 GSPIMS 中注册的任何丰田员工或供应商生成有效的 JWT,完全绕过各种公司登录流程,这可能还强制执行双因素身份验证选项。createJWT存在的原因将在本文后面揭示。
使用 JWT 很容易。GSPIMS API 通过 cookie 进行身份验证,所以我只是通过 Chrome 的开发工具添加了它:
升级为系统管理员
我登录的用户的角色是“Mgmt – Purchasing”,这可能意味着他们负责通过这个系统组织从供应商那里采购东西。此时我可以访问一些数据,但我觉得还有更多数据等待解锁。查看 HTTP 请求和响应,在user/details API 响应中有一个rolePrivileges节点返回有关当前登录用户的信息:
我想尝试找到具有系统管理员角色的用户。我注意到另一个名为findByEmail的 API 端点仅通过提供有效的电子邮件返回有关用户帐户的信息。方便的是,这还告诉您用户的管理员是谁:
检查经理的经理等可以轻松找到对系统具有更高访问权限的帐户。最终我找到了北美地区管理员。这使我可以访问“用户管理”部分。然后我四处寻找,发现了具有更高访问权限的用户,例如 Supplier Admin、Global Admin,最后是 System Admin。
在 GSPIMS 设置中,显示的选项卡取决于您的角色。有区域管理员的区域设置、全局管理员的全局设置和系统管理员的系统管理员设置。系统管理员可以访问所有选项卡。我还注意到系统管理员在用户管理部分可以访问更多的用户。区域管理员可能只能管理他们所在区域的用户,而系统管理员可以管理所有人。有了 System Admin JWT,我基本上可以完全、全局地控制整个系统。
各种用户组的一些屏幕截图。记下右下角的用户数和页数(有很多——563 个页面有 14,063 个用户!)可以将其放大仔细看。
美国用户
日本用户
欧洲用户
亚洲用户
美国系统管理员
更多日本用户
我可以编辑这些用户中的任何一个:
或者使用列上方的用户导入按钮添加新用户。还有一个导出用户按钮,您可以使用它来下载用户信息。
扩展影响
获得完全访问权限后,我环顾了 GSPIMS 应用程序,看看作为系统管理员我可以使用什么。我非常小心,没有修改任何东西。如果您对其中的内容感到好奇,请查看系统管理员设置。没什么太令人兴奋的——它只是控制哪些角色可以访问某些功能。
现在谈谈更有趣的事情。零件部分有一个与各种项目相关的零件列表。您在顶部选择一个附属公司,然后选择项目以查看零件列表。这是一个项目的零件清单:
值得注意的是,这些项目是代号/编号。它没有说“2024 Toyota Corolla”之类的话。如果有更多的时间,我可能会弄清楚代号,但这不在本次调查的范围之内。说到项目,我可以访问所有活跃的、全局的和不活跃的项目:
值得注意的是,这些项目是代号/编号。它没有说“2024 Toyota Corolla”之类的话。如果有更多的时间,我可能会弄清楚代号,但这不在本次调查的范围之内。说到项目,我可以访问所有活跃的、全局的和不活跃的项目:
我可以查看每个项目的详细信息,包括参与人员、时间表和里程碑,以及某种类型的调查功能。看不清就手动放大图片。
项目清单
添加/删除用户
项目进度
调查
系统管理
不能忘记文件!机密文件如今风靡一时。
查看我捕获的 HTTP 跟踪,我注意到您还可以看到丰田对其供应商的各种评论。它也可能在 UI 的某处可见。
HTTP 跟踪是通过在浏览应用程序时打开Fiddler捕获的。API 返回的数据量非常大,尤其是用户列表。您可以通过增加页面大小和翻页来下载大量用户信息。
您还可以看到所有供应商以及丰田如何在风险、交付和准备方面对他们进行排名。其中有将近 3,000 个:
最后,我发现了createJWT API 的实际用途。有一个“充当”功能,让我可以作为 14k+ 全球用户中的任何一个登录。我可以以任何人的身份轻松登录,了解他们正在从事的项目、他们的任务、调查等。创建 Act As 系统的人显然没有意识到他们为整个系统添加了后门。Act As 功能仅对某些用户可见,例如我登录时使用的系统管理员用户。
如果攻击者发现了这个问题,后果可能会很严重。这是他们本可以做的一些坏事。请注意,这些只是想法,没有一个被执行。
-
添加了他们自己的具有提升角色的用户帐户,以在问题被发现和修复时保留访问权限。
-
下载并泄露了所有数据。
-
以破坏丰田全球运营的方式删除所有内容或修改数据。希望 Toyota/SHI 有工作备份?
-
策划一场针对性很强的网络钓鱼活动,试图捕获真实的公司登录详细信息,这可能会使其他丰田系统受到攻击。有 14k+ 用户可以攻击。拥有 14k+ 个公司电子邮件是一回事,但拥有 14+ 个公司电子邮件 并且 确切知道他们正在做什么/已经做什么是另一回事。如果供应商用户有重复使用密码的习惯,他们自己的基础设施也可能受到攻击。
向丰田汇报
该问题已于 2022 年 11 月 3 日报告给丰田,他们在同一天晚些时候回复确认他们收到了报告。2022 年 11 月 23 日,他们确认问题已得到解决,尽管我在随机测试时注意到它在此之前已修复。然后我告诉他们我会在行业标准的 90 天期限过后发表我的文章。
Toyota/SHI 通过使createJWT和findByEmail端点在所有情况下都返回 HTTP 状态 400 – 错误请求来解决此问题。
在我迄今为止向各个供应商报告的所有安全问题中,丰田的响应是最快和最有效的。他们回应和解决问题的速度给我留下了深刻的印象。有些公司可能反应迟钝或根本没有反应,所以这种经历令人耳目一新。
由于这一负责任的披露,丰田避免了可能发生的灾难性泄漏,不仅是他们自己员工的数据,还有他们合作伙伴/供应商的数据。令人尴尬的内部评论和供应商排名本可以公布给全世界。丰田及其供应商以前曾遭受过网络攻击,而且很容易再次发生。
原文始发于微信公众号(军机故阁):入侵丰田的全球供应商管理网络