注目★★★★★GitHub Advisory
klever-go、100%分配でロイヤルティを無限生成
30秒で把握
- 1klever-go の 100% split で送信元ロイヤルティ debit が未実行
- 2移転ロイヤルティ全額を受取先へ加算し KDA を帳簿外生成
- 3所有者設定後は全保有者の移転で発生、固定方式は影響なし
要約
klever-go の percentage-transfer royalty 処理に、分配率がちょうど 100% の場合に送信元のロイヤルティ debit を回避できる脆弱性がある。`processPercentageRoyaltiesTransfer` は分配後に `SubFromBalance` を実行するため、`PercentTransferPercentage = 10000` で残額が 0 になると早期 return し、受取先だけに `royaltyAmount` が加算される。送信元の残高と supply counter は減らず、移転のたびに KDA が帳簿外で生成される。設定には KDA 所有者権限が必要だが、設定後は他の保有者による移転でも発生する。固定ロイヤルティ処理は先に debit するため影響を受けない。修正は分配前の debit と回帰テスト追加で、コンセンサスに関わるため次の activation flag で制御する。
あなたへの影響
klever-go で percentage-transfer royalty と 100% split を利用するチームは、設定を直ちに確認し、該当 KDA の移転・残高・供給量を監査してください。
推奨:送信元 debit を分配前に行う修正と回帰テストの導入が必要です。