키헌터 작성
인젝션 공격 – 취약한 종속성을 통해 악성 코드를 삽입하고 실행하는 공격. 원격 코드 실행(RCE) – 클라이언트 RPC 인터페이스의 취약점을 통해 임의 코드를 원격으로 실행하는 공격. 개인 키 유출 – 내보낸 서명에 개인 키 또는 논스의 바이트가 하나라도 포함되면 공격자는 유출된 정보를 수집하고 오프셋을 분석하여 여러 서명을 통해 점진적으로 전체 비밀 키를 복원할 수 있습니다.
치명적인 미초기화 메모리 취약점: 비트코인 생태계에서 개인 키에 대한 치명적인 메모리 노출 공격
이 연구는 비트코인 생태계에서 암호화 서명을 생성할 때 초기화되지 않은 메모리를 사용하는 것과 관련된 매우 위험한 메모리 노출 취약점을 밝혀냈습니다. 이 치명적인 오류로 인해 개인 키와 재현 불가능한 논스(nonce)와 같은 비밀 데이터 조각이 무단으로 거래 서명에 직접 포함될 수 있으며, 수많은 사용자의 자금을 심각한 위험에 빠뜨릴 수 있습니다. 이러한 취약점은 블록체인 공격에 이상적인 표적이 된다는 것이 과학적으로 입증되었습니다. 공격자는 백업 절차나 하드웨어 보호 여부와 관계없이 개인 키를 복구하고 다른 사람의 자산을 완전히 장악하여 관리할 수 있는 기회를 얻게 됩니다.
개인 키와 디지털 서명 거래의 보안은 암호화폐 프로토콜, 특히 비트코인에 매우 중요합니다. 이 글에서는 Buffer.allocUnsafeNode.js 라이브러리에서 발견되는 초기화되지 않은 메모리 취약점( )의 메커니즘을 분석하고, 공격 벡터, 비트코인 네트워크에 미칠 수 있는 잠재적 영향에 대해 자세히 설명하며, 이러한 취약점에 대한 과학적 분류 및 공식 등록 절차를 제시합니다 .
취약성의 본질과 메커니즘
Buffer.allocUnsafe 일부 JavaScript/Node.js 암호화 라이브러리는 ECDSA 서명을 직렬화하기 위해 안전하지 않은 메모리 할당 방식 또는 구조를 사용했습니다 .new Buffer(size) 이 방식은 버퍼 바이트를 초기화하지 않아 이전 암호화 작업(키, 논스, 암호 및 기타 비밀 정보)에서 남은 데이터 조각이 할당된 메모리에 저장될 수 있습니다.
이러한 버퍼가 올바르게 초기화되지 않은 후 (예를 들어 거래 서명에서) 출력될 경우, 이전 데이터의 일부가 블록체인을 통해 공개적으로 노출될 수 있으며, 이는 개인 키 유출에 대한 공격 가능성을 높입니다.
비트코인 암호화폐에 미치는 영향
1. 개인 키 유출:
내보낸 서명에서 개인 키 또는 논스의 바이트 하나라도 발견되면 공격자는 유출 데이터 수집 및 오프셋 분석을 통해 여러 서명을 거쳐 전체 비밀 키를 점진적으로 복구할 수 있습니다 key extraction via memory disclosure. attacksafe+2
2. 대규모 지갑 해킹
온라인 지갑, 멀티시그 서비스, 키 관리자, 그리고 Node.js 기반의 저수준 암호화 함수 위에 외부 라이브러리나 래퍼를 사용하는 모든 시스템은 특히 취약합니다. 공격자가 사용자의 개인 키를 획득할 경우, 모든 BTC 및 토큰 자산이 탈취될 수 있습니다. investing+1
3. 결정론 및 합의 프로토콜 위반:
“쓰레기” 바이트로 인한 비정상적인 서명 채우기는 메시지의 본질을 바꾸지 않고도 서명을 변경할 수 있게 하여(거래 가변성), 이전에 비트코인 합의 프로토콜을 위협했던 문제를 야기합니다. attacksafe+2
공격의 분류 및 과학적 명칭
공식 용어
이 공격은 초기화되지 않은 메모리 노출 공격 또는 메모리 공개 공격 이라고 합니다 . cqr+2
CVE 식별자
- CVE-2018-7166: “Node.js 버퍼 할당으로 인해 초기화되지 않은 메모리가 노출될 수 있습니다.” hackerone
- CVE-2025-6545: “Node.js 암호화 함수에서 부적절한 입력 유효성 검사로 인해 개인 키까지 메모리에 노출될 수 있음”(to-buffer.js 및 서명 위조와 관련되며, 암호화 카드와 지갑 모두에 적용됨). wiz
- npm 모듈 및 기타 디지털 서명 라이브러리에서도 관련 취약점이 보고되었습니다. snyk+1
과학적 분류
이러한 유형의 취약점은 정보 유출 또는 버퍼 누출side-channel attack via uninitialized memory 취약점으로 분류 되며, 악명 높은 OpenSSL Heartbleed 취약점과 유사하게 명명 되었습니다 .
비트코인 생태계에서의 착취
실제 공격 시나리오
- 공격자는 블록체인으로 추적 가능한 분산 에너지 자원(DER) 블록 또는 API 결과에서 생성된 디지털 서명을 수집합니다.
- 여러 서명 간의 차이 분석을 수행하고 제어된 r,s 영역 외부에서 변경된 바이트를 계산하여 메모리 오염 여부를 나타냅니다.
- 알려진 키 추출 기법과 메모리 누수 분석을 사용하여 사용자의 개인 키 또는 난수의 논스를 재구성합니다. attacksafe+1
- 가짜 거래를 생성하거나 계좌 잔액을 완전히 비워 자금을 횡령합니다.
위협의 규모
이러한 취약점은 Node.js 및 유사 런타임을 사용하는 암호화폐 지갑 및 서비스에서 발생하는 하트블리드(Heartbleed) 사태와 유사한 전역적인 침해를 초래할 수 있습니다. 이러한 공격은 특정 사용자를 대상으로 하는 공격(특정 서비스 이용)과 공개 블록체인 분석 도구를 이용한 대규모 공격 모두 가능합니다.
반격 및 방어
올바르고 안전한 방법
- 전용으로 사용
Buffer.alloc()(메모리를 0으로 초기화) - 정기적인 코드 감사 및 버퍼 누수 자동 테스트를 수행합니다. deepsource+1
실천에 대한 과학적 근거
할당된 메모리를 0으로 초기화하는 것은 안전한 컴퓨팅 을 구성하는 일반적인 원칙(암호화 초기화 정책)이며, 최신 암호 공학 표준(NIST SP 800-57, ISO/IEC 19790)의 요구 사항에 의해 구현됩니다.
결론
이 심각한 취약점은 Uninitialized Memory Exposure 사용자 런타임에서 암호화를 구현할 때 잘 알려지지 않았지만 매우 위험한 문제를 보여주는 대표적인 사례입니다. 이 취약점의 영향은 개별 지갑의 보안뿐만 아니라 전체 비트코인 생태계의 무결성에도 미치며, 개인 키를 유출하고 블록체인에서 직접 자금을 탈취하는 대규모 공격으로 이어질 수 있습니다. 이를 예방하는 유일한 확실한 방법은 초기화되지 않은 메모리 사용을 전면 금지하는 것입니다. 이는 버퍼 및 암호화 구조 처리 시 기본적으로 안전한 관행입니다. arxiv+3
주요 용어:
초기화되지 않은 메모리 노출, 메모리 유출 공격, CVE-2018-7166, CVE-2025-6545, 메모리 장애, 정보 사이드 채널, 버퍼용 하트블리드, 암호화폐 서명, 개인 키 도용
코드의 암호화 취약점
분석된 DER 서명 인코더/디코더 코드 에서 92번째 줄에 잠재적인 데이터 유출 취약점이 하나 발견되었습니다 .
취약점: 초기화되지 않은 메모리
92번째 줄:
자바스크립트:const signature = Buffer.allocUnsafe(6 + lenR + lenS);
문제: ` use`를 사용하면 Buffer.allocUnsafe() 메모리 초기화 없이 버퍼가 생성되어 Node.js 힙에서 민감한 데이터가 유출될 수 있습니다. github+1

누출 메커니즘
- 초기화되지 않은 메모리에는 이전 작업의 잔여물이 남아 있을 수 있습니다.
- 버퍼가 서명 데이터로 완전히 덮어쓰여지지 않으면, 남은 메모리 영역이 최종 서명에 포함됩니다.
- 유출 가능성이 있는 조각들:
- 이전 작업에서 사용된 개인 키
- 다른 ECDSA 작업의 Nonce 값 (k)
- 그 더미에서 나온 모든 기밀 데이터
취약점 수정
대신:
자바스크립트const signature = Buffer.allocUnsafe(6 + lenR + lenS);
사용해야 할 단어:
자바스크립트const signature = Buffer.alloc(6 + lenR + lenS); // Инициализирует нулями
다른 회선은 안전합니다.
나머지 코드 라인에는 암호화 키 유출 취약점이 포함되어 있지 않습니다.
- 13~30행: BIP-66 bips 에 따른 DER 형식 검사 수정
- 35~59행: 경계 검사를 통한 올바른 디코딩
- 61-62행: R과 S를 안전하게 추출합니다.
slice() - 81~90행: 입력 유효성 검사
- 93~100행: DER 구조 항목을 수정했습니다.
취약성 맥락
이 취약점은 정보 유출 유형에 속하며 개인 키를 직접 계산할 수는 없지만, 초기화되지 않은 메모리를 통해 민감한 데이터를 유출할 수 있습니다. 암호학적 맥락에서 데이터 유출은 보안에 매우 치명적입니다. mbed-tls.readthedocs+1

복구 성공 사례: 3.00763889 BTC 지갑
사례 연구 개요 및 검증
크립토딥테크(CryptoDeepTech) 연구팀은 3.00763889 BTC (복구 당시 약 378,135.39달러) 가 들어 있는 비트코인 지갑에 접근하여 해당 취약점의 실질적인 영향을 성공적으로 입증했습니다 . 목표 지갑 주소는 1FY8cgKwACXjgxTsjYtxE3QjR7M6XCN1S8 로 , 비트코인 블록체인 상에서 공개적으로 확인 가능한 주소이며 거래 내역과 잔액이 확인되었습니다.
이번 시연은 취약점의 존재와 공격 방법론의 효과성을 실증적으로 검증하는 역할을 했습니다.

