ポリゴンPoS、複数のセキュリティ問題を2つのハードフォークで修正

2つのハードフォークでセキュリティ問題を修正

ポリゴンPoS(Polygon PoS)で、セキュリティとネットワークの稼働継続性に関する複数の問題が、2つのハードフォークによって修正されていたことが8月27日に明らかになった。ポリゴン側は、修正内容をメインネットで有効化した後に詳細を公開した。

現在ポリゴンPoSでは、ユーザーの取引処理やブロック生成を担う「ボー(Bor)」と、バリデーターによる検証やイーサリアム(Ethereum)との連携などを担う「ハイムダル(Heimdall)」という2つの主要なソフトウェアが稼働している。

今回、ボーでは「オースティン(Austin)」、ハイムダルでは「キョウト(Kyoto)」と呼ばれるハードフォークがそれぞれ実施された。修正は「Bor v2.10.0」と「Heimdall v0.11.0」で導入された。

ネットワークの合意形成に影響する修正を含むことから、両ハードフォークはまず非公開で展開された。その後、テストネット「アモイ(Amoy)」で検証し、メインネットで有効化したうえで、安全な状態になったことを確認してから修正内容が公開されたとのことだ。

ボー向けのオースティンでは、ブロック処理を妨害し、ネットワークを一時的に停止させる可能性のある2つの問題が修正された。いずれも、ノードに過大な処理を発生させることで正常な動作を妨げるサービス拒否(DoS)につながる問題だった。

1つ目は、イーサリアム側で発生した情報をポリゴンPoS側へ伝える「ステートシンク(state-sync)」に関する問題だ。ステートシンクは、イーサリアムからポリゴンPoSへのブリッジ入金などに利用されている。

ステートシンクイベントでは、ポリゴンPoS側でスマートコントラクトなどの処理が実行される。しかし、これまで1つのブロック内で使用できるガスには明確な上限が設けられていなかった。そのため、多数のステートシンクイベントや特に処理負荷の高いイベントによってブロック処理に長い時間がかかり、チェーンを一時的に停止させる可能性があった。

そのためオースティンでは、1つのブロック内でステートシンクイベントが使用できるガスに上限を設け、処理量を制限した。

2つ目は、複数のトランザクションを同時に処理する並列実行に利用されていた「TxDependency」と呼ばれるデータに関する問題だ。TxDependencyは、ブロック内でどのトランザクション同士が競合しないかを示す情報として使われていた。

しかし、TxDependencyにはデータサイズの上限がなかった。そのためブロック生成者が極端に大きなTxDependencyを含めることで、それを受信した他のノードをクラッシュさせる可能性があった。

この問題に対してオースティンでは、TxDependencyをブロックのデータ形式から削除した。他のノードがこの情報を受け取らなくても並列実行は正常に動作するため、後続処理への影響はないとのことだ。

なお、これら2つはネットワークが合意した内容の正しさそのものを損なう問題ではない。また、メインネットで障害を引き起こした事実は確認されておらず、悪用される前に修正されたとのことだ。

全バリデーターに高負荷を与える問題も

ハイムダル向けのキョウトでは、バリデーターが受け取るデータの検証や、ネットワークの合意処理に関する複数の問題が修正された。このうちポリゴンが最も深刻としているのが、細工した1つのトランザクションによって、すべてのバリデーターに高い処理負荷を同時に与えられる問題だ。

ハイムダルが処理するトランザクションでは、データの中に別のデータを何重にも入れる「入れ子構造」を利用できる。これまで入れ子の深さに上限がなかったため、攻撃者は極端に深い構造を持つトランザクションを低コストで作成し、それを検証するすべてのバリデーターに大量のデータ解析処理を強制することが可能だった。

そのためキョウトでは、トランザクションを処理する前にデータを検査し、入れ子の深さが一定のしきい値を超えた場合に拒否する仕組みを導入した。しきい値は通常のトランザクションでは到達しない水準に設定されている。

またキョウトでは、トランザクションで手数料として指定できるコインの種類数に上限を設けた。このほか、ポリゴンPoSの状態をイーサリアムへ記録するチェックポイントやバリデーターによる投票、イーサリアムから受け取るイベントの処理なども修正された。これらは、チェックポイントや合意処理、L1イベントの処理などを、例外的なケースや高い処理負荷に耐えられるよう強化された。

オースティンとキョウトはいずれもアモイとメインネットですでに有効化されている。8月27日時点でポリゴンは、「Bor v2.10.0」をすべてのノード、「Heimdall v0.11.0」をすべてのバリデーターとフルノードに必要なアップグレードとして案内していた。いずれも状態の移行やネットワークを最初から同期し直す作業は必要ない。なお、ボーについては翌28日、ポリゴンの公式フォーラムで「Bor v2.10.1」へのアップグレードが案内されている。

参考:ポリゴン
画像:PIXTA

関連ニュース

関連するキーワード

この記事の著者・インタビューイ

渡邉洋輔

「あたらしい経済」編集部 記者 ブロックチェーンおよびデジタル資産分野を専門とし情報発信を行っている。オンチェーンデータや流動性構造など、市場設計の観点からのリサーチにも取り組んでいる。