Eclair가 라이트닝 채널 펀딩과 스플라이싱 과정에서 상대방이 수수료를 과도하게 높이거나 비트코인 백엔드가 비정상 거래를 구성해 노드가 큰 채굴 수수료를 부담하는 문제를 막기 위한 수정 2건을 병합했다. 변경 사항은 10월 2일과 5일 프로젝트 메인 브랜치에 반영됐다. 다만 10월 12일 기준 공개된 최신 버전은 9월 출시된 v0.14.3으로, 수정 사항이 정식 배포판에 포함됐는지는 확인되지 않았다.
Eclair는 ACINQ가 개발하는 라이트닝 노드 소프트웨어다. 이번 수정은 양방향 펀딩 채널과 채널 자금을 조정하는 스플라이싱, 그리고 Eclair-signer 서명기 모드에 각각 적용됐다. 문제가 발생하면 손실은 공격자에게 직접 전달되기보다 네트워크 채굴자에게 지급되는 수수료로 나타날 수 있다.
PR #3388, 상대방의 수수료 인상에 상한 적용
첫 번째 수정(PR #3388)은 상대방이 시작한 수수료 대체 거래(RBF)를 다룬다. 양방향 펀딩으로 채널을 개설하거나 스플라이싱으로 채널 자금을 조정할 때 상대방은 더 높은 수수료율을 제시한 대체 거래를 요청할 수 있다. 수정 전에는 Eclair 노드도 거래에 자금을 투입한 경우, 명확한 수수료 상한이나 예산 제한 없이 자신이 부담하는 금액에 더 높은 수수료를 적용할 수 있었다.
이 구조에서는 악의적인 상대방이 자신은 해당 비용을 부담하지 않으면서 자금을 댄 Eclair 노드에 임의로 높은 채굴 수수료율을 요구할 수 있었다. 노드의 손실은 상대방에게 직접 넘어가는 대신 채굴 수수료로 지급된다.
수정 후 Eclair는 상대방에게 제시한 펀딩 수수료율의 상한을 초과하는 요청을 거부한다. 다만 상대방이 유동성을 구매하면서 Eclair를 대신해 결제 비용을 부담하거나, Eclair 노드가 거래에 자금을 넣지 않는 경우에는 이 제한이 적용되지 않는다. 두 경우 모두 해당 수정이 겨냥한 비용을 Eclair 노드가 부담하지 않기 때문이다.
PR #3390, 서명기 모드에서 실제 수수료 확인
두 번째 수정(PR #3390)은 Eclair-signer 모드에 적용됐다. 이 모드에서는 Bitcoin Core 백엔드인 bitcoind가 비트코인 선택과 거래 구성을 맡고, 개인키는 Eclair가 보관하며 서명에 사용한다. 하지만 서명 키를 별도로 보관하는 것만으로 손상된 백엔드의 위험을 막을 수는 없다. 백엔드가 수수료가 예산 안에 있다고 보고하면서 실제 거래에서는 잔돈 출력을 제거해 더 많은 수수료를 내도록 구성할 수 있기 때문이다.
비트코인 거래에서는 입력 금액 중 출력으로 배정되지 않은 잔액이 채굴 수수료가 된다. 따라서 잔돈 출력이 사라지면 노드가 자금을 잃을 수 있지만, 그 금액이 반드시 공격자의 주소로 넘어가는 것은 아니다.
이번 수정은 수수료 예산을 설정할 때 사용 예정인 코인의 금액을 바탕으로 실제 수수료를 계산하고, 거래 ID를 통해 관련 거래를 조회해 입력 금액을 확인하도록 한다. 이어 Eclair는 백엔드가 보고한 수수료와 실제 수수료가 일치하는지 검증하고, 백엔드가 제공한 수치에만 의존하지 않고 확인된 실제 수수료에 예산을 적용한다. Eclair가 다시 구성한 펀딩 부분에도 동일하게 검증된 수수료가 적용됐는지 확인하며, 잔돈 출력 위치가 유효하지 않은 거래는 거부한다.
10월 수정, 최신 공개 버전에는 아직 미반영
두 변경 사항은 각각 양방향 펀딩·스플라이싱의 수수료 상한과 서명기 모드의 거래 수수료 검증을 다룬다. 협력적 채널 종료 수수료와 관련해 앞서 제기된 취약점이나, 10월 2일 공개된 노드 재시작 후 발생할 수 있는 서비스 거부 문제와는 별개의 사안이다.
10월 12일 기준 Eclair의 릴리스 페이지에는 9월에 출시된 v0.14.3이 최신 버전으로 표시돼 있다. 메인 브랜치에 수정 사항이 병합됐다는 사실만으로 정식 배포판에 포함됐다고 볼 수는 없다. Eclair 노드 운영자는 설치된 빌드에 10월 변경 사항이 반영됐는지 확인할 필요가 있다.