
ビットコイン暗号解析:CVE-2025-27840 ESP32マイクロコントローラの脆弱性がWi-Fi & Bluetooth経由で数十億のIoTデバイスを危険にさらす
本稿では、攻撃者がモジュールアップデートを介して隠された脆弱性リストを導入し、ESP32デバイスを危険にさらし、秘密鍵への不正アクセスを取得する方法について説明します。これにより、このマイクロコントローラを使用する数十億のデバイスが影響を受けます。主要な問題の一つは、ESP32アーキテクチャで発見されたCVE-2025-27840脆弱性です。ビットコインネットワークのセキュリティを確保するために、以下の脆弱性を特定しました。関数has_invalid_privkeyにおける下限チェック欠如による無効な秘密鍵の使用可能性、関数electrum_sig_hashにおけるBIP-137非互換性によるトランザクション署名偽造の脆弱性、弱いPRNG問題(鍵生成関数random_keyにより、暗号通貨ウォレットの個人秘密鍵が予測可能になる)、関数multiplyにおけるECC曲線上の点の検証欠如(無効な曲線攻撃につながる可能性)、関数ecdsa_raw_signにおけるY座標復元時の脆弱性(公開鍵の置換につながる可能性)、およびbin_ripemd160における非推奨のハッシュAPIに関連する脆弱性です。
2025年3月初旬、Tarlogic Securityは、WiFiおよびBluetoothを介したデバイス接続に広く使用されているESP32マイクロコントローラに脆弱性を特定しました。この脆弱性は番号CVE-2025-27840で登録されました。攻撃者は、ESP32チップを、ビットコインやイーサリアムなどの人気暗号通貨のネットワーク上で動作するデバイスに対する暗号攻撃のポイントとして使用することで、ビットコインウォレットのデータに不正アクセスできます。この問題は、このマイクロコントローラを使用する数百万のIoTデバイスに影響を及ぼします。この脆弱性を悪用すると、攻撃者は正規ユーザーを装った攻撃を実行し、脆弱なデバイスに永続的に感染させることが可能になります。これは、ESP32マイクロコントローラベースのIoTデバイスのセキュリティを脅かし、ビットコインウォレットの秘密鍵の盗難につながる可能性があります。
ESP32は、IoTデバイスにWi-FiおよびBluetooth接続を提供するために広く使用されているマイクロコントローラです。攻撃者は、ESP32を介してビットコインウォレットの秘密鍵データにアクセスするために、さまざまな方法を使用する可能性があります。
ESP32マイクロコントローラに関連するセキュリティ上の脅威は、ビットコインウォレットの秘密鍵の盗難につながる可能性があります。主な問題には、バックドアや脆弱性の存在が含まれます。このような脆弱性を利用することで、メモリの操作、MACアドレスの偽装、悪意のあるコードの注入が可能になり、深刻なセキュリティリスクを生み出します。
攻撃者は、BluetoothおよびWi-Fi接続の脆弱性を利用して、ESP32マイクロコントローラを搭載したIoTデバイスを攻撃できます。これにより、ビットコイン関連ネットワーク上の他のデバイスを攻撃するためのツールとなる可能性があり、ビットコインウォレットの秘密鍵を含む機密情報を盗むことも可能です。
攻撃者はモジュールを更新し、コードにさまざまな脆弱性のリストを導入する可能性があります。これには以下が含まれます。
has_invalid_privkeyの脆弱性。秘密鍵の取得に使用される可能性があります。electrum_sig_hashの脆弱性。ビットコイントランザクション署名の偽造を可能にします。random_keyの脆弱性。弱い疑似乱数生成器(非決定論的PRNG)に関連します。multiplyの脆弱性。ECC曲線上の点のチェックがありません。ecdsa_raw_signおよびbin_ripemd160の脆弱性。これらの脆弱性は、ESP32デバイスに偽のアップデートを注入するために使用される可能性があり、攻撃者にシステムへの低レベルアクセスを提供します。これにより、コード監査の制御をバイパスし、秘密鍵へのアクセスを取得できるようになります。現在、アーキテクチャ内の単一コンポーネントの隠された機能により、CVE-2025-27840として指定されたこの脆弱性の影響を受けるデバイスは数十億に上る可能性があります。
has_invalid_privkey における秘密鍵取得の脆弱性この脆弱性はビットコインの秘密鍵検証コードで発見され、下限チェックの欠如により、無効な鍵(0以下)が使用される可能性があります。これは資金の損失につながる可能性があります。修正するには、秘密鍵が0より大きいことを確認するチェックを追加する必要があります。コードはデモンストレーション目的で提供されています。
https://github.com/primal100/pybitcointools/blob/e7c96bfe1f4be08a9f3c540e598a73dc20ca2462/cryptos/main.py#L305このバグにより、不正な秘密鍵が使用される可能性があり、資金の損失を含む深刻な問題を引き起こす可能性があります。
修正するには、秘密鍵が0より大きいことを確認するチェックを追加する必要があります。
誰かがビットコインネットワークを「ハッキング」しようとしていると想像してください。彼らは、暗号通貨へのアクセスに使用される秘密鍵の検証に弱点を見つけます。
問題は、コードが秘密鍵が大きすぎるかどうかのみをチェックすることです。鍵が非常に大きい場合、拒否されます。しかし、コードは鍵が小さすぎる(0以下)かどうかのチェックを忘れています。
これが発生するコードセクション:
...
...if privkey >= N: #上限のみチェック下限が適切にチェックされていない
raise Exception("Invalid privkey")
if privkey <= 0: #
return True
...
...
このバグにより、無効な(非常に小さい)秘密鍵を使用することが可能です。この脆弱性は関数has_invalid_privkeyにあります。
これを機能させるには、ライブラリecdsa(暗号処理に必要)をインストールする必要があります:

Pythonスクリプト secp256k1_privkey_validator.py