完全性を検証しないリモートコードのダウンロード

完全性を検証しないリモートコードのダウンロード

説明

リモートから取得したスクリプトやプラグインを、ハッシュ、署名、固定された信頼の連鎖で検証せずに保存・実行すると、改ざんされたコードがアプリケーションの権限で動作するおそれがあります。

想定される影響

  • 通信の改ざんやリポジトリーの侵害により、悪意あるコードが実行される可能性があります。
  • 配備先に永続的なバックドアや任意のファイルが設置されるおそれがあります。

対処方法

  • ダウンロードしたコードのSHA-256ハッシュまたはデジタル署名を検証してください。
  • 可能であれば実行時のダウンロードを避け、パッケージマネージャー、ロックファイル、署名検証を利用してください。

例

変更前

python
code = requests.get(url).text
exec(code)

変更後

python
data = requests.get(url, timeout=5).content
digest = hashlib.sha256(data).hexdigest()
if not hmac.compare_digest(digest, expected_digest):
    raise ValueError("bad digest")

解説:

  • 変更前: スクリプトやプラグインを、ハッシュ、署名、固定された信頼の連鎖で検証せずに実行しています。通信の改ざん、リポジトリーの侵害、DNSの改ざんによって悪意あるコードが混入する可能性があります。
  • 変更後: ダウンロードしたコードのSHA-256ハッシュや署名を、固定された信頼できる基準と照合します。

参考資料