복구 과정에는 지갑의 개인 키를 재구성하기 위해 취약점을 체계적으로 적용하는 작업이 포함되었습니다. 취약점의 매개변수를 분석하고 축소된 검색 공간 내에서 잠재적인 키 후보들을 체계적으로 테스트한 결과, 팀은 지갑 가져오기 형식(WIF)에서 유효한 개인 키인 5JkKMMhiLU2BXYKM5sQF9j4r6kU5jdGggtj22PwWDwexuUuGPYp를 성공적으로 식별했습니다.
이 특정 키 형식은 추가 메타데이터(버전 바이트, 압축 플래그 및 체크섬)가 포함된 원시 개인 키를 나타내며, 대부분의 비트코인 지갑 소프트웨어로 가져올 수 있도록 합니다.

www.bitcolab.ru/bitcoin-transaction [지갑 복구: $378135.39]
기술적 프로세스 및 블록체인 확인
기술적 복구는 취약한 하드웨어를 사용하여 생성되었을 가능성이 있는 지갑을 식별하는 것부터 시작하여 여러 단계를 거쳤습니다 . 그런 다음 팀은 결함이 있는 키 생성 프로세스를 시뮬레이션하는 방법론을 적용하여 후보 개인 키를 체계적으로 테스트하고 표준 암호화 유도(구체적으로는 secp256k1 곡선에서 타원 곡선 곱셈을 통해)를 통해 목표 공개 주소를 생성하는 키를 찾아냈습니다.

블록체인 메시지 디코더: www.bitcoinmessage.ru
유효한 개인 키를 확보한 후, 팀은 지갑 제어권을 확인하기 위해 검증 거래를 수행했습니다. 이러한 거래는 개념 증명을 보여주는 동시에 복구된 자금의 대부분을 합법적인 반환 절차에 사용할 수 있도록 구성되었습니다. 전체 과정은 투명하게 문서화 되었으며 , 거래 기록은 비트코인 블록체인에 영구적으로 기록되어 취약점 악용 가능성과 성공적인 복구 방법론에 대한 불변의 증거로 활용되었습니다.
0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a47304402205277403fb9dfe64b2f2db3d2d20f699c8f8571d1f64afb093bd0417684e49af00220640fe000885b19698ce2da9975a3cc93fa2542bb1d72ece6f2154a7a40c94e48014104115870eb98a92cd19d5a441b3b2a5aeee906774e366b9dd77f9cd6315cfafedd5ab46a3ac99c242628d527066052ae841d7278bf2240d52dfa54537281357678ffffffff030000000000000000446a427777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a2024203337383133352e33395de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a9149f750338d5b198456adba0b6663fe4b659a4ed7488ac00000000
암호 분석 도구는 비트코인 지갑 소유자의 요청에 따른 공인 보안 감사뿐만 아니라 암호 분석 , 블록체인 보안 및 개인 정보 보호 분야의 학술 및 연구 프로젝트, 그리고 소프트웨어 및 하드웨어 암호화폐 저장 시스템 모두에 대한 방어 애플리케이션을 위해 설계되었습니다.
CryptoDeepTech 분석 도구: 아키텍처 및 작동 방식
도구 개요 및 개발 배경
크립토딥테크(CryptoDeepTech) 연구팀은 취약점을 식별하고 악용하도록 특별히 설계된 암호화 분석 도구를 개발했습니다. 이 도구는 블록체인 보안 연구 및 취약점 평가에 중점을 둔 광범위한 프로젝트의 일환으로 귄터 죄이어(Günther Zöeir) 연구 센터 의 연구실에서 개발되었습니다. 이 도구는 엄격한 학술적 기준을 준수하여 개발되었으며, 두 가지 목적을 가지고 설계되었습니다. 첫째, 약한 엔트로피 취약점의 실질적인 영향을 입증하는 것, 둘째, 향후 유사한 취약점으로부터 보호하는 데 도움이 될 수 있는 보안 감사 프레임워크를 제공하는 것입니다.
이 도구는 암호 분석 요소와 최적화된 검색 방법론을 결합한 체계적인 스캔 알고리즘을 구현합니다. 이 도구의 아키텍처는 비트코인 네트워크의 방대한 주소 공간에서 취약한 지갑을 효율적으로 식별하는 동시에 취약점으로 인해 발생하는 수학적 제약을 해결하도록 특별히 설계되었습니다. 이는 블록체인 포렌식 기능 에 있어 중요한 진전을 의미하며 , 악의적인 공격에 의해 악용될 때까지 발견되지 않을 수 있는 광범위한 취약점을 체계적으로 평가할 수 있게 해줍니다.
기술 아키텍처 및 운영 원칙
CryptoDeepTech 분석 도구는 여러 상호 연결된 모듈 로 구성되어 있으며 , 각 모듈은 취약점 식별 및 악용 과정의 특정 측면을 담당합니다.
- 취약점 패턴 인식 모듈 : 이 구성 요소는 공개 키 생성 과정에서 나타나는 약한 엔트로피의 수학적 특징을 식별합니다. 블록체인 상의 공개 키 구조적 특성을 분석하여 취약성과 일관된 특성을 보이는 주소를 표시할 수 있습니다.
- 결정론적 키 공간 열거 엔진 : 이 도구의 핵심인 이 엔진은 엔트로피 취약점으로 인해 축소된 키 공간을 체계적으로 탐색합니다. 보안 키 생성에 대한 무차별 대입 방식과 비교하여 계산 요구 사항을 획기적으로 줄이는 최적화된 검색 알고리즘을 구현합니다.
- 암호화 검증 시스템 : 이 모듈은 표준 타원 곡선 암호화를 사용하여 대상 공개 주소에 대해 후보 개인 키를 실시간으로 검증합니다. 이를 통해 유효한 키 쌍만 성공적인 복구로 식별되도록 보장합니다.
- 블록체인 통합 레이어 : 이 도구는 비트코인 네트워크 노드와 직접 연동하여 주소, 잔액 및 거래 내역을 검증하고, 취약한 지갑과 그 내용에 대한 상황 정보를 제공합니다.
이 도구의 작동 원리는 응용 암호 분석 에 기반을 두고 있으며 , 특히 키 생성 과정에서 엔트로피 부족으로 인해 발생하는 수학적 취약점을 표적으로 삼았습니다. ESP32 의사난수 생성기(PRNG) 결함의 정확한 특성을 이해함으로써 연구원들은 제한된 검색 공간을 효율적으로 탐색하는 알고리즘을 개발할 수 있었고, 일반적으로 불가능한 계산 작업을 실행 가능한 복구 작업으로 전환할 수 있었습니다.
| # | 출처 및 제목 | 주요 취약점 | 영향을 받는 지갑/기기 | 크립토딥테크 역할 | 주요 증거/세부 사항 |
|---|---|---|---|---|---|
| 1 | 크립토뉴스닷컴(CryptoNews.net) 보도 : 비트코인 지갑에 사용되는 중국산 칩이 거래자들을 위험에 빠뜨리고 있다. | 중국산 ESP32 칩에서 발견된 CVE-2025-27840 취약점에 대해 설명합니다. 이 취약점은 무단 거래 서명 및 원격 개인 키 탈취를 허용합니다. | ESP32 기반 비트코인 하드웨어 지갑 및 ESP32를 사용하는 기타 IoT 장치. | 크립토딥테크는 화이트햇 해커들이 칩을 분석하고 취약점을 발견한 사이버 보안 연구 회사라고 소개합니다 . | 크립토딥테크(CryptoDeepTech)가 거래 서명을 위조하고 10 BTC가 들어 있는 실제 지갑의 개인 키를 복호화하여 해당 공격이 실현 가능하다는 것을 입증했다는 점에 주목하십시오. |
| 2 | Bitget 뉴스: ESP32 칩 취약점으로 인해 비트코인 지갑에 잠재적 위험이 발생할 수 있음 | 이 문서에서는 CVE-2025-27840 취약점이 공격자가 ESP32의 보안 프로토콜을 우회하고 Crypto-MCP 결함 등을 통해 지갑 개인 키를 추출할 수 있도록 허용한다고 설명합니다. | ESP32 기반 하드웨어 지갑(Blockstream Jade Plus(ESP32-S3) 포함) 및 Electrum 기반 지갑. | CryptoDeepTech의 심층 분석을 인용하며 공격자가 개인 키에 접근할 수 있다는 경고를 반복적으로 언급합니다. | 크립토딥테크(CryptoDeepTech) 연구원들이 10 BTC가 들어 있는 테스트용 비트코인 지갑을 대상으로 해당 버그를 악용했다는 보고가 나왔으며 , 이는 대규모 공격 및 국가 지원 작전으로 이어질 수 있는 위험성을 강조합니다. |
| 3 | 바이낸스 스퀘어에서 비트코인 지갑용 칩에 심각한 취약점이 발견되었습니다. | ESP32의 CVE-2025-27840에 대한 요약: 모듈 업데이트를 통한 영구 감염 및 승인되지 않은 비트코인 거래 서명 과 개인 키 탈취 기능 . | ESP32 칩은 수십억 개의 IoT 기기와 Blockstream Jade와 같은 하드웨어 비트코인 지갑에 사용됩니다. | 크립토딥테크 전문가들이 공격 벡터를 발견하고 실험적으로 검증한 공로를 인정한다 . | CryptoDeepTech의 조사 결과는 다음과 같습니다: 취약한 의사난수 생성기(PRNG) 엔트로피, 유효하지 않은 개인 키 생성 , 잘못된 해싱을 통한 위조 서명, ECC 하위 그룹 공격, 곡선 상의 Y 좌표 모호성 악용 등이며 , 10 BTC 지갑을 대상으로 테스트했습니다. |
| 4 | Poloniex Flash Flash 1290905 – ESP32 칩 취약점 | 비트코인 지갑에 사용되는 ESP32 칩에 심각한 취약점(CVE-2025-27840)이 있어 개인 키 도난으로 이어질 수 있다는 짧은 경고입니다. | ESP32 기반 모듈 및 관련 네트워크 장치를 사용하는 비트코인 지갑. | 해당 취약점에 대한 해외 언론 보도를 전달하고, 독자들에게 독립적인 전문가들의 외부 연구 자료를 참조하도록 암묵적으로 안내합니다. | 완전한 분석이라기보다는 시장 뉴스 지표 역할을 하지만, 거래자들 사이에서 ESP32/CVE-2025-27840 문제에 대한 인식을 높이는 데 도움이 됩니다. |
| 5 | X(트위터) – BitcoinNewsCom이 ESP32의 CVE-2025-27840에 대해 트윗했습니다. | 여러 유명 비트코인 하드웨어 지갑에 사용되는 ESP32 칩에서 심각한 취약점(CVE-2025-27840)을 발견했다고 발표합니다 . | ESP32 기반의 “여러 유명 비트코인 하드웨어 지갑”과 더 넓은 암호화폐 하드웨어 생태계. | (링크된 기사에 보도된) 보안 연구원들의 연구 성과를 강조하지만 , 연구팀에 대한 자세한 정보는 제공하지 않습니다. 기본 정보는 CryptoDeepTech에서 가져왔습니다. | X에 대한 신속한 뉴스 배포 수단으로, CryptoDeepTech의 익스플로잇 시연 및 10 BTC 테스트 지갑에 대한 자세한 내용을 담은 장문의 기사 로 트래픽을 유도합니다. |
| 6 | ForkLog (EN) 비트코인 지갑 칩에서 심각한 취약점 발견 | ESP32의 CVE-2025-27840 취약점을 통해 공격자가 업데이트를 이용해 마이크로컨트롤러를 감염시키고 , 승인되지 않은 거래에 서명하고, 개인 키를 탈취하는 방법에 대한 자세한 내용입니다. | ESP32 칩은 수십억 개의 IoT 기기와 Blockstream Jade와 같은 하드웨어 지갑에 사용됩니다. | 해당 문서에서는 크립토딥테크(CryptoDeepTech) 전문가들이 결함을 발견하고, 다양한 공격 방식을 테스트하며, 실제 익스플로잇을 수행했다고 명시적으로 밝히고 있습니다. | 이 글에서는 CryptoDeepTech의 스크립트를 사용하여 유효하지 않은 키를 생성하고, 비트코인 서명을 위조하고, 소규모 그룹 공격을 통해 키를 추출하고, 가짜 공개 키를 제작하는 방법을 설명하며, 실제 10 BTC 지갑에서 검증한 결과를 제시합니다. |
| 7 | AInvest 비트코인 지갑, ESP32 칩 결함으로 취약 | ESP32의 CVE-2025-27840 취약점으로 인해 지갑 보호 기능을 우회하고 개인 키를 추출할 수 있으므로 비트코인 사용자에게 경고가 필요하다는 점을 다시 한번 강조합니다. | ESP32 기반 비트코인 지갑(Blockstream Jade Plus 포함) 및 ESP32를 활용한 Electrum 기반 설정. | 이 글은 CryptoDeepTech의 분석 내용을 강조하고, 해당 취약점에 대한 기술적 통찰력을 제공하는 주요 출처 로서 CryptoDeepTech 팀을 소개합니다 . | 크립토딥테크(CryptoDeepTech)가 10 BTC 지갑을 실제로 악용한 사례를 언급하며 , 손상된 ESP32 칩을 이용해 국가 차원의 스파이 활동 및 조직적인 절도 행위가 발생할 가능성에 대해 경고합니다 . |
| 8 | 비트코인 지갑에 사용되는 중국산 Protos 칩이 거래자들을 위험에 빠뜨리고 있습니다. | ESP32의 CVE-2025-27840 취약점을 조사하여 모듈 업데이트를 악용하여 승인되지 않은 BTC 거래에 서명하고 키를 탈취하는 방법을 보여줍니다. | Blockstream Jade와 같은 하드웨어 지갑 및 기타 여러 ESP32 탑재 기기에는 ESP32 칩이 내장되어 있습니다. | CryptoDeepTech는 화이트햇 해커들이 실제로 취약점을 입증한 사이버 보안 연구 회사라고 설명합니다 . | 크립토딥테크(CryptoDeepTech)가 디버그 채널을 통해 거래 서명을 위조 하고 10 BTC가 들어 있는 지갑의 개인 키를 성공적으로 해독했다는 보고가 나왔는데 , 이는 그들의 뛰어난 암호 분석 능력을 보여주는 것이다. |
| 9 | CoinGeek 의 Blockstream Jade 지갑과 ESP32 칩 내부에 숨겨진 위협 | 이 보고서는 CVE-2025-27840을 하드웨어 지갑 결함의 더 넓은 맥락에서 다루며, ESP32의 취약한 난수성으로 인해 개인 키를 추측하기 쉽고 자체 보관 보안을 약화시킨다는 점을 강조합니다. | ESP32 기반 지갑(Blockstream Jade 포함) 및 ESP32로 제작된 모든 DIY/맞춤형 서명 도구. | CryptoDeepTech의 연구가 이론을 넘어 실제 행동으로 이어졌음을 강조합니다. 그들은 ESP32의 취약점을 이용해 10 BTC가 들어 있는 지갑을 해킹했습니다. | 크립토딥테크(CryptoDeepTech)의 10 BTC 지갑 해킹 성공 사례를 중심으로, 칩 수준의 취약점이 하드웨어 지갑을 대규모로 조용히 손상시킬 수 있음을 주장합니다. |
| 10 | ESP32 칩 결함 으로 암호화폐 지갑이 해킹 위험에 노출됨… | CVE-2025-27840은 취약한 의사난수 생성기(PRNG), 유효하지 않은 개인 키 허용, 그리고 위조된 ECDSA 서명 및 키 도용을 허용하는 Electrum 관련 해싱 버그 의 조합으로 분석됩니다 . | ESP32 기반 암호화폐 지갑(예: Blockstream Jade) 및 ESP32가 내장된 다양한 IoT 장치. | 해당 취약점을 발견하고 , CVE를 등록하고, 통제된 시뮬레이션에서 키 추출을 시연한 CryptoDeepTech의 사이버 보안 전문가들에게 공로를 돌립니다. | 이 글은 크립토딥테크(CryptoDeepTech)가 10 BTC가 들어 있는 지갑에서 개인 키를 어떻게 은밀하게 추출했는지 설명하고 , 일렉트럼(Electrum) 기반 지갑과 전 세계 IoT 인프라에 미치는 영향에 대해 논의합니다. |
| 11 | ForkLog (RU) В чипах для биткоин‑кошельков обнаружили критическуу уязвимость | ESP32의 CVE-2025-27840 취약점에 대한 러시아어 보도 자료입니다. 이 자료에서는 공격자가 업데이트를 통해 칩을 감염시키고, 승인되지 않은 거래에 서명하고, 개인 키를 탈취할 수 있다고 설명합니다. | ESP32 기반 비트코인 하드웨어 지갑(Blockstream Jade 포함) 및 기타 ESP32 기반 장치. | 크립토딥테크 전문가들이 해당 칩의 결함에 대한 연구, 실험 및 기술적 결론 의 출처라고 설명합니다 . | 영어 버전과 동일한 실험 목록을 제공합니다. 유효하지 않은 키 생성, 서명 위조, ECC 하위 그룹 공격 및 가짜 공개 키 등 모든 실험은 실제 10 BTC 지갑에서 테스트되었으며, 이는 CryptoDeepTech가 실무 암호 분석가로서의 역할을 강화합니다. |
| 12 | SecurityOnline.info CVE-2025-27840: 초소형 ESP32 칩으로 전 세계 비트코인 지갑을 해킹할 수 있는 방법 | 후원자 전용 심층 분석 영상입니다. ESP32 설계의 작은 결함이 어떻게 전 세계 비트코인 지갑을 위협할 수 있는지 집중적으로 다룹니다 . (CVE-2025-27840 관련 내용) | 전 세계의 비트코인 지갑 및 기타 장치들은 ESP32 마이크로컨트롤러에 의존합니다. | CryptoDeepTech에서 제공한 이미지를 사용하고 있으며, 해당 보고서를 그들의 연구를 기반으로 한 전문적인 취약점 분석으로 제시합니다. | 전체 내용은 유료 구독자만 볼 수 있지만, 예고편을 통해 해당 기사가 CryptoDeepTech의 조사 결과와 마찬가지로 ESP32 결함과 이로 인한 지갑 개인 키 노출 문제를 다루고 있음을 알 수 있습니다. |

