CVE-2024-52912: 타임스탬프 조정으로 인한 네트워크 분할
version 메시지 처리의 버그 두 건, 즉 부호 있는 정수 오버플로와 abs64 논리 오류를 이용하면 피해 노드의 조정 시간을 틀어지게 해 새 블록을 너무 먼 미래 것으로 거부하게 만들 수 있었다. 공격자는 먼저 접속한 피어 200곳 안에 들어야 했다. 심각도 ‘중간’으로, Bitcoin Core 0.21.0에서 수정됐다.
Bitcoin Core
공식 출처에서 수집한 모든 기사.
기사 141건
version 메시지 처리의 버그 두 건, 즉 부호 있는 정수 오버플로와 abs64 논리 오류를 이용하면 피해 노드의 조정 시간을 틀어지게 해 새 블록을 너무 먼 미래 것으로 거부하게 만들 수 있었다. 공격자는 먼저 접속한 피어 200곳 안에 들어야 했다. 심각도 ‘중간’으로, Bitcoin Core 0.21.0에서 수정됐다.
Bitcoin Core
무효지만 검증 비용이 큰 고아 트랜잭션을 조작해 보내면 노드를 몇 시간씩 멈출 수 있었다. 새 트랜잭션이 승인될 때마다 고아 캐시를 이차 시간으로 탐색했기 때문이다. Pieter Wuille의 #15644는 일치 항목이 나오면 작업을 끊고 새 메시지부터 처리하게 한다. 심각도 ‘높음’ 수정은 Bitcoin Core 0.18.0으로 사용자에게 전달됐다.
Bitcoin Core
0.20.0 이전 Bitcoin Core에서는 잘못된 형식의 GETDATA 메시지 하나로 net_processing 스레드가 CPU 100%로 헛돌고, 공격 피어당 메모리 1.5MB가 늘 수 있었다. 다른 피어에 대한 서비스는 유지돼 심각도는 ‘낮음’이다. John Newbery가 버그를 찾아 #18808로 고쳤다.
Bitcoin Core
제네시스 블록에 바로 이어 붙인 난이도 1짜리 헤더가 Bitcoin Core 0.12.0부터 0.15.0 전까지 체크포인트 로직을 빠져나갔다. 스패머가 mapBlockIndex를 끝없이 키워 메모리 부족으로 노드를 다운시킬 수도 있었다. 심각도 ‘중간’인 이 버그는 Cory Fields가 2017년 제보했고 #11028로 막혔다.
Bitcoin Core
블록 항목 5만 개를 채운 INV 하나면 노드가 약 1kB짜리 getheaders 응답 5만 개를 대기열에 쌓을 수 있었고, 피어가 읽기를 거부하면 50MB 송신 버퍼가 가득 찬 채로 남았다. 대역폭 절감 명목으로 제출된 John Newbery의 #18962가 INV당 GETHEADERS를 한 번만 보내게 했으며 0.20.0에 실렸다.
Bitcoin Core
공격자는 GETDATA 응답을 보류한 뒤 가짜 알림을 쏟아부어 5만 항목짜리 g_already_asked_for 맵에서 해당 트랜잭션을 밀어내고, 같은 트랜잭션을 거듭 알려 피해 노드가 다른 피어에 요청하지 못하게 막을 수 있었다. John Newbery가 공개한 이 버그의 심각도는 ‘중간’이며, Pieter Wuille의 #19988이 Bitcoin Core 0.21.0에서 고쳤다.
Bitcoin Core
Bitcoin Core 0.10.1 이전에는 수신 메시지가 32MiB까지 허용돼, 공격자가 연결마다 그만큼 RAM을 할당시켜 노드를 다운시킬 가능성이 있었다. Bitcointalk 사용자 Evil-Knievel이 제보했고, #5843이 한도를 2MiB로 낮췄다가 이후 SegWit을 위해 4MB로 올렸다. 2015년으로 예고된 공개는 미뤄졌고, 세부 내용은 2024년에야 나왔다.
Bitcoin Core
Wladimir J. Van Der Laan이 miniupnpc에서 두 번째 버퍼 오버플로를 찾아냈다. 데이터가 새는 이 버그는 CVE-2015-6031과 엮으면 원격 코드 실행으로 이어질 수 있었고, 그는 Ubuntu의 miniupnpc 1.6-precise를 상대로 이를 시연했다. 해당 익스플로잇이 Bitcoin Core에 그대로 통하지는 않았으며, 수정은 2016년 2월 0.12 버전에 실렸다.
Bitcoin Core
Bitcoin Core 27.1은 버그 수정으로 채워졌다. GUI의 미서명 트랜잭션 수수료 인상이 복구됐고 프록시 IP 입력란은 포트를 받지 않는다. GetAddedNodeInfo()는 addnode로 추가한 CJDNS 피어를 감지하며(#30085), 서명 중 TapMiniscript 처리도 바뀌었다(#29853).
Bitcoin Core
BIP324 v2 전송이 Bitcoin Core 27.0에서 기본으로 켜진다. 새 알고리즘 CoinGrinder는 수수료율 30sat/vB 이상에서 가장 가벼운 입력 조합을 찾는다. 합의 코드는 네트워크 조정 시간 대신 시스템 시간을 쓰게 돼 운영자에게 정확한 시계가 더 중요해졌다. libbitcoinconsensus는 폐지 예고됐으며 v28에서 제거할 계획이다.
Bitcoin Core
Bitcoin Core 25.2 노드는 변조된 블록을 처리하지 않는다(#29412). getrawtransaction 세그폴트(#29003), WalletBatch::EraseRecords의 use-after-free(#29176), GUI에서 “Mask values”를 선택할 때 나던 크래시도 고쳤다.
Bitcoin Core
Bitcoin Core 26.1의 I2P 세션은 ECIES-X25519와 ElGamal 암호화를 모두 쓰고(#29200), 노드는 멤풀 로드 진행 상황을 로그로 남긴다. 변조 블록 처리를 거부하는 수정(#29412)과 SFFO가 켜져 있을 때 지갑이 BnB 코인 선택을 건너뛰게 한 수정(#28994)도 들어갔다.
Bitcoin Core
실험 기능 BIP324 v2 전송이 Bitcoin Core 26.0에서 첫선을 보였다. 기본값은 꺼짐이며 -v2transport로 켠다. 새 RPC loadtxoutset은 assumeutxo 스냅숏을 불러와 몇 분 안에 노드를 쓸 수 있게 하고, 원래 chainstate 검증은 백그라운드에서 마무리한다. submitpackage는 원시 트랜잭션을 패키지로 멤풀에 보낸다.
Bitcoin Core
오래된 수수료 추정치를 Bitcoin Core 24.2는 더는 내놓지 않고(#27622), 잘못된 bech32 주소에 대한 RPC 처리도 바로잡았다(#27727). 나머지 변경은 대부분 빌드 시스템과 CI 쪽으로, Xcode 15 링커에서 macOS Qt 패키지가 빌드되지 않던 문제(#28543)도 포함된다.
Bitcoin Core
컴팩트 블록 병렬 다운로드가 Bitcoin Core 25.1에 들어왔다(#27626). /deploymentinfo에서 REST가 죽던 문제(#27853), 원격 클라이언트 연결이 끊긴 뒤 서버 종료 문제(#28551)도 고쳤고, 지갑 마이그레이션은 이제 잘못된 스크립트를 거부한다(#28125).
Bitcoin Core
BIP158 컴팩트 블록 필터를 -blockfilterindex=1로 쓸 수 있으면 Bitcoin Core 25.0의 디스크립터 지갑 재스캔이 빨라진다. 이 필터를 검색하는 새 RPC scanblocks도 생겼다. 릴레이 정책은 non-witness 65바이트 이상 트랜잭션을 받아들이며, -blocksonly에서는 멤풀 최대 메모리가 300MB에서 5MB로 줄어든다.
Bitcoin Core
Bitcoin Core 24.1 지갑은 잠글 때 마스터 키를 지워 메모리에 남기지 않는다(#27080). 직렬화를 한 번만 해서 peers.dat 손상을 막고(#26909), inv-to-send 대기열은 더 빨리 돌며(#27610), 잘못된 URI에 REST가 세그폴트를 내던 문제도 사라졌다(#27468).
Bitcoin Core
Bitcoin Core 23.2의 중심은 P2P 변경 세 건이다. peers.dat 손상 방지(#26909), 다른 피어 다운로드 상태의 성급한 삭제 방지(#27608), inv-to-send 대기열 가속(#27610)이다. 나머지는 aarch64에서 clang-16으로 bdb를 컴파일하는 등의 빌드·CI 작업이다.
Bitcoin Core
deriveaddresses가 인덱스 2147483647에서 죽던 문제가 Bitcoin Core 23.1에서 해결됐고(#26275), 특정 알림 때문에 MacOS 13에서 나던 세그폴트도 사라졌다. GUI는 감시 전용 지갑의 암호화를 거부하며, Qt5는 5.15.3으로 올라갔다(#24668).
Bitcoin Core
값 없이 쓴 -persistmempool이 Bitcoin Core 22.1에서는 -persistmempool=1을 뜻한다. 전에는 실수로 멤풀 저장이 꺼졌다(#23061). 수수료 계산은 기대 수수료율 밑으로 내려가지 않도록 올림 처리하고(#22949), external_spk_managers와 관련된 지갑 세그폴트도 고쳤다(#23333).
Bitcoin Core