
Bitcoin Cryptanalysis: ESP32 마이크로컨트롤러의 CVE-2025-27840 취약점이 Wi-Fi 및 Bluetooth를 통해 수십억 개의 IoT 기기를 위험에 빠뜨립니다
이 논문은 공격자가 모듈 업데이트를 통해 숨겨진 취약점 목록을 도입할 수 있는 방법을 논의하며, 이는 ESP32 기기 손상 및 개인 키에 대한 무단 액세스로 이어져 이 마이크로컨트롤러를 사용하는 수십억 개의 기기에 영향을 미칠 수 있습니다. 핵심 문제 중 하나는 ESP32 아키텍처에서 발견된 CVE-2025-27840 취약점입니다. 비트코인 네트워크의 보안을 보장하기 위해 우리는 다음과 같은 취약점을 식별했습니다: has_invalid_privkey 함수의 하한 검사 부재로 인해 유효하지 않은 개인 키를 사용할 가능성; BIP-137 비호환성으로 인한 electrum_sig_hash 함수의 트랜잭션 서명 위조 취약점; 키 생성 함수 random_key의 약한 PRNG 문제로 인해 암호화폐 지갑의 개인 키가 예측 가능해지는 문제; multiply 함수에서 ECC 곡선 위 점 검증 부재로 인해 잘못된 곡선 공격(Invalid Curve Attack)이 발생할 수 있는 문제; Y-좌표 복원 시 ecdsa_raw_sign 함수의 취약점으로 인해 공개 키가 대체될 수 있는 문제; 그리고 bin_ripemd160에서 더 이상 사용되지 않는 해싱 API와 관련된 취약점.
2025년 3월 초, Tarlogic Security는 WiFi 및 Bluetooth를 통해 기기를 연결하는 데 널리 사용되는 ESP32 마이크로컨트롤러에서 취약점을 식별했습니다. 이 취약점은 CVE-2025-27840 번호로 등록되었습니다. 공격자는 ESP32 칩을 비트코인 및 이더리움과 같은 인기 있는 암호화폐 네트워크에서 실행되는 기기에 대한 암호화 공격의 지점으로 사용하여 비트코인 지갑 데이터에 무단으로 액세스할 수 있습니다. 이 문제는 이 마이크로컨트롤러를 사용하는 수백만 개의 IoT 기기에 영향을 미칩니다. 이 취약점을 악용하면 공격자는 합법적인 사용자로 위장한 공격을 수행하고 취약한 기기를 영구적으로 감염시킬 수 있습니다. 이는 ESP32 마이크로컨트롤러 기반 IoT 기기의 보안을 위협하고 비트코인 지갑의 개인 키 탈취로 이어질 수 있습니다.
ESP32는 Wi-Fi 및 Bluetooth 연결을 제공하기 위해 IoT 기기에서 널리 사용되는 마이크로컨트롤러입니다. 공격자는 ESP32를 통해 비트코인 지갑의 개인 키 데이터에 액세스하기 위해 다양한 방법을 사용할 수 있습니다.
ESP32 마이크로컨트롤러와 관련된 보안 위협은 비트코인 지갑의 개인 키 탈취로 이어질 수 있습니다. 주요 문제로는 백도어와 취약점의 존재가 있습니다. 이러한 취약점을 이용하면 메모리를 조작하고 MAC 주소를 스푸핑하며 악성 코드를 주입할 수 있어 심각한 보안 위험을 초래합니다.
공격자는 Bluetooth 및 Wi-Fi 연결의 취약점을 이용해 ESP32 마이크로컨트롤러가 장착된 IoT 기기를 공격할 수 있으며, 이는 비트코인 관련 네트워크의 다른 기기를 공격하는 도구가 될 수 있을 뿐만 아니라 비트코인 지갑의 개인 키를 포함한 기밀 정보를 탈취하는 데 사용될 수 있습니다.
공격자는 모듈을 업데이트하여 코드에 다양한 취약점 목록을 도입할 수 있습니다. 여기에는 다음이 포함됩니다:
has_invalid_privkey 함수의 취약점으로 개인 키를 얻는 데 사용될 수 있습니다.electrum_sig_hash 함수의 취약점으로 비트코인 트랜잭션 서명을 위조할 수 있습니다.random_key 함수의 취약점.multiply 함수의 취약점.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: #Checking only the upper boundLower bound is not checked properly
raise Exception("Invalid privkey")
if privkey <= 0: #
return True
...
...
이 버그로 인해 유효하지 않은(매우 작은) 개인 키를 사용할 수 있습니다. 이 취약점은 has_invalid_privkey 함수에 있습니다.
이 모든 것이 작동하려면 ecdsa 라이브러리를 설치해야 합니다(암호화 작업에 필요합니다):

Python 스크립트 secp256k1_privkey_validator.py