MYJPJ移动应用安全审计报告
善意声明
作为一名怀着赤诚之心的安全研究员,我谨在此郑重声明:本次安全审计的唯一目的是帮助改进系统安全性,为保护用户数据安全尽一份力。报告中所有敏感信息均已进行脱敏处理,以防被不法分子利用。我始终秉持"善意披露、负责任报告"的原则,希望通过专业的漏洞发现和及时报告,协助开发团队尽快修复安全隐患。在此过程中,我严格遵守相关法律法规,绝无任何破坏或恶意利用的企图。
衷心期待通过白帽黑客与开发团队的良性互动,共同为政府和企业的信息安全保驾护航,为广大用户筑起更坚实的数据保护屏障。
严重性等级: CRITICAL (CVSS 9.1)
漏洞报告提交证明
官方邮件提交记录
发送时间: 2025年3月24日
接收方: aduan@jpj.gov.my
主题: [安全漏洞报告] MYJPJ移动应用数据泄露风险通报
提交截图证明

声明
本漏洞报告已通过官方渠道提交至马来西亚陆路交通局(JPJ)。作为一名怀着善意的安全研究员, 我希望通过及时报告这些安全问题来帮助改进系统安全性,保护用户数据安全。这份工作完全出于善意, 绝无任何恶意破坏或利用的企图。希望通过负责任的漏洞披露方式,能够帮助JPJ尽快修复这些安全隐患。 在发现政府系统漏洞时需要格外谨慎和负责任。我完全理解马来西亚同胞们对此类披露可能持有疑虑,但我希望能以最大的诚意说明:发现并报告这个漏洞的唯一目的,是为了防止不法分子抢先发现并加以利用。作为一名关心马来西亚网络安全的研究员,我深感有责任通过正当渠道向JPJ报告这一问题。 我坚信JPJ作为负责任的政府部门,一定会认真对待这个安全隐患并采取必要的补救措施。毕竟在这个数字化时代,保护公民的个人数据安全是政府的重要职责。我真诚地希望通过这次善意的漏洞披露,能为提升政府系统的安全性贡献一份力量,共同维护马来西亚公民的数据安全。
魏部长办公室邮件提交记录
魏部长办公室邮件提交截图

由于事关重大公众利益,且初次报告未获及时回应,特向魏部长办公室提交跟进报告。
CNVD漏洞提交记录
已提交至国家信息安全漏洞共享平台(CNVD)
漏洞编号:CNVD-C-2025-176294
漏洞复现证明
环境配置文件直接暴露在公网的复现截图

技术证据链分析
个人信息暴露矩阵
字段名
|
数据类型
|
PDPA分类
|
泄露途径
|
---|---|---|---|
Token | API访问令牌 | 系统凭证 | 日志输出 |
ID | API用户标识 | 系统标识符 | 日志输出 |
PASSWORD | API密钥/JWT令牌 | 认证凭证 | 日志输出 |
AUTH BEARER | HTTP认证令牌 | 访问凭证 | 请求头部 |
noic | 车主身份证号 | 敏感个人信息 | API响应 |
nokp | 身份证号码 | 敏感个人信息 | API响应 |
nokenderaan | 车牌号码 | 车辆信息 | API响应 |
jnsBody | 车身类型 | 车辆信息 | API响应 |
kodKegunaan | 车辆用途 | 车辆信息 | API响应 |
birthDate | 出生日期 | 敏感个人信息 | API响应 |
addres1 | 地址第一行 | 个人地址信息 | API响应 |
postcode | 邮政编码 | 位置信息 | API响应 |
city | 城市 | 位置信息 | API响应 |
state | 州属 | 位置信息 | API响应 |
image | 用户照片 | 生物识别信息 | API响应 |
qrCode | 用户二维码 | 身份验证信息 | API响应 |
21:31:02.047125+0800 kernel App Store Fast Path -> /Runner.app/Frameworks/webview_flutter_wkwebview.framework/webview_flutter_wkwebview
21:31:02.129863+0800 kernel App Store Fast Path -> /Runner.app/Frameworks/Flutter.framework/Flutter
21:31:02.612610+0800 Runner flutter: Permission granted: true
21:31:03.221663+0800 Runner flutter: false
21:31:03.729068+0800 Runner flutter: {"status":"00","message":"Set Player ID Success"}
21:31:04.139558+0800 Runner flutter: Final Push status check:
21:31:04.139616+0800 Runner flutter: Opted in: true
21:31:04.139645+0800 Runner flutter: Token: {敏感信息已脱敏}
21:31:04.139697+0800 Runner flutter: ID: {敏感信息已脱敏}
21:31:04.139739+0800 Runner flutter: PASSWORD: {敏感信息已脱敏}
21:31:31.972259+0800 Runner flutter: 200
21:31:43.021980+0800 Runner flutter: {Content-Type: application/json; charset=UTF-8, Accept: application/json, Authorization: Bearer {敏感信息已脱敏}, Accept-Language: ms}
21:31:43.239563+0800 Runner flutter: 200
21:31:43.239747+0800 Runner flutter: {"noic":"{敏感信息已脱敏}","status":"01","status_message":"NOT FOUND","saman":[]}
21:32:03.509769+0800 Runner flutter: error data from api
21:32:03.663134+0800 Runner flutter: {nokenderaan: {敏感信息已脱敏}, jnsBody: MKR, kodKegunaan: AB, nokp: null, share: 0}
21:32:05.535017+0800 Runner flutter: true
21:32:11.995522+0800 Runner flutter: {Content-Type: application/json; charset=UTF-8, Accept: application/json, Authorization: Bearer {敏感信息已脱敏}, Accept-Language: ms}
21:32:13.335059+0800 Runner flutter: 200
21:32:13.336601+0800 Runner flutter: response body : {"connStatus":200,"user":"{敏感信息已脱敏}","nokp":"{敏感信息已脱敏}","status":"{敏感信息已脱敏}","message":"TRANSACTION SUCCESSFUL","nationality":"MALAYSIA","birthDate":"{敏感信息已脱敏}","refNo":"{敏感信息已脱敏}","addres1":"{敏感信息已脱敏}","addres2":"{敏感信息已脱敏}","addres3":"{敏感信息已脱敏}","postcode":"{敏感信息已脱敏}","city":"{敏感信息已脱敏}","state":"{敏感信息已脱敏}","country":"MALAYSIA","image":"{敏感信息已脱敏}"}
21:32:13.377635+0800 Runner flutter: {"connStatus":200,"msg":"Success","lesenCDL":"1","lesenPDL":"0","lesenLDL":"0","lesenVOC":"0"}
21:33:02.038156+0800 Runner flutter: {"connStatus":200,"result":[{"response_code":"GLB000000I - Transaksi Berjaya","nokp":"{敏感信息已脱敏}","nama":"{敏感信息已脱敏}","noKenderaan":"{敏感信息已脱敏}","effectiveDate":"{敏感信息已脱敏}","expiredDate":"{敏感信息已脱敏}","lkmAmount":"90.00","kodTransaksi":"{敏感信息已脱敏}","kodKegunaan":"AB","bodyType":"MKR","kodCaw":"0116103","kodSekuriti":"{敏感信息已脱敏}","region":"SEMENANJUNG","cc":"{敏感信息已脱敏}","jnsKegunaan":"PERSENDIRIAN","qrkod":"{敏感信息已脱敏}"}]}
21:34:07.660425+0800 Runner flutter: {"status":200,"icno":"{敏感信息已脱敏}","vehicleRegno":"{敏感信息已脱敏}","message":"Tiada rekod senarai hitam."}
21:34:23.682576+0800 Runner flutter: {"statusSaman":[{"status":"11","message":"Tiada Saman Yang Boleh Dibayar|No Summons Can Be Paid","totalSummon":"0"}],"senaraiSaman":[]}
应用信息
应用名称: MYJPJ Mobile App
开发框架: Flutter
应用类型: 马来西亚陆路交通局(JPJ)官方移动应用
免责声明
本安全测试报告仅用于帮助改进应用程序安全性,严格遵守马来西亚《个人数据保护法》(PDPA)的规定。
安全研究承诺:
- 不会对应用程序进行任何破坏性操作
- 不会恶意利用或泄露测试过程中发现的任何敏感信息
- 遵守负责任的漏洞披露原则
- 及时向开发团队报告发现的安全问题
- 协助开发团队修复安全漏洞
本测试完全遵守马来西亚PDPA关于个人数据收集、使用和保护的相关规定。