SP1 버그, Succinct 자체 프루버 네트워크 노출

- 높은 심각도의 SP1 음향성 버그로 인해 Succinct의 자체 메인넷 프로버 네트워크가 무효한 증명에 노출되었습니다.
- 이欠陥은 버전 6.0.0부터 6.8.0까지의 SP1 네이티브 Rust 검증기에 있었습니다.
- Succinct은 버전 6.8.1 수정본을 메인넷 프로버 네트워크에 배포했습니다.
Succinct의 영증명 시스템인 SP1의 높은 심각도 음향성 버그로 인해 회사의 자체 메인넷 프로버 네트워크가 무효한 증명에 노출되었습니다.
10월 11일 발표된 GitHub 보안 권고사항에 따르면, 해당 네트워크는 영향받은 유일한 배포였습니다.
버전 6.0.0부터 6.8.0까지의 네이티브 Rust 검증기는 무효한 증명을 허용할 수 있었습니다.
GHSA-p7v2-jjv3-8p8f로 제출된 이 권고문은 악의적인 증명자가 유효하지 않은 실행에 대한 증명을 제출하면 네트워크의 검증기가 이를 수락할 수 있다고 명시합니다. Prover Network는 제3자 증명자로부터 증명을 수락했습니다.
이 버그를 악용하려면 증명을 SP1의 네이티브 Rust 검증기로 직접 전송해야 했습니다. Core 및 Compressed 증명이 해당 경로를 통해 노출되었습니다.
Groth16 및 Plonk 검사는 고정된 형태를 가진 래핑 증명을 사용했으며, 버그가 있는 증명자 제어 텐서 형식을 전혀 사용하지 않았기 때문에 안전했습니다.
온체인 Plonk 및 Groth16 검사를 위한 Solidity 체크어도 영향을 받지 않았습니다. verify_sp1_proof 함수를 사용하여 Compressed 증명을 확인하는 앱은 최종적으로 Groth16 또는 Plonk 증명으로 끝나는 경우에만 안전했습니다.
권고문에 따르면 6.0.0부터 6.8.0까지 sp1_hypercube, sp1_prover, sp1_sdk가 영향을 받습니다. 수정 버전은 Succinct에서 9월 24일 버전 6.8.1로 배포했으며, 이는 공개 17일 전이었습니다.

저장소 길이가 일치하지 않는 텐서는 버전 6.8.1에서 제외됩니다.
SP1의 네이티브 Rust 검증기에 버그가 있었습니다. 이는 증명이 유효한지 확인하는 프로그램의 일부입니다.
SP1는 다차원 데이터를 Tensor에 저장합니다. Tensor는 저장된 값의 버퍼와 그 형태를 설명하는 선언된 차원으로 구성됩니다.
정확한 검증을 위해서는 두 가지가 모두 일치해야 합니다. 저장된 요소의 수는 제공된 차원의 곱과 동일해야 합니다.
각 증명 데이터 조각에는 크기를 나타내는 레이블이 붙어 있습니다. 검증자는 레이블의 내용이 내부 내용과 일치하는지 확인하지 않았습니다. 오직 레이블만 확인했을 뿐입니다.
따라서 공격자가 가짜 레이블이 붙은 데이터를 보낼 수 있습니다. 그러면 체크의 다른 부분이 동일한 데이터의 다양한 부분을 참조하게 되어, 가짜 증명이 통과할 수 있게 됩니다.
버전 6.8.1부터 역직렬화 시 길이 검사 기능이 추가되었습니다. 저장된 요소의 수가 선언된 차원의 곱과 같지 않은 모든 Tensor는 거부됩니다.
6.8.1이 출시된 후, Succinct은 메인넷 Prover Network에 해당 수정 사항을 배포했습니다.
네트워크에서 증명을 요청하는 사용자는 별도로 변경할 필요가 없습니다. 하지만 신뢰할 수 없는 prover로부터 증명을 받아들이는 자체 네이티브 Rust 검증자를 실행하는 사용자는 6.8.1로 업그레이드해야 합니다.
Vitalis Salis가 이 결함을 발견했으며, advisory에 따르면 Immunefi의 버그 바운티 프로그램을 통해 보고했다고 합니다.
올해 Cryptopolitan은 Zcash의 Orchard 보호된 풀에서의 무결성 버그를 포함한 기타 증명 시스템 무결성 버그들을 보고했으며, 또한 Foom.Cash에서 검증자 설정 오류로 인해 공격자가 zkSNARK 증명을 위조한 취약점도 논의했습니다.
이 글을 읽고 계신다면, 이미 앞서 나가고 있습니다. 뉴스레터로 그 위치를 유지하세요.
자주 묻는 질문
SP1 취약점이란 무엇이었나요?
SP1의 네이티브 Rust 검증기에서 발생한 무결성 버그로, 악의적인 증명자가 유효하지 않은 실행에 대한 증명을 통과시킬 수 있었습니다.
어떤 SP1 버전이 영향을 받으며, 어떤 버전에서 수정되었나요?
6.0.0부터 6.8.0까지의 버전이 영향을 받았으며, 6.8.1 버전에서 이 문제가 해결되었습니다.
SP1 사용자는 별도의 조치를 취해야 하나요?
Succinct 메인넷 Prover Network의 요청자(Requester)는 변경 사항이 필요 없습니다. 신뢰할 수 없는 증명자로부터 증명을 받는 별도 네이티브 Rust 검증기를 운영하는 팀은 6.8.1로 업그레이드해야 합니다.
면책 조항. 제공된 정보는 투자 조언이 아닙니다. Cryptopolitan.com은 이 페이지에 제공된 정보를 기반으로 이루어진 모든 투자에 대해 책임을 지지 않습니다. 어떤 투자 결정을 내리기 전에 독립적인 조사나 자격을 갖춘 전문가와의 상담을 강력히 권장합니다.

란다 모세스
란다 모세스는 Cryptopolitan의 편집자이자 기자로, 기술, AI, 로봇공학, 암호화폐, 사기 및 해킹을 담당합니다. 그녀는 2017년부터 암호화폐 분야에서 활동해 왔으며, 포워드 프로토콜, 아마직스, 크립토소니아크에서 역할을 수행했습니다. 란다는 브래드포드 대학교에서 전기전자공학을 전공했습니다.
















