つい先月、Lndが利用するbtcd由来のライブラリのバグによってブロックチェーンを参照できなくなるというトラブルが発生し、Lndユーザーは急いでアップデート作業に追われました。ところが今週もほとんど同じようなバグによるトラブルが発生し、前回と同じユーザーによるトランザクションであったり、今回はLndユーザーを茶化すメッセージがあったことなどからライトニングユーザーや開発者の間でバグ報告のあり方や対応について意見が分かれる場面がありました。
トランザクションの内容
今回のトランザクションは署名を含めたサイズが500KBを超えており、これが前回のようにbtcd由来のライブラリによる検証に引っかかったことが問題の原因となりました。また、この大きなサイズのほかに、OP_RETURNで"you'll run cln. and you'll be happy."とのメッセージが書き込まれていることから、Lndに障害を発生させる意図をもって発行されたトランザクションであることが悪意と捉えられました。
また、前回同様にLndノードの運用者は対応に追われましたが、BitMEXが運営するサイトFork Monitorによるとライトニングチャネルの不正決済を罰するJustice Transactionは観測されておらず、悪用が試行された兆候はありません。
バグは報告されていた
今回のバグ、内容としては前回のものとほとんど同じで、しかも前回修正されたコードとほぼ同じ位置にあるものだったため、修正された部分の周辺のコードを読んだユーザーには比較的容易に見つかるようなものでした。少なくとも実際にAnthony Towns氏はおよそ2週間前に直接Lightning LabsのOlaoluwa Osuntokun氏 (roasbeef)にバグの内容を指摘していたそうです。
バグ修正は公開することで悪用する方法も広く知れ渡ってしまうこともあり、再びノード運用者に急遽のアップデートを要求するかどうかの判断が問われます。今回は悪用に必要なトランザクションがビットコインノードの既定のポリシーでは他のノードに伝播されない「ブロックサイズの10%を超える大きなトランザクション」だったことから対応が後回しになったそうです。
今回のトランザクションは直接F2Poolというマイニングプールにメールで提出されたものだという報告があります。
1回目の不具合の際に急を要することから問題が発生した箇所のみの改修がされたため、同時に発見・修正される機会が失われたという指摘は多くありませんが、その当時もトランザクションを発行したBurak氏が事前にLightning Labsに指摘していれば2回目の原因となるコードも発覚し、一度の対応で済んだ可能性は低くないでしょう。その点においても、今回の意見対立の要である「責任あるバグ報告のあり方」というのは振り返ると一度目の事件において厳しく追及されるべきだったことになります。
ちなみに私が知る限り、Lightning Labsにはバグバウンティ制度はありません。そのような制度があったら、リリースするソフトウェアにバグがないことを慎重に確認するインセンティブにもなるため、ぜひ導入されるといいなと思います。(独自トークンでの支払いだとこのインセンティブが弱いのでBTCでお願いします)