Saltar a contenido

Source Map Code Leak

Fuga de código a través de Source Map

Descripción

La aplicación debe proporcionar la menor cantidad posible de información explicativa con el código compilado. Los metadatos como la información de depuración, los números de línea y los nombres descriptivos de funciones o métodos facilitan la ingeniería inversa del binario o del código de bytes.

La aplicación filtra el código fuente a través de archivos source map que se utilizan únicamente para depuración y desarrollo.

El código fuente puede recuperarse por completo con el siguiente script de muestra:

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 fuga de código fuente puede ayudar a los atacantes a falsificar fácilmente aplicaciones maliciosas o comprender los aspectos internos de la aplicación para identificar vulnerabilidades.

Recomendación

Para eliminar los archivos source map en el momento de la compilación, siga la guía correspondiente:

React Native:

En Android, los source maps están habilitados pero no se generan de forma predeterminada. Sin embargo, solo se generan cuando hermesFlags está presente en android/app/build.gradle y se configura la opción -output-source-map.

En iOS, los source maps están deshabilitados por defecto.

Ionic:

Para excluir los archivos sourcemap de las compilaciones de aplicaciones Ionic, configure ionic_generate_source_map como false en su archivo package.json

"dependencies": {
   ...
}
"config": {
   "ionic_generate_source_map": "false",
},

Alternativamente, si la compilación se genera desde la línea de comandos, asegúrese de que el indicador --generateSourceMap esté configurado en false.

iOS/Android nativo:

Los archivos source map generalmente no se utilizan en el desarrollo nativo de iOS y Android. Sin embargo, si utiliza alguna herramienta o biblioteca que genere source maps, asegúrese de que estén configuradas para excluir la generación de source maps en las compilaciones de producción (release).

Otros frameworks:

Para otros frameworks como PhoneGap o Cordova, los archivos sourcemap no se generan por defecto. Sin embargo, si está utilizando herramientas o complementos adicionales que generan source maps, deberá configurarlos para excluir la generación de source maps en las compilaciones de producción.

Enlaces

Estándares

  • 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