zcashd·Zebra 취약점 여러 건 수정
노드 충돌, 두 구현 간 합의 불일치, turnstile 회계 무력화 가능성 등이 발견돼 패치됐습니다. 합의 체인에 대한 악용은 없었고 자금과 프라이버시는 안전했다고 밝혔습니다.
ZODL 블로그가 zcashd와 Zebra에서 여러 취약점이 발견되어 패치됐다고 공개했다. 특정 Orchard 거래로 노드를 크래시시킬 수 있는 버그, 두 구현 사이의 합의 집행 차이로 체인 포크를 일으킬 수 있던 문제, zcashd의 터닌스타일 회계를 무력화할 수 있던 버그, 풀 잔액 계산의 정수 오버플로 등이다. 합의 체인에는 악용되지 않았고 사용자 자금과 프라이버시는 안전하며, ZEC 공급을 부풀릴 수 있는 것도 없었다고 밝혔다.
영향받는 버전은 zcashd v5.0.0~v6.12.0과 Zebra v1.0.0~v4.3.0이며, 수정 버전은 각각 v6.12.1과 v4.3.1이다. 연구자 Alex Sol이 4월 4일 Shielded Labs에 보고했고, ZODL과 Zcash Foundation의 엔지니어들이 패치를 만들어 공개 전에 조율 배포했다. 슈퍼메이저리티 해시레이트의 채굴 풀과 Zebra를 채굴에 쓰는 Foundry가 공개 전에 패치를 적용했다. 4월 17일 두 릴리스가 공개됐다.
Orchard의 재무작위화 키 rk가 항등원일 때 증명 인스턴스를 만들다 패닉이 나는 문제는 v5.0.0 이래의 크래시 취약점이었다. 항등원 epk를 Zebra는 거부하고 zcashd는 검사하지 않아 체인 포크 위험이 있었다. 두 문제 모두 거래 사전 검증 단계에서 rk와 epk의 항등원 인코딩을 거부하도록 고쳐졌고, 메인넷에 해당 거래는 없었다. 명세는 구현에 맞춰 갱신될 예정이다.
zcashd v5.10.0에 들어온 버그는 이미 본 블록 헤더를 다시 받으면 풀 잔액을 nullopt로 덮어써 이후 터닌스타일 검사를 끌 수 있었다. 중복 블록 알림은 정상 P2P 동작이므로 일상적으로도, 악의적 피어로도 발생할 수 있었다. 이 버그만으로 ZEC를 만들거나 훔칠 수는 없고, 별도의 잔액 취약점이 있어야 하며 위반은 공개적으로 관측된다. 함수 호출 위치를 옮겨 고쳤고, NU6.1 체크포인트와 델타 재계산을 추가해 불일치하면 시작 시 중단되고 재색인을 요구한다.
zcashd의 풀 잔액 누적 연산에는 조작된 블록이 부호 있는 정수 오버플로(정의되지 않은 동작)를 일으킬 수 있었다. Daira-Emma Hopwood가 MoneyDeltaRange 범위 검사와 예외 처리를 추가해 보강했다. 이번 건은 한 달 사이 두 번째 공개이며, 같은 연구자가 다시 조율된 경로로 제보한 것을 바람직한 패턴으로 평가했다. 일부 분석과 수정은 Claude Opus 4.6의 도움을 받고 사람이 검토했다고 밝혔다.
한국어 요약은 원문을 바탕으로 정리한 것으로, 정확한 내용은 원문을 확인하세요.