Source Map Code Leak
Fuite de code via Source Map
Description
L'application doit fournir aussi peu d'informations explicatives que possible avec le code compilé. Les métadonnées telles que les informations de débogage, les numéros de ligne et les noms descriptifs de fonctions ou de méthodes rendent le binaire ou le bytecode plus facile à rétro-ingénierer.
L'application divulgue le code source via des fichiers source map utilisés uniquement pour le débogage et le développement.
Le code source peut être entièrement récupéré à l'aide du script d'exemple suivant :
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)
La fuite de code source peut aider les attaquants à forger facilement des applications malveillantes ou à comprendre le fonctionnement interne de l'application pour identifier les vulnérabilités.
Recommandation
Pour supprimer les fichiers source map au moment de la compilation, suivez le guide correspondant :
React Native :
Sur Android, les source maps sont activés mais non générés par défaut. Cependant, ils ne sont générés que lorsque hermesFlags sont présents dans android/app/build.gradle et que l'option -output-source-map est définie.
Sur iOS, les source maps sont désactivés par défaut.
Ionic :
Pour exclure les fichiers sourcemap des builds d'application Ionic, définissez ionic_generate_source_map sur false dans votre fichier package.json.
"dependencies": {
...
}
"config": {
"ionic_generate_source_map": "false",
},
Alternativement, si le build est généré à partir de la ligne de commande, assurez-vous que l'indicateur --generateSourceMap est défini sur false.
iOS/Android natif :
Les fichiers source map ne sont généralement pas utilisés dans le développement natif iOS et Android. Cependant, si vous utilisez des outils ou des bibliothèques qui génèrent des source maps, assurez-vous qu'ils sont configurés pour exclure la génération de source map pour les versions de production (release).
Autres frameworks :
Pour d'autres frameworks comme PhoneGap ou Cordova, les fichiers sourcemap ne sont pas générés par défaut. Cependant, si vous utilisez des outils ou plugins supplémentaires qui génèrent des source maps, vous devrez les configurer pour exclure la génération de source map pour les versions de production.
Liens
Normes
- 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