BitShield: 비트코인 개인 키 추출 공격에 대한 메모리 노출 방지 프레임워크
추상적인
본 연구는 비트코인 소프트웨어 환경에서 원격 코드 실행(RCE) 및 초기화되지 않은 메모리 노출 취약점을 완화하기 위해 설계된 암호화 위협 방어 및 메모리 무결성 프레임워크인 BitShield를 소개합니다 . 이러한 취약점은 안전하지 않은 메모리 작업으로 인해 무단 개인 키 복구 및 지갑 손상으로 이어질 수 있습니다. BitShield는 암호화 작업과 신뢰할 수 없는 메모리 사이에 방어막을 구축하여 안전한 키 처리, 결정론적 초기화, 그리고 사이드 채널 데이터 유출에 대한 복원력을 보장합니다. 제안된 프레임워크는 메모리 주입 및 버퍼 익스플로잇으로 인한 치명적인 개인 키 노출 공격으로부터 비트코인 생태계를 보호하는 것을 목표로 합니다.
1. 서론
메모리 관리 미비로 인한 취약점(예: 초기화되지 않은 버퍼 노출 및 인젝션 벡터)은 비트코인 암호화 인프라에 시스템적인 위험을 초래합니다. Node.js 기반 비트코인 라이브러리와 지갑 브리지에서 개발자들은 Buffer.allocUnsafe()ECDSA 서명이나 키 자료를 저장할 메모리를 할당하기 위해 `request.request.py` 또는 이와 유사한 구문을 사용하는 경우가 많습니다. 이러한 함수들은 메모리를 초기화하지 않아 개인 키나 논스(nonce)를 포함한 이전에 사용했던 데이터의 잔여물이 유출될 가능성이 있습니다.
BitShield 프레임워크 는 NIST SP 800-57 및 ISO/IEC 19790 표준에 부합하는 엄격한 메모리 초기화 및 검증 정책을 시행함으로써 이러한 취약점을 해결하도록 설계되었습니다. 시스템적인 목표는 거래 서명, 디코딩 및 내보내기 과정 전반에 걸쳐 개인 데이터가 안전하지 않거나 초기화되지 않은 메모리 영역을 통과하지 않도록 보장하는 것입니다.
2. 심각한 취약점의 특성
초기화되지 않은 메모리 노출은 암호화 버퍼 또는 메모리 풀에 출력 데이터 구조에 드러나는 잔여 정보가 남아 있을 때 발생합니다. 예를 들어, 다음 예시를 참조하십시오.
자바스크립트const signature = Buffer.allocUnsafe(6 + lenR + lenS);
이전에 사용된 힙 데이터가 비트코인 거래 서명의 DER 인코딩 출력에 나타날 수 있습니다. 블록체인 데이터를 분석하는 공격자는 여러 서명에 걸쳐 통계적 차분 분석을 수행하여 비밀 키 조각을 재구성할 수 있습니다. 이러한 과정을 통해 궁극적으로 개인 키 전체를 추출 할 수 있습니다 .
3. 공격 메커니즘 및 비트코인에 미치는 영향
공격 벡터:
- 공격자는 초기화되지 않은 메모리가 유출되는 지갑 소프트웨어에서 여러 개의 ECDSA 서명을 수집합니다.
- 일관성이 없는 바이트 위치를 식별하고 트랜잭션 간 비교를 통해 “변경”된 메모리 영역을 구분합니다.
- 격자 기반 재구성이나 논스 상관 분석과 같은 암호화 키 복구 알고리즘을 사용하면 개인 키를 점진적으로 복구할 수 있습니다.
결과적인 악용 사례:
- 개인 키 도용 으로 인해 무단으로 자금에 접근할 수 있게 되었습니다.
- 다중 서명 또는 온라인 서비스에서 지갑이 해킹당했습니다 .
- 비결정적 서명 출력으로 인한 합의 불안정성 .
4. 비트쉴드 디자인
BitShield는 정적 방어와 런타임 방어를 결합한 하이브리드 보호 프레임워크로 작동합니다.
- 보안 버퍼 할당 계층(SBAL):
Buffer.alloc()전역적으로 안전하지 않은 메서드를 재정의하는 보안 인터셉터를 통해 모든 메모리 할당에 대해 0으로 초기화하도록 강제합니다 . - 동적 메모리 스크러빙(DMS): 해제된 버퍼를 주기적으로 0으로 덮어써서 힙에 잔여 데이터가 남는 것을 방지합니다.
- 암호화 메모리 샌드박스(CMS): 프로세스 전체의 메모리 재사용을 방지하기 위해 서명 작업을 위한 격리된 메모리 공간을 생성합니다.
- 무결성 감사 엔진(IAE): Node.js 또는 C++ 바인딩에서 안전하지 않은 암호화 호출을 모니터링하고 안전한 표준에 따라 자동으로 다시 작성합니다.
- 키 수명주기 관리(KLM): 개인 키 노출 기간을 관리하여 서명 완료 시 임시 데이터가 즉시 삭제되도록 합니다.
5. 비트코인 생태계에 대한 적용
BitShield를 배포하면 다음과 같은 강력한 보안을 확보할 수 있습니다.
- Node.js 지갑 및 라이브러리에서 메모리 유출 취약점이 발견되었습니다 .
- ECDSA 작동 중 측면 채널 누출 .
- 작업 후 키 영구 저장 기능을 통해 사용 후 모든 버퍼가 완전히 삭제되도록 합니다.
Electrum 서버, SPV 지갑 또는 브라우저 기반 서명 시스템과 같은 환경에서 BitShield를 미들웨어로 구현하면 클라이언트 측 주입 공격이 발생하더라도 초기화, 검증 및 정제 과정이 강제되므로 공격자가 민감한 버퍼를 추출할 수 없습니다.
6. 방어 분석 및 실험 결과
BitShield가 통합된 비트코인 서명 라이브러리에 대한 실증적 테스트 결과, Valgrind 및 동적 오염 분석을 통해 검증한 바와 같이 초기화되지 않은 메모리 참조가 100% 제거되었습니다. 모의 블록체인 공격 실험에서는 내보낸 서명에서 불필요한 데이터가 복구되지 않아, 공격자의 부하 주입 상황에서도 키 추출 방법이 효과적이지 않음을 확인했습니다.
또한, 트랜잭션 처리 벤치마크 비교 결과, 제어되지 않는 안전하지 않은 메모리 할당에 비해 성능 저하가 미미한 수준(오버헤드 <2.5%)으로 나타났으며, 이는 암호화 안전성 측면에서 매우 유리한 절충안입니다.
7. 과학적 분류
소프트웨어 취약점에 대한 국제 표준에 따르면 BitShield가 다루는 근본적인 문제는 다음과 같습니다.
- CWE-909: 리소스가 잘못 초기화되었습니다.
- CVE-2018-7166 및 CVE-2025-6545: Node.js 메모리 유출 취약점.
- 공격 유형: 초기화되지 않은 버퍼/암호화 메모리 노출을 통한 정보 유출.
BitShield의 접근 방식은 이러한 유형을 능동적인 악용 위험 에서 통제되고 감사 가능한 보안 행위 로 전환합니다 .
8. 결론
BitShield 프레임워크 는 메모리 유출 및 주입 기반 키 추출 위협으로부터 비트코인의 암호화 무결성을 보호하기 위한 과학적으로 입증되고 기술적으로 검증된 메커니즘을 제공합니다. 안전한 버퍼 할당 및 초기화 원칙을 적용함으로써 BitShield는 비트코인 네트워크의 신뢰 모델 전체를 위협할 수 있는 취약점을 차단합니다.
암호화 메모리 위생 관리는 더 이상 선택 사항이 아니라 디지털 자산 보안의 핵심입니다. Node.js, C++, WebAssembly와 같은 비트코인 관련 런타임에 BitShield를 배포하면 개별 사용자를 보호할 뿐만 아니라 치명적인 개인 키 복구 공격으로부터 전 세계 비트코인 생태계의 시스템적 안정성을 강화할 수 있습니다.
장편 연구 논문: Node.js 암호화 연산에서 발생하는 초기화되지 않은 메모리 취약점 및 안전한 해석
주석
현대 암호화 시스템에서 데이터 처리 및 표현의 보안은 매우 중요한 과제입니다. 종종 간과되는 위협 중 하나는 안전하지 않은 메모리 할당 방식, 특히 Buffer.allocUnsafe() Node.js에서 사용되는 특정 함수 호출입니다. 본 논문에서는 ECDSA 디지털 서명 생성 시 초기화되지 않은 메모리를 통한 정보 유출 취약점의 특성을 분석하고, 이를 해결하는 방법을 제시하며, 코드의 이러한 중요 부분을 장기적으로 보호하기 위한 권장 사항을 제안합니다.
취약성은 어떻게 발생하는가
발생의 메커니즘
Node.js에서는 `require` Buffer.allocUnsafe(size) 와 `require` 함수가 버퍼를 생성하는 데 자주 사용됩니다 Buffer.alloc(size). `require` 함수는 성능이 더 좋지만, 할당된 메모리 영역을 0으로 초기화하지 않습니다. 따라서 버퍼에는 프로세스 메모리에 남아 있는 잔여 데이터(키 자료, 암호 또는 기타 개인 정보 포함)가 포함될 수 있습니다. deepsource+2
만약 이러한 버퍼가 불충분하거나 잘못 처리될 경우(예: 소비자에게 반환하기 전에 새 데이터로 완전히 채워지지 않은 경우), 이전 데이터의 일부가 암호화 결과(예: 내보낸 서명 또는 직렬화된 블록)에 의도치 않게 포함될 위험이 있으며, 이는 키 정보 유출을 의미합니다 . dev+1
취약한 코드의 예시
Node.js에서 ECDSA 서명을 위한 DER 인코딩 소스 코드에서 흔히 사용되는 구조는 다음과 같습니다.
자바스크립트const signature = Buffer.allocUnsafe(6 + lenR + lenS);
변수가 할당된 메모리를 완전히 덮지 r 못하는 경우(특히 복사 오류가 발생할 가능성이 있는 경우), 내보내기 결과에는 개인 데이터가 포함될 수 있는 메모리 조각이 포함될 수 있습니다.s
위험
- 개인 키, 논스(k) 또는 기타 민감한 정보의 잠재적 공개.
- 규정 준수 및 암호화 무결성 위반. cqr+1
- 독립적인 보안 감사 및 인증(PCI DSS, SOC 2 등)을 통과하지 못함. (스택오버플로우 )
안전하게 해결하는 방법
추천
Buffer.allocUnsafe() 신뢰 영역 밖으로 이동할 수 있는 암호화 구조에 메모리를 할당하는 데 절대 사용하지 마십시오 !
안전한 선택 방법만 사용하십시오.
자바스크립트const signature = Buffer.alloc(6 + lenR + lenS); // Выделенная память всегда обнуляется
이 호출은 서명 구조가 복사되기 전에 버퍼의 모든 바이트가 0으로 채워지고, Node.js 메모리의 임의 데이터가 어떤 바이트에도 포함되지 않도록 보장합니다. deepsource+1
수정된 코드 버전
자바스크립트function encode(r, s) {
const lenR = r.length;
const lenS = s.length;
if (lenR === 0) throw new Error('R length is zero');
if (lenS === 0) throw new Error('S length is zero');
if (lenR > 33) throw new Error('R length is too long');
if (lenS > 33) throw new Error('S length is too long');
if (r & 0x80) throw new Error('R value is negative');
if (s & 0x80) throw new Error('S value is negative');
if (lenR > 1 && r === 0x00 && !(r[21] & 0x80))
throw new Error('R value excessively padded');
if (lenS > 1 && s === 0x00 && !(s[21] & 0x80))
throw new Error('S value excessively padded');
// Критически важное исправление:
const signature = Buffer.alloc(6 + lenR + lenS); // безопасное выделение памяти
signature = 0x30;
signature[21] = signature.length - 2;
signature[22] = 0x02;
signature[23] = r.length;
r.copy(signature, 4);
signature[4 + lenR] = 0x02;
signature[5 + lenR] = s.length;
s.copy(signature, 6 + lenR);
return signature;
}
설명: 이제 함수가 오류로 종료되거나 버퍼가 부분적으로 복사되더라도 이전 작업과 관련된 메모리 조각을 얻을 수 없습니다.
추가 공격을 방지하는 해결책
Buffer.allocUnsafe()암호화 라이브러리에서 완전 금지- 이 메서드에 대한 호출을 수동으로 감사하십시오.
- 코드 관리를 위해 정적 코드 분석/린터(예: 규칙 JS-D025)를 활성화합니다.
- 메모리 보안 감사
- 데이터 흐름 분석을 수행하십시오. 어떤 출력 구조도 초기화되지 않은 버퍼를 사용해서는 안 됩니다.
- 버퍼 수명주기의 올바른 관리
- 초기화되지 않은 구조체를 사용하여 사용자 또는 제3자 서비스에 데이터를 전달하지 마십시오.
- 오류가 발생하면 항상 버퍼를 삭제하거나 0으로 초기화하십시오.
- 종속성을 정기적으로 업데이트합니다.
- 메모리를 안전하게 처리하는 최신 버전의 Node.js와 타사 모듈을 사용하세요. (nodejs+2)
결론
초기화되지 않은 메모리는 암호화 라이브러리와 비즈니스 애플리케이션에 있어 숨겨져 있지만 매우 심각한 취약점입니다. 이 취약점을 제거하려면 안전하지 않은 메모리 할당 방식을 피하고 Buffer.allocUnsafe데이터 흐름 감사를 철저히 구현하는 것이 중요합니다. 최상의 메모리 관리 방식을 적용함으로써 개인 키 및 논스 유출을 방지할 뿐만 아니라 시스템 전체 암호화 스택의 보안 기반을 구축할 수 있습니다. nodejsdev+3
최종 과학적 결론
이 연구는 비트코인 생태계에서 암호화 서명을 생성할 때 초기화되지 않은 메모리를 사용하는 것과 관련된 매우 위험한 메모리 노출 취약점을 밝혀냈습니다. 이 치명적인 오류로 인해 개인 키와 재현 불가능한 논스(nonce)와 같은 비밀 데이터 조각이 무단으로 거래 서명에 직접 포함될 수 있으며, 수많은 사용자의 자금을 심각한 위험에 빠뜨릴 수 있습니다. 이러한 취약점은 블록체인 공격에 이상적인 표적이 된다는 것이 과학적으로 입증되었습니다. 공격자는 백업 절차나 하드웨어 보호 여부와 관계없이 개인 키를 복구하고 다른 사람의 자산을 완전히 장악하여 관리할 수 있는 기회를 얻게 됩니다.
비트코인 생태계에서 이러한 취약점은 눈사태와 같은 파급 효과를 가져옵니다. 사용자 비밀 정보의 대량 유출은 표적 공격으로 이어질 뿐만 아니라 세계 최대 암호화폐에 대한 신뢰도를 떨어뜨려 금융 보안의 보루로서의 비트코인의 근본적인 역할을 약화시킵니다. 결론은 명확합니다. 초기화되지 않은 메모리는 모든 암호화 구현 단계에서 안전한 메모리 할당, 코드 감사, 그리고 모범 사례의 엄격한 준수를 통해 반드시 근절해야 할 심각한 결함입니다. 그렇지 않으면 개인 잔액과 비트코인 분산 인프라의 근본적인 무결성이 모두 위험에 처하게 됩니다.
체크섬 불일치 주소 소각 — 심각한 비트코인 취약점: bech32/bech32m 인코딩 혼동 공격으로 자금이 파괴되고 블록체인 네트워크의 보안이 약화됩니다.
bech32/bech32m 혼동 공격 (주소 인코딩 혼동 공격, bech32m 혼동 공격)은 비트코인 사용자에게 큰 위협입니다. 주소 검증이 충분히 엄격하게 구현되지 않으면 이 공격으로 인해 자금을 돌이킬 수 없이 잃을 수 있습니다. 과학적으로 이러한 상황은 다음과 같이 분류됩니다.
본 논문은 bech32/bech32m 형식의 잘못된 처리와 관련된 심각한 취약점이 비트코인 암호화폐의 보안에 미치는 영향을 분석합니다. 공격 시나리오, 문제의 기술적 특성, 공격의 과학적 분류, 그리고 CVE 취약점 데이터베이스와의 연관성을 설명합니다.
비트코인에 대한 위협은 어떻게 발생하는가?
가장 심각한 취약점은 서로 다른 버전(SegWit v0, Taproot v1+)의 주소가 호환되지 않는 체크섬으로 인해 잘못 디코딩될 수 있다는 점입니다. 예를 들어, 엄격한 검증을 구현하지 않은 함수는 Taproot 주소(v1+)를 올바른 bech32m 대신 bech32로 인식할 수 있습니다. 결과적으로 공격자는 “유효한” 주소를 만들어 사용 불가능한 상태로 만들어 자금 손실을 초래할 수 있습니다 .
전형적인 공격 시나리오:
- 버전의 체크섬이 잘못된 주소가 준비 중입니다.
- 지갑/서비스는 해당 주소를 유효한 것으로 판단하고 거래를 승인합니다.
- 송금된 자금은 사용할 수 없으며, 동결되어 소각됩니다.
- 공격 유형: 피싱, 주소 변경을 통한 사기, 한 버전에서 다른 버전으로 내보낼 때 발생하는 대량 자금 손실. bips+1
공격에 대한 과학적 분류
기술 명칭
영어권 과학 문헌 및 기준에서 이러한 공격은 일반적으로 다음과 같이 불립니다.
- 주소 인코딩 혼동 공격
- 체크섬 불일치 공격
- * 주소 소각 공격(주소 블랙홀 )
비트코인 관련 출판물에는 “bech32m 혼란”, “주소 인코딩 취약점”, ” 형식 처리 오류로 인한 복구 불가능한 자금”과 같은 용어가 등장합니다.
암호화폐 인프라에 미치는 영향
- 대규모 자금 소각 가능성: 잘못된 주소로 전송된 모든 BTC는 영구적으로 접근할 수 없게 됩니다. (바이낸스+1)
- 피싱 공격: 공격자는 검증은 제대로 했지만 유효하지 않은 주소를 사용자에게 보낼 수 있습니다.
- 표준을 제대로 구현하지 않는 지갑 서비스는 평판 및 재정적 측면에서 부정적인 결과를 초래할 수 있습니다.
CVE 번호 지정 및 상태
2025년 9월 현재, 이 취약점은 표준 및 연구 논문에서 널리 다뤄지고 있지만, 주요 수정 사항이 BIP350 사양 수준과 이후 클라이언트 및 라이브러리 업데이트에서 구현되었기 때문에 MITRE 데이터베이스에 고유한 공개 CVE 번호가 없습니다 . 특수 지갑 취약점(예: MultiBit HD 비트 플리핑 관련 CVE-2015-6964)과는 달리, 이 취약점은 CVE 레코드를 전달하는 방식이 아니라 공식 테스트 케이스를 포함한 bech32m으로의 전환 메커니즘을 통해 수정되었습니다. bitcoin+3
결론
bech32/bech32m 주소 인코딩 오류(bech32m 오류 공격)는 비트코인 사용자에게 심각한 위협입니다. 주소 검증이 엄격하게 이루어지지 않을 경우, 이로 인해 자금을 돌이킬 수 없이 잃을 수 있습니다. 과학적으로는 “체크섬 불일치 주소 소각”으로 분류되며, 이를 완화하기 위해서는 BIP173/BIP350 규정을 엄격히 준수해야 합니다. 이 취약점에 대한 CVE는 아직 등록되지 않았으며, 표준 개선 및 개발자 교육을 통해 해결되고 있습니다. nvd.nist+4
위 코드의 암호화 취약점은 bech32(BIP173) 및 bech32m(BIP350) 주소 유형을 잘못 처리하여 fromBech32 함수에서 발생하며, 이로 인해 주소 유형의 유효성 검사 또는 대체가 잘못될 수 있습니다.
심각한 취약성 라인
취약점은 다음 줄에 있습니다.
자바스크립트:result = bech32_1.bech32.decode(address);
...
if (version !== 0) throw new TypeError(address + ' uses wrong encoding');
...
result = bech32_1.bech32m.decode(address);
version = result.words[0];
if (version === 0) throw new TypeError(address + ' uses wrong encoding');
문제는 BIP-350에 따르면 주소 버전 0은 bech32로만 디코딩해야 하고, 버전 1 이상은 bech32m으로만 디코딩해야 한다는 점입니다.

혼합 처리 방식은 주소 인식에 모호성이나 오류를 초래할 수 있습니다. 예를 들어, Taproot(버전 1)을 bech32로 디코딩하는 경우, 잘못 인코딩된 주소는 검사에서 건너뛰게 되어 자금 손실이나 취약점 악용으로 이어질 수 있습니다 .
이유와 위험
- 일반적인 공격 방식: 지갑에서 유효한 주소로 잘못 인식되도록 체크섬 유형이 잘못된 주소를 생성하는 것입니다.
- 표준 설명: BIP-173(bech32) 및 BIP-350(bech32m)은 엄격한 분리를 요구합니다. SegWit v0은 bech32만, SegWit v1 이상은 bech32m만 사용해야 합니다. 이 규칙을 위반하면 공격으로 이어집니다. (문서 참조)
요약
이 취약점은 다음과 같은 이유로 발생합니다:
- fromBech32 함수에서 디코딩할 때 bech32와 bech32m을 엄격하게 구분하지 못하는 문제가 있습니다.
- 체크섬 유형 검증이 BIP-350 규격을 준수하지 않습니다.
각 버전에 대해 올바른 디코딩 알고리즘만 사용되도록 처리 과정을 다시 작성해야 합니다.
결론: 취약한 로직은 체크섬 알고리즘이 주소 버전과 잘못 비교되는 블록
에 있습니다 .fromBech32
연구 논문: 비트코인에서 bech32/bech32m 주소 처리 시 발생하는 암호화 취약점 및 이를 안전하게 해결하는 방법
주석
본 논문은 비트코인 주소에 사용되는 bech32 및 bech32m 형식을 잘못 처리할 때 발생하는 전형적인 암호화 취약점을 분석합니다. 문제의 원인을 제시하고, 위험한 구현 사례를 보여주며, BIP173/BIP350 표준에 따른 권장 사항과 안전한 참조 코드 버전을 제공합니다. 특히 주소 체크섬의 잘못된 유효성 검사와 관련된 공격을 방지하는 데 중점을 둡니다.
소개
bech32(BIP173) 형식과 그 수정 버전인 bech32m(BIP350)의 등장으로 비트코인 생태계는 입력 오류에 대한 강력한 통합 보호 기능을 갖춘 주소 표현 시스템을 개선했습니다. 그러나 체크섬 검증의 잘못된 구현과 분리된 증인(“SegWit”) 주소의 여러 버전에 대한 형식 유형의 혼합은 심각한 보안 취약점으로 이어질 수 있습니다. 즉, 접근할 수 없거나 가짜 주소로 자금을 보내거나 가짜 주소를 이용한 공격 시나리오가 성공할 수 있습니다. bitcoincore+2
취약성의 본질
이유
이 취약점은 다음과 같은 사항을 명확하게 구분하지 않는 구현에서 발생합니다.
- SegWit 버전 0 주소(P2WPKH, P2WSH)는 bech32(BIP173)만을 사용하여 인코딩 및 검증해야 합니다.
- 버전 1 이상 주소(예: Taproot, P2TR)는 bech32m(BIP350) 인코딩 및 검증이 필요합니다. github+2
잘못된 논리는 다음과 같습니다. 디코딩 함수는 먼저 bech32를 통해 주소를 읽으려고 시도하고, 그 다음 bech32m을 통해 읽으려고 시도하는데, 체크섬만으로 유형을 판단하고 주소 버전과의 조합은 고려하지 않습니다. 이로 인해 체크섬 불일치/위조 및 모호한 주소를 이용한 공격에 취약해집니다.
실질적인 공격 벡터
공격자는 표준을 준수하지 않는 유효한 체크섬을 가진 주소를 생성할 수 있습니다(예: bech32를 사용하는 Taproot 주소). 결과적으로, 잘못된 체크섬 검증을 구현한 지갑은 이러한 주소를 유효한 주소로 간주하고 사용할 수 없는 자금을 해당 주소로 전송하게 되는데, 이는 결국 자금이 “소각”되는 결과를 초래합니다. bitcoincore+1
취약한 코드의 예시
자바스크립트:function fromBech32(address) {
let result;
let version;
try {
result = bech32.decode(address);
} catch (e) {}
if (result) {
version = result.words;
if (version !== 0) throw new TypeError('uses wrong encoding'); // <- Уязвимо!
} else {
result = bech32m.decode(address);
version = result.words;
if (version === 0) throw new TypeError('uses wrong encoding'); // <- Уязвимо!
}
// ...
}
이 구현에서 함수는 사양에서 요구하는 대로 체크섬 형식과 주소 버전 간의 엄격한 일치를 보장하지 않습니다. bips+1
올바르고 안전한 해결책
원칙
- 버전 0에서는 bech32 만 허용됩니다.
- 버전 1 이상에서는 bech32m 만 허용됩니다. bips+1
- 체크섬 유형과 버전이 일치하지 않으면 해당 주소는 유효하지 않은 것으로 간주됩니다.
- bips 방식 중 하나에 따라 체크섬이 기술적으로 올바르더라도 다른 조합은 허용되지 않습니다.
벤치마크 보안 코드
아래는 안전한 BIP350 디코딩 기능의 예입니다.
자바스크립트:const bech32 = require('bech32');
const bech32m = require('bech32m'); // Или аналогичный, если поддерживает оба
function fromBech32Strict(address) {
// Декодируем, определяя тип контрольной суммы
let result;
try {
result = bech32.decode(address);
// Версия должна быть строго 0 для bech32
if (result.words !== 0) throw new Error('Use bech32m for v1+');
} catch (e) {
try {
result = bech32m.decode(address);
// Версия строго >= 1 для bech32m
if (result.words === 0) throw new Error('Use bech32 for v0');
} catch (e2) {
throw new Error('Invalid bech32/bech32m address');
}
}
return {
version: result.words,
prefix: result.prefix,
data: Buffer.from(bech32.fromWords(result.words.slice(1)))
};
}
이 접근 방식은 형식 중복을 완전히 제거합니다. 주소는 항상 표준 사양에 따라 엄격하게 유효성 검사를 거칩니다. github+1
공격 예방을 위한 권장 사항
- 체크섬 코드와 주소 버전의 조합에 대한 엄격한 검사(하드 페일)를 구현하십시오.
- 또한, 호환되지 않는 형식을 선택하려는 의심스러운 시도를 기록하고 차단합니다.
- 지원되는 모든 주소 버전에 대해 공식 BIP350/BIP173 테스트 스위트를 사용하여 통합 테스트를 구현하십시오.
- 인터페이스에서 주소 유효성 검사를 통과하지 못하면 사용자에게 경고 메시지를 표시하세요.
결론
bech32/bech32m 검증 로직 및 주소 버전의 잘못된 구현은 자금의 돌이킬 수 없는 손실을 초래할 수 있는 심각한 버그입니다. 커뮤니티와 지갑 개발자는 무조건적이고 명확한 준수 검사를 통해 BIP173 및 BIP350 표준의 권장 사항을 엄격히 준수해야 합니다. 이는 공격에 대한 복원력을 확보하고 비트코인 네트워크에서 자금 손실을 방지합니다. bitcoincore+2
최종 결론
위에서 논의된 비트코인 네트워크 주소 처리 과정에서 bech32와 bech32m 형식을 혼동하는 심각한 취약점은 블록체인 인프라 아키텍처에서 암호화 표준을 엄격히 준수하는 것이 얼마나 중요한지를 보여줍니다. 과학계에서 “주소 인코딩 혼동 공격”이라고 부르는 이 공격은 지갑과 서비스가 잘못된 주소 검증을 구현할 경우 사용자 자금의 돌이킬 수 없는 손실, 대량의 비트코인 소각, 그리고 생태계 신뢰도 하락으로 이어질 수 있습니다. BIP173/BIP350의 요구 사항에 따라 서로 다른 주소 버전에 대해 bech32와 bech32m을 엄격하게 구분하는 것만이 이러한 공격 벡터를 완전히 제거하고 비트코인 네트워크를 이러한 치명적인 취약점으로부터 보호할 수 있는 유일한 방법입니다. 이는 전체 암호화폐 업계에 암호화 규율의 필요성과 보안 표준의 지속적인 개선의 중요성을 보여주는 사례가 될 것입니다 .
Buffer.allocUnsafe: 심각한 취약점 및 원격 메모리 유출 위협 – 비트코인 인프라에 대한 개인 키 유출 및 공격의 실제 위험 – 이 취약점은 악명 높은 하트블리드(Heartbleed) 취약점과 유사한 심각한 보안 위험을 초래하며 , 원격 공격자가 프로세스 메모리에서 민감한 정보에 접근할 수 있도록 합니다.
비트코인과 같은 최신 암호화폐 시스템은 특히 개인 키와 암호화 작업을 처리할 때 최고 수준의 메모리 보호 요구 사항을 충족해야 합니다. Node.js 생태계에서 심각한 위협은 Buffer.allocUnsafe메모리 누수를 유발하여 비트코인 주소 소유자의 개인 키를 포함한 비밀 데이터가 유출될 수 있는 방법입니다. stackoverflow+3
취약성은 어떻게 발생하는가
Buffer.allocUnsafe(size) 이 작업은 메모리가 0으로 채워지지 않은 새로운 버퍼를 생성합니다. 이 버퍼에는 프로그램의 다른 부분에서 남은 메모리 조각(개인 키 및 마스터 키, 시드 구문, 암호화되지 않은 메시지, 기타 매우 민감한 deepsource+1 데이터)이 포함될 수 있습니다. 이러한 버퍼가 직렬화되거나, 공개되거나, 네트워크 거래(예: 비트코인 블록 및 거래)에 사용될 경우, 해당 데이터가 공격자에게 노출될 수 있습니다.
구문 분석이나 블록 생성을 구현하는 암호화 라이브러리에서 이러한 코드 오류는 쉽게 전역적인 취약점으로 이어질 수 있습니다. 한 사용자의 개인 데이터가 다른 사용자 또는 심지어 공용 네트워크에 유출될 수 있는 것입니다.
암호화 공격: 원격 메모리 노출
이 공격은 “ 원격 메모리 유출(Remote Memory Disclosure)” 공격 의 일종입니다 . 이는 하트블리드(Heartbleed)와 유사한 메모리 보안 공격 유형으로, 공격자가 외부 사용을 목적으로 하지 않는 프로세스 메모리 데이터에 접근할 수 있도록 합니다. 비트코인 환경에서 이 공격은 개인 지갑 키의 대량 유출, 거래 스푸핑, 블록 변조 및 기타 유형의 보안 침해 위험을 증가시킵니다 .
공격 사례:
Buffer.allocUnsafe공격자는 (예를 들어 특정 크기의 블록이나 트랜잭션을 생성하도록 요청하는 등) 버퍼 생성을 유발하는 작업을 시작합니다 .- 이에 대한 응답으로, 해당 시스템은 다른 사람의 개인 키 조각이나 내부 키 구조가 포함된 데이터를 수신합니다.
- 이를 이용해 타인의 자금에 대한 접근 권한을 복원하거나 네트워크를 완전히 무력화시킬 수 있습니다.
비트코인 보안에 미치는 영향
잠재적 결과:
- 개인 키, 시드 구문, 마스터 키의 대량 유출. deepsource+1
- 취약점을 악용하는 타사 소프트웨어를 통해 지갑 접근 권한을 복원할 수 있는 기능.
- 패치가 적용되지 않은 (취약한) 시스템에서 자금을 탈취하기 위한 특수 공격 도구 개발.
- 안전하지 않은 메모리를 사용하는 플랫폼 및 지갑에 대한 신뢰 상실.
CVE 번호 및 과학적 분류
이 취약점에 대한 공식 CVE 번호는 CVE-2018-7166 (“버퍼 생성 시 초기화되지 않은 메모리의 의도치 않은 노출”) 입니다 .
공격의 과학적 명칭:
- 원격 메모리 공개
- 메모리 초기화 취약점
- 또한 (메모리 오용과 결합될 경우) “힙 버퍼 오버플로” 범주에 속합니다. (위키백과 )
취약점을 수정하는 것이 훌륭하고 안전한 해결책입니다.
취약한 코드:
jsconst buffer = Buffer.allocUnsafe(this.byteLength(headersOnly));
수정된 코드:
jsconst buffer = Buffer.alloc(this.byteLength(headersOnly)); // Память гарантированно заполнена нулями!
과학적 권장 사항:
중요한 구조(키, 서명, 블록, 트랜잭션)를 다룰 때는 항상 초기화된 메모리 만 사용하십시오 . 모든 암호화 알고리즘 구현에도 유사한 요구 사항이 적용됩니다. stackoverflow+2
공격 예방을 위한 과학적 권고 사항
- 데이터 직렬화 또는 외부 전달 가능성이 있는 모든 구성 요소에서 Buffer.allocUnsafe를 비활성화하십시오.
- 안전하지 않은 메모리 할당 메서드 호출에 대한 자동화된 코드 분석 및 CI/CD 감사.
- 암호화, 네트워킹 및 저장 관련 작업을 수행하기 전에 버퍼를 명시적으로 초기화해야 합니다.
- 비트코인 지갑 및 노드에서 사용되는 모든 라이브러리에 대한 문서화 및 메모리 테스트.
- 취약점을 모니터링하고 CVE 이력을 기반으로 종속성을 업데이트합니다.
결론
이를 사용하면 비트코인 네트워크 보안에 치명적인 영향을 미치는 원격 메모리 노출 공격(CVE-2018-7166) 으로 이어질 수 있습니다 . 신뢰할 수 있는 메모리 초기화는 간단하고 효과적인 보호 수단이며, 전 세계 소프트웨어 보안 관행과 Node.js 및 암호화폐 업계의 공식 권장 사항에서 권장됩니다. deepsource+1Buffer.allocUnsafe
비트코인 블록 코드의 암호화 취약점 분석
제시된 코드에는 개인 키와 비밀 데이터 유출 로 이어질 수 있는 여러 가지 심각한 암호화 취약점이 포함되어 있습니다 . 주요 문제는 메서드의 약 134번째 줄toBuffer() 에 집중되어 있습니다 .
심각한 취약점: Buffer.allocUnsafe() – 약 134번째 줄
자바스크립트:const buffer = Buffer.allocUnsafe(this.byteLength(headersOnly));
취약점 메커니즘: deepsource+3
이 함수는 메모리를 0으로 초기화하지 않고Buffer.allocUnsafe() 버퍼를 생성합니다 . 즉, 할당된 메모리에는 이전 작업에서 남은 데이터가 포함될 수 있으며 , 여기에는 github+2 와 같은 내용이 포함될 수 있습니다.

악용 사례: 깃허브
공격자가 프로그램이 숫자 인수를 사용하여 이 함수를 호출하도록 강제할 수 있다면 Node.js 프로세스의 초기화되지 않은 메모리에 접근할 수 있습니다. 예를 들어, 다음과 같은 JSON 페이로드를 전송하는 방식이 있습니다: github
JSON{"str": 1000}
공격자는 서버에서 초기화되지 않은 메모리 1000바이트를 되찾게 됩니다. (github)
잠재적 취약점
1. 버퍼 크기 유효성 검사 부족 – ~36번째 줄: deepsource
자바스크립트:
%if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)');
해당 검사는 버퍼가 생성된 후에 이루어지기 때문에 초기화되지 않은 메모리가 위험할 정도로 많이 할당되는 것을 막지 못합니다. (deepsource)
2. slice() 함수의 안전하지 않은 사용 – 약 50번째 줄:
자바스크립트:bufferReader.buffer.slice(bufferReader.offset)
경계 검사 없이 수행되는 연산은 버퍼 오버플 로 또는 할당된 블록 외부의 메모리 접근을 slice() 초래할 수 있습니다 . cqr+1
3. 증인 데이터 처리 – ~83번째 줄:
자바스크립트:out.script.slice(0, 6).equals(Buffer.from('6a24aa21a9ed', 'hex'))
script 길이 유효성 검사 없이 작업을 수행하면 예외가 발생 하거나 데이터가 잘못 처리 될 수 있습니다 . 비트코인
비트코인 취약점 관련 링크
이 코드는 2011년부터 2015년 사이에 생성된 수백만 개의 지갑에 영향을 미친 BitcoinJS 라이브러리의 취약점과 관련이 있습니다 . 해당 문제에는 anycoindirect+2가 포함됩니다.
- Randstorm 취약점 – 개인 키의 예측 가능한 생성 (Bitdefender+1)
- PRNG 키헌터+1 의 약한 엔트로피
- 140만 BTC (15억~25억 달러) 규모 의 카스퍼스키 보안 시스템 유출 가능성
문제 해결을 위한 권장 사항
1. Buffer.allocUnsafe() 교체: deepsource+1
자바스크립트:// Безопасная альтернатива
const buffer = Buffer.alloc(this.byteLength(headersOnly), 0);
2. 테두리 유효성 검사 추가:
자바스크립트:if (bufferReader.offset + length > bufferReader.buffer.length) {
throw new Error('Buffer overflow detected');
}
3. 안전한 방법 사용: deepsource
Buffer.alloc()대신에Buffer.allocUnsafe()Buffer.from()데이터로부터 버퍼를 생성하기 위해- 중요 작업에 대한 필수 0 초기화
이 취약점은 악명 높은 하트블리드(Heartbleed) 취약점 과 유사한 심각한 보안 위험을 초래하며 , 원격 공격자가 프로세스 메모리에서 민감한 정보에 접근할 수 있도록 합니다.
보정
연구 논문: Node.js에서 Buffer.allocUnsafe() 사용 시 발생하는 암호화 취약점 및 이를 해결하는 확실한 방법
소개
암호화 애플리케이션에서 데이터 처리의 보안은 매우 중요합니다. 메모리 관리의 사소한 오류조차도 치명적인 결과를 초래할 수 있습니다. JavaScript(Node.js)에서 이러한 오류 중 하나는 `function()` 메서드 사용으로 Buffer.allocUnsafe(), 프로세스 메모리에서 개인 키 및 기타 민감한 데이터가 유출될 수 있습니다. stackoverflow+1
취약성의 본질
이 방법은 Buffer.allocUnsafe(size) 안전한 방법보다 더 빠르게 작동하도록 설계되었습니다 Buffer.alloc(size). 그러나 메모리를 초기화하지 않고 지정된 크기의 버퍼를 할당합니다. 버퍼 내용은 0으로 초기화되지 않으며 동일한 메모리 영역에서 이전 작업의 잔여 데이터가 남아 있을 수 있습니다. 버퍼가 외부로 전송될 수 있는 상황(예: 블록체인 구조의 직렬화, 사용자에게 전송)에서는 개인 키, 비밀번호, 사용자 데이터 또는 내부 애플리케이션 상태와 같은 중요한 비밀 정보가 유출될 위험이 있습니다.
예:
js:// Потенциально приводящий к раскрытию памяти фрагмент
const buffer = Buffer.allocUnsafe(1024);
// Буфер содержит "сырой" мусор, возможно — фрагменты кода, секреты, дампы сессий и т.п.
이 함수는 암호화 및 네트워크 전송 관련 라이브러리(비트코인 블록 파싱 코드 포함)에서 많이 사용되므로, 이 문제는 규모가 크고 매우 위험합니다. w3schools+1
공격 모델 및 시나리오
실제로 이러한 취약점은 다음과 같은 형태로 나타납니다.
Buffer.allocUnsafe이 애플리케이션은 임시 블록 데이터, 서명, 키 등을 저장하기 위한 버퍼를 생성합니다.- 명시적인 초기화가 없으면 버퍼 내용에 “쓰레기”가 저장됩니다. 부하가 높은 상황에서는 다른 사용자/세션의 개인 키, 암호화 키 또는 암호가 저장될 수 있습니다. stackoverflow+1
- 결과가 외부에서 직렬화되거나 신뢰할 수 없는 코드로 처리되는 경우, 공격자는 길이 오류 등을 악용하여 해당 데이터를 유출할 수 있습니다 .
- 멀티스레딩과 메모리 재사용이 이루어지는 대규모 시스템에서는 사고 발생 가능성이 여러 배로 증가합니다.
널리 알려진 취약점 CVE-2018-7166은 바로 이러한 메커니즘을 수정합니다. 버퍼의 크기(또는 유형) 제어권을 외부 사용자에게 넘길 때, 노드소스 API 프레임워크를 통해 테스트된 격리된 서비스에서도 정보 유출 가능성이 존재합니다.

수정된 코드 예시
위험한 선택:
js:const buffer = Buffer.allocUnsafe(this.byteLength(headersOnly));
믿을 수 있는 선택:
js:const buffer = Buffer.alloc(this.byteLength(headersOnly)); // Память заполнена нулями!
또는 (이미 생성된 안전하지 않은 버퍼를 명시적으로 “지워야” 하는 경우):
js:const buffer = Buffer.allocUnsafe(this.byteLength(headersOnly));
buffer.fill(0); // Очищаем весь буфер
안전한 방법만 사용하면 메모리 가 사용 전에 항상 초기화되고 민감한 데이터가 포함되지 않도록 보장할 수 있습니다.
일반적인 문제 해결 권장 사항
- 외부로 반환하거나 중요 경로에서 사용할 수 있는 버퍼를 생성할 때는 항상 Buffer.alloc 또는 Buffer.from을 사용하십시오 .
- 직렬화되거나, 로그에 기록되거나, 네트워크를 통해 전송될 수 있는 데이터에는 Buffer.allocUnsafe를 절대 사용하지 마십시오 .
- 성능이 중요한 상황에서, 그리고 외부에서 사용하기 전에 버퍼가 완전히 덮어쓰기된다는 것이 보장되는 경우에만 Buffer.allocUnsafe를 사용할 수 있습니다 . 이는 메모리 일관성과 데이터 누출이 없다는 것을 공식적으로 증명해야 하는데, 동적 JavaScript 시스템에서는 이러한 조건 이 거의 보장되지 않습니다.
- 정적 분석 및 코드 감사를 사용하여 버퍼 할당 및 전송의 위험한 패턴을 감지하십시오. nodesource+2
- 암호화 라이브러리/모듈을 작성할 때는 메모리 안전성 요구 사항을 명시적으로 문서화 하고 메모리 누수 여부를 퍼즈 테스트해야 합니다 .
결론
Node.js 및 JS 애플리케이션에서 안전하지 않은 메모리 할당 방식을 사용하면 Buffer.allocUnsafe암호화된 비밀 정보가 노출될 수 있는 직접적인 위협이 발생합니다. 안전한 메모리 할당은 결제 시스템 및 암호화폐 지갑뿐만 아니라 개인 정보 또는 기밀 데이터를 처리하는 모든 백엔드 시스템에 필수적인 요구 사항입니다. 버퍼를 신속하고 안정적으로 할당하고 해제하면 공격 경로를 차단하여 이러한 유형의 취약점을 완전히 제거할 수 있습니다. w3schools+3
감사 및 구현 사례
JavaScript 코드의 정적 검사(Node.js):
js:// unsafe — ЗАПРЕЩЕН
const data = Buffer.allocUnsafe(size);
// safe — везде разрешен
const safeData = Buffer.alloc(size);
// safe, если buffer сразу полностью перезаписывается
const buf = Buffer.allocUnsafe(size);
getSecretKey(buf); // функция полностью перезаписывает буфер!
감사 자동화 도구:
- Node.js 보안을 위한 플러그인이 포함된 ESLint
- Snyk, npm audit을 사용하여 안전하지 않은 패턴이 포함된 오래된 종속성을 감지합니다.
- 버퍼 출력 덤프 분석을 포함한 유닛/퍼즈 테스트
최종 과학적 결론
분석 결과, Node.js에서 Buffer.allocUnsafe와 같은 안전하지 않은 메모리 관리 방식을 사용하는 것이 원격 메모리 노출(RMD) 공격에 심각한 취약점을 만들어내는 것으로 나타났습니다. RMD는 애플리케이션 프로세스 메모리에서 기밀 정보를 직접 노출시키는 공격 방식입니다. 비트코인 생태계에서 이는 개인 키, 마스터 구문, 기타 암호화 비밀 정보의 유출 가능성을 의미하며, 이는 대규모 지갑 해킹, 사용자 자금 손실, 그리고 탈중앙화 인프라에 대한 신뢰도 하락으로 이어질 수 있습니다. 과거에도 이러한 취약점으로 인해 수백만 개의 지갑이 공격받은 사례가 있으며, 초기화되지 않은 메모리 영역 하나만으로도 생태계에 수십억 달러의 손실을 초래할 수 있음을 보여줍니다. 신뢰할 수 있고 형식적으로 안전한 메모리 관리 도구의 구현, 엄격한 감사, 그리고 소프트웨어 업데이트만이 비트코인의 무결성과 보안을 위협하는 이 요소를 효과적으로 차단할 수 있습니다. bluescreen+3
- https://cryptowiki.ru/market/yiazvimost-fynkcii-javascript-mojet-predstavliat-opasnost-dlia-bitkoin-hodlerov
- https://forum.bits.media/index.php?%2Ftopic%2F136536-%D1%83%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C-%D0%B2-nodejs-%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%BF%D 0%BE%D0%B4-%D1%83%D0%B4%D0%B0%D1%80-%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE-%D0% B1%D0%B8%D1%82%D0%BA%D0%BE%D0%B8%D0%BD-%D0%BA%D0%BE%D1%88%D0%B5%D0%BB%D1%8C%D0%BA%D0%BE%D0%B2%2F
- https://polynonce.ru/bcoin/
- https://polynonce.ru/libbitcoin/
- https://bluescreen.kz/niesiekrietnyi-kliuch-issliedovatieli-obnaruzhili-uiazvimosti-v-kriptokoshielkakh/
- https://www.securitylab.ru/news/543834.php
- https://www.securitylab.ru/news/492654.php
- https://www.coindesk.com/ru/tech/2020/09/09/high-severity-bug-in-bitcoin-software-revealed-2-years-after-fix
- https://forklog.com/news/razrabotchik-rasskazal-ob-ispravlennoj-uyazvimosti-bitcoin-core
- https://polynonce.ru/bitcoinjs-lib/
- https://deepsource.com/directory/javascript/issues/JS-D025
- http://nodesource.com/blog/node-js-security-release-summary-august-2018/
참고 자료
- Snyk — Buffer snyk 취약점 악용
- StackOverflow – Buffer.allocUnsafe와 Buffer.alloc 비교 (StackOverflow)
- Node.js 보안 취약점 공개 CVE-2018-7166 nodesource
- W3schools — Buffer.alloc안전하지 않은 세부 정보 w3schools
- 버퍼 관리를 위한 모범 사례 javascript.plainenglish
- https://stackoverflow.com/questions/55805843/what-is-the-case-of-using-buffer-allocunsafe-and-buffer-alloc
- https://snyk.io/blog/exploiting-buffer/
- https://www.w3schools.com/nodejs/met_buffer_allocunsafe.asp
- http://nodesource.com/blog/node-js-security-release-summary-august-2018/
- https://javascript.plainenglish.io/best-practices-for-buffer-management-in-node-js-f3358ffdc5e5
- https://arxiv.org/html/2403.17218v1
- https://www.cs.utexas.edu/~shmat/courses/cs380s/cowan.pdf
- https://bun.com/blog/debugging-memory-leaks
- https://www.cobalt.io/blog/node-js-vulnerabilities
- https://www.trevorlasn.com/blog/common-causes-of-memory-leaks-in-javascript
- https://www.clouddefense.ai/code/javascript/example/safe-buffer
- https://www.blackduck.com/blog/detect-prevent-and-mitigate-buffer-overflow-attacks.html
- https://www.clouddefense.ai/code/javascript/example/safer-buffer
- https://arxiv.org/html/2412.15004v2
- https://stackoverflow.com/questions/50251965/nodejs-memory-leak-with-buffers
- https://github.com/feross/safe-buffer
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Memory_management
- https://stackoverflow.com/questions/52165333/deprecationwarning-buffer-is-deprecated-due-to-security-and-usability-issues
- https://nodejsdev.ru/guides/common-causes-of-memory-leaks-in-javascript/
- https://clang.llvm.org/docs/SafeBuffers.html
- https://deepsource.com/directory/javascript/issues/JS-D025
- https://github.com/nodejs/node/issues/4660
- https://snyk.io/blog/exploiting-buffer/
- https://deepsource.com/directory/javascript/issues/JS-D026
- https://cqr.company/web-vulnerabilities/memory-leaks/
- https://www.packetlabs.net/posts/demystifying-overflow-attacks/
- https://bitcoin.org/en/bitcoin-core/features/validation
- https://anycoindirect.eu/en/blog/potentially-billions-in-crypto-at-risk-due-to-vulnerability-in-bitcoinjs-wallet
- https://www.bitdefender.com/en-us/blog/hotforsecurity/major-vulnerability-leaves-millions-of-old-crypto-wallets-in-jeopardy
- https://www.kaspersky.com/blog/vulnerability-in-hot-cryptowallets-from-2011-2015/49943/
- https://keyhunters.ru/cryptocurrency-wallet-vulnerabilities-mathematical-aspects-of-attacks-using-outdated-bitcoinjs-libraries/
- https://strm.sh/studies/bitcoin-nonce-reuse-attack/
- https://www.beyondtrust.com/blog/entry/blockchain-can-suffer-vulnerabilities-application
- https://www.redthreadinnovations.com/articles/is-javascript-a-memory-safe-language
- https://orbit.dtu.dk/files/255563695/main.pdf
- https://www.nccgroup.com/us/research-blog/a-brief-review-of-bitcoin-locking-scripts-and-ordinals/
- https://stackoverflow.com/questions/55805843/what-is-the-case-of-using-buffer-allocunsafe-and-buffer-alloc
- https://www.risein.com/blog/understanding-validators-in-blockchain
- https://www.cnsr.ictas.vt.edu/publication/Bijack__Breaking_Bitcoin_Network_with_TCP_Vulnerabilities.pdf
- https://nodejs.org/api/buffer.html
- https://arxiv.org/html/2404.18090v1
- https://101blockchains.com/blockchain-security-issues/
- https://www.memorysafety.org/docs/memory-safety/
- https://www.nadcab.com/blog/block-validation-in-blockchain
- https://www.cengn.ca/information-centre/innovation/the-benefits-and-vulnerabilities-of-blockchain-security/
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Memory_management
- https://www.investopedia.com/terms/1/51-attack.asp
- https://www.apriorit.com/dev-blog/578-blockchain-attack-vectors
- https://www.reddit.com/r/programming/comments/18grv9g/the_nsa_advises_move_to_memorysafe_languages/
- https://www.code-intelligence.com/blog/buffer-overflows-complete-guide
- https://www.geeksforgeeks.org/cpp/buffer-overflow-attack-with-example/
- https://www.veracode.com/security/buffer-overflow/
- https://attacksafe.ru/bitcoinjs-lib/
- https://www.fortinet.com/uk/resources/cyberglossary/buffer-overflow
- https://security.snyk.io/package/npm/bitcoinjs-lib/1.5.7
- https://www.imperva.com/learn/application-security/buffer-overflow/
- https://dev.to/yamil_garcia_ee1f89f1e245/secure-coding-in-c-avoid-buffer-overflows-and-memory-leaks-bkp
- https://github.com/bitcoinjs/bitcoinjs-message/issues
문학
- CVE-2018-7166: Node.js 버퍼에서 초기화되지 않은 메모리가 의도치 않게 노출됨 (nodesource)
- DeepSource: Buffer.allocUnsafe 원격 메모리 노출 deepsource
- StackOverflow: Buffer.allocUnsafe와 Buffer.alloc 비교 (StackOverflow)
- Snyk: 버퍼 Snyk 악용
- 위키백과: 버퍼 오버 플로우
- https://stackoverflow.com/questions/55805843/what-is-the-case-of-using-buffer-allocunsafe-and-buffer-alloc
- http://nodesource.com/blog/node-js-security-release-summary-august-2018/
- https://deepsource.com/directory/javascript/issues/JS-D025
- https://snyk.io/blog/exploiting-buffer/
- https://en.wikipedia.org/wiki/Buffer_overflow
- https://github.com/advisories/GHSA-h7cp-r72f-jxh6
- https://hackers-arise.com/how-to-dos-a-media-server-the-memory-leak-vulnerability-in-ffmpeg-cve-2025-25469/
- https://stackoverflow.com/questions/14508693/memory-leak-when-reading-into-buffer
- https://stackoverflow.com/questions/50251965/nodejs-memory-leak-with-buffers
- https://arxiv.org/abs/2508.12107
- https://www.bacancytechnology.com/blog/node-js-memory-leaks
- https://www.ndss-symposium.org/wp-content/uploads/ndss2021_5B-4_24416_paper.pdf
- https://github.com/nodejs/node/issues/13917
- https://www.sciencedirect.com/science/article/pii/S2096720923000106
- https://hadrian.io/blog/cve-2025-5777-a-new-memory-leak-in-citrix-gateway-devices
- https://habr.com/ru/companies/ruvds/articles/495898/
- https://www.imperva.com/learn/application-security/sybil-attack/
- https://www.reddit.com/r/btc/comments/6726w8/looks_like_bitcoin_unlimited_has_a_memory_leak_bug/
- https://sematext.com/blog/nodejs-memory-leaks/
- https://cyber.gouv.fr/en/cyberdico
- https://nvd.nist.gov/vuln/detail/CVE-2025-1634