在产品目录寻找特斯拉Model Y的秘密
在2019年6月买了一辆Model 3之后,我开始深入了解我的新车是如何工作的。我的主要目标是车辆的信息娱乐系统。为了能真正得到一些成果,绕过现有的安全措施,我在2019年8月注册成为特斯拉的硬件安全研究员,并且立刻投身于研究中。不久后我成功发现了一些硬件安全漏洞,并通过了漏洞赏金计划的审核,现将我的漏洞挖掘经历写出来与大家分享。
虽然我主要关注的是硬件,但我偶尔也会研究一下特斯拉的官网。而随着Model Y(新车型)发布的临近,我开始对Model Y的数据曝光感兴趣,想尝试找出这款新车还有哪些尚未公开的细节。
我最终瞄准了特斯拉的配件目录,一个也许有敏感数据的站点。
结果?通过编辑cookie,用户可以浏览通常不可见的页面和数据。正常情况下,任何拥有特斯拉帐户的用户都可“普通”登录这个站点。而在浏览网站时,我注意到一个有趣的cookie。经过测试中,我发现编辑cookie可以让没有特权的用户(普通用户)查看特斯拉内部的敏感信息。在平常,这也许只是一个很普通的信息泄露漏洞,但是,由于我是特斯拉的粉丝,能提前得知Model Y的详细数据让我感到非常兴奋。
复现
我先用特斯拉帐户登录到EPC网站。
很快我注意到名为EPCClaim
的cookie。
这个值明显被base64编码过,明文如下:
{“employeeId”:0,”firstName”:”General”,”lastName”:”Public”,”email”:”REDACTED@*****.com”,”countryCode”:”US”,”languageId”:null,”languageCode”:null,”currencyCode”:null,”isInternalUser”:false,”isBodyShopUser”:false,”isGeneralPublic”:true,”tabs”:false,”locationId”:null,”bodyShopId”:0,”bodyShopName”:null,”bodyShopCategory”:null,”permissions”:[]}
以上字段中有一个permissions
,貌似cookie和权限有关?我接着查看JS源代码,并在https://epc.tesla.com/scripts/scripts.8c9383be.js
中找到了一些线索。
{accountManagement:”ACCOUNT_MANAGEMENT”,bodyShopManagement:”BODY_SHOP_MANAGEMENT”,bodyShopAccountManagement:”BODY_SHOP_ACCOUNT_MANAGEMENT”,repairOrder:”REPAIR_ORDER”,orderPane:”ORDER_PANE”,admins:”ADMINS”,epcUser:”EPC_USER”,addToolingData:”ADD_TOOLING_DATA”,model3Catalog:”MODEL3_CATALOG”,modelYCatalog:”READONLY_CATALOG”,toolingCatalog:”TOOLING_CATALOG”,serviceToolingCatalog:”SERVICE_TOOLING_CATALOG”,returns:”RETURNS”,statements:”STATEMENTS”,creditmemos:”CREDIT_MEMO”,genealogy:”GENEALOGY”,generalAccountManagement:”GENERAL_ACCOUNT_MANAGEMENT”,orderModel3:”ORDER_MODEL3",orderModelX:”ORDER_MODELX”,orderRoadster:”ORDER_ROADSTER”,orderModelS:”ORDER_MODELS”,orderTooling:”ORDER_TOOLING”,orderServiceTooling:”ORDER_SERVICE_TOOLING”,orderModelSR:”ORDER_MODELSR”}
我在以上代码中找到了非常敏感的字段,modelYCatalog:”READONLY_CATALOG”
。
居然提及了还未公开的Model Y!
也许通过编辑cookie,我可以看到普通用户看不到的内容。
大多数permissions
值都是向UI添加某个选项,但它们对应的API端点都有正确的安全限制,只有被授权的有令牌的用户才能访问。那么Model Y那项呢?
{“employeeId”:0,”firstName”:”General”,”lastName”:”Public”,”email”:”REDACTED@*****.com”,”countryCode”:”US”,”languageId”:null,”languageCode”:null,”currencyCode”:null,”isInternalUser”:true,”isBodyShopUser”:false,”isGeneralPublic”:false,”tabs”:false,”locationId”:null,”bodyShopId”:0,”bodyShopName”:null,”bodyShopCategory”:null,”permissions”:”READONLY_CATALOG”}
我将isGeneralPublic
更改为false,将isInternalUser
更改为true,并把在JS中找到的和Model Y有关的值填入了cookie中。
再用base64进行编码,将其设置为请求附带的cookie值。我用这个特殊的cookie访问了https://epc.tesla.com/
,现在,我可以看到一个新选项,Model Y。翻阅具体目录时,都是Model Y所使用的零件。
不管怎么说,虽然当时我不能和别人分享信息,但还是很高兴看到这款车快上市了。
时间轴
2020年1月30日美国东部时间14:30:36-漏洞上报
2020年1月30日美国东部时间15:28:34-对方确认
2020年1月30日美国东部时间16:34:27-Model Y内容下架
2020年2月11日美国东部时间18:44:27-奖金发放
PART 2
多看一眼没坏处
我又回到了EPC网站,好奇能否找到其他方法来获取Model Y的数据。当我浏览EPC站点时,我注意到了搜索功能。它能够在目录中搜索给定车辆的所有部件。而在进行搜索时,我可以看到它根据正在查看的目录过滤数据。例如,在Model 3目录中搜索时,只能找到Model 3的部件。
为了了解搜索过滤是如何完成的,我查看了搜索时发出的网络请求,尝试再次修改请求获取Model Y的数据。
和搜索相关的API端点为:
https://epcapi.tesla.com/api/searchSuggestions
查询参数如下:
CatalogModel
countryCode
Term
例如,在Model 3目录中搜索“bumper”将调用https://epcapi.tesla.com/api/searchSuggestions?catalogModel=Model3&countryCode=US&term=bumper
。
请求涉及令牌对身份进行验证,而令牌是在登录到EPC站点时生成的,并保存在密钥EPCToken的本地存储中。很快我发现对Model Y数据的查询并没有限制,任何具有有效令牌的人(普通用户)都可以通过指定CatalogModel=ModelY
来搜索Model Y中部件细节。
例如:
curl ‘https://epcapi.tesla.com/api/searchSuggestions?catalogModel=ModelY&countryCode=US&term=XYZ_Part_Name’ -H ‘Connection: keep-alive’ -H ‘Accept: application/json, text/plain, /’ -H ‘Authorization: Bearer REDACTED’ -H ‘Accept-Language: en-us’ -H ‘User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36' -H ‘Origin: https://epc.tesla.com’ -H ‘Sec-Fetch-Site: same-site’ -H ‘Sec-Fetch-Mode: cors’ -H ‘Referer: https://epc.tesla.com/’ -H ‘Accept-Encoding: gzip, deflate, br’ — compressed
在以上请求的响应中,包括匹配项的名称、部件号、标题和相关注释。
另外,systemGroupId
会给出匹配记录所属的部件组。在测试中,可以通过调用以下端点来请求该组中的所有部件:https://epcapi.tesla.com/api/catalogs/XXX/categories/0/subcategories/0/systemGroups/XXXXX?vin=
通过以上无限制的API端点,我可以找到许多Model Y的细节。根据Model 3的部件信息搜索关键词和结果,尝试寻找和Model Y相关的部件,进而再提取关键词深入搜索,最后配合systemGroup进行搜索,找到更多部件的详细信息。
时间轴
2020年2月19日美国东部时间12:53:43-漏洞上报
2020年2月19日美国东部时间14:15:49-Model Y数据下架
2020年2月19日美国东部时间17:06:47-赏金发放
特斯拉解决这两个漏洞以及发放奖金的速度之快给我留下了深刻的印象。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@evan.connelly/hunting-tesla-model-y-secrets-in-the-parts-catalog-2f453f853dd8
最新评论