漏洞 5(支撑):明文凭证存储
漏洞 5(支撑):明文凭证存储
代码证据
fileOutputStreamOpenFileOutput = openFileOutput("credentials.txt", 32768); |
出处:MainActivity.java,第 59-61 行。
这段代码在做什么
- 调用
openFileOutput("credentials.txt", ...)打开/创建一个文件 - 把用户名和密码直接写入文件
- 显示提示"Credentials saved to file"
存储的内容长什么样
假设用户注册时输入: - 用户名:alice -
密码:password123
文件里存的就是:
Username: alice Password: password123 |
没有任何加密,就这么明文存着。
为什么这是安全问题
openFileOutput 默认把文件存在 App 的私有目录:
/data/data/com.example.mastg_test0016/files/credentials.txt |
但这个"私有"是相对的:
| 场景 | 攻击者能看到文件吗 |
|---|---|
| 普通 Android 手机(未 Root) | 不能 |
| 已 Root 的手机 | ✅ 直接读 |
| 通过 ADB 备份 | ✅ 可以读 |
| 手机借给别人用 | ✅ 可以读 |
明文存储的问题: 一旦攻击者拿到了这个文件,用户名和密码就直接暴露了。
对 Session Token 漏洞的影响
这两个漏洞有关联:
- 凭证文件明文存储 → 攻击者拿到文件 = 拿到用户名密码
- Session Token 用弱随机数 → 攻击者不需要密码,只需要预测 token
两个漏洞结合在一起:
攻击者拿到明文凭证文件 |
为什么它是"支撑发现"而不是主漏洞
这不是 randomness / cryptography 的问题。
明文存储属于: - CWE-312 — Cleartext Storage of Sensitive Information
而作业 rubric 强调的是: - Randomness / Cryptographic Misuse
所以在报告里:
主漏洞:
java.util.Random生成 session token(CWE-338)
支撑发现:明文凭证存储(CWE-312)
两个都真实存在,但主次要分清。