Source Map Code Leak
Source Map 代码泄露
描述
应用程序应在编译代码中提供尽可能少的解释性信息。诸如调试信息、行号和描述性函数或方法名称等元数据会使二进制文件或字节码更容易被逆向工程。
应用程序通过专门用于调试和开发的 source map 文件泄露了源代码。
可以使用以下示例脚本完全检索源代码:
import sys
import json
import os
filename = sys.argv[1]
map = json.load(open(filename, 'r'))
files = map['sources']
content = map['sourcesContent']
if len(files) != len(content):
raise ValueError('not same lengths')
for f, c in zip(files, content):
f = f.replace('../', '')
print(f)
if '/' in f:
os.makedirs(os.path.dirname(f), exist_ok=True)
with open(f, 'w') as o:
o.write(c)
泄露源代码可以帮助攻击者轻易伪造恶意应用程序,或了解应用程序的内部结构以识别漏洞。
建议
要在构建时移除 source map 文件,请遵循相应的指南:
React Native:
在 Android 上,source map 默认启用但不生成。然而,仅当 android/app/build.gradle 中存在 hermesFlags 且设置了 -output-source-map 选项时,它们才会被生成。
在 iOS 上,source map 默认被禁用。
Ionic:
要从 Ionic 应用程序构建中排除 sourcemap 文件,请在您的 package.json 文件中将 ionic_generate_source_map 设置为 false
"dependencies": {
...
}
"config": {
"ionic_generate_source_map": "false",
},
或者,如果构建是通过命令行生成的,请确保 --generateSourceMap 标志设置为 false。
原生 iOS/Android:
Source map 文件通常不在原生 iOS 和 Android 开发中使用。但是,如果您使用了任何生成 source map 的工具或库,请确保将其配置为在发布构建 (release builds) 中排除 source map 生成。
其他框架:
对于像 PhoneGap 或 Cordova 这样的其他框架,sourcemap 文件默认是不生成的。然而,如果您使用了生成 source map 的其他工具或插件,则需要将它们配置为在生产构建中排除 source map 生成。
链接
标准
- OWASP_MASVS_L1:
- MSTG_CODE_3
- OWASP_MASVS_L2:
- MSTG_CODE_3
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_6_3
- REQ_11_3
- OWASP_MASVS_v2_1:
- MASVS_STORAGE_2
- MASVS_RESILIENCE_2
- MASVS_RESILIENCE_3
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213