コンテンツにスキップ

Source Map Code Leak

ソースマップからのコード漏洩

説明

アプリケーションは、コンパイルされたコードとともに、説明的な情報をできるだけ提供しないようにする必要があります。デバッグ情報、行番号、記述的な関数名やメソッド名などのメタデータは、バイナリやバイトコードの リバースエンジニアリングを容易にします。

アプリケーションは、デバッグおよび開発の目的にのみ使用されるソースマップファイルを通じてソースコードを漏洩しています。

ソースコードは、以下のサンプルスクリプトを使用して完全に復元することができます:

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)

ソースコードの漏洩は、攻撃者が悪意のあるアプリケーションを簡単に偽造したり、アプリケーションの内部構造を理解して脆弱性を特定したりするのに役立ちます。

推奨事項

ビルド時にソースマップファイルを削除するには、対応するガイドに従ってください:

React Native:

Androidでは、ソースマップは有効になっていますが、デフォルトでは生成されません。ただし、android/app/build.gradlehermesFlagsが存在し、-output-source-mapオプションが設定されている場合にのみ生成されます。

iOSでは、ソースマップはデフォルトで無効になっています。

Ionic:

Ionicアプリケーションのビルドからソースマップファイルを除外するには、package.jsonファイルでionic_generate_source_mapfalseに設定します。

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

または、ビルドがコマンドラインから生成される場合は、--generateSourceMapフラグがfalseに設定されていることを確認してください。

ネイティブ iOS/Android:

ソースマップファイルは、一般的にネイティブのiOSおよびAndroid開発では使用されません。しかし、ソースマップを生成するツールやライブラリを使用している場合は、リリースビルド向けにソースマップの生成を除外するように設定されていることを確認してください。

その他のフレームワーク:

PhoneGapやCordovaのような他のフレームワークでは、ソースマップファイルはデフォルトでは生成されません。しかし、ソースマップを生成する追加のツールやプラグインを使用している場合は、本番ビルド向けにソースマップの生成を除外するように設定する必要があります。

リンク

標準

  • 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