Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】sUSDe has an admin function that moves a holder's balance to another address. My scanner missed it for weeks.

2026年09月19日に「Dev.to」が公開したITニュース「sUSDe has an admin function that moves a holder's balance to another address. My scanner missed it for weeks.」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

sUSDeのステーキング契約に、管理者が特定ユーザーの残高を他アドレスへ移動、または焼却できる機能がある。これはコードに明示されており、隠れた脆弱性ではない。実行には24時間のタイムロックが必要で、事前に公開される。

ITニュース解説

最近、ブロックチェーン上で稼働するステーブルコインの一種であるsUSDe(Staked USDe V2)のスマートコントラクトに、特定の管理機能が存在することが明らかになった。この機能は、通常であればユーザーが自由に管理するはずのデジタル資産に、管理者側が介入できるという点で注目される。システムエンジニアを目指す皆さんも、このようなスマートコントラクトの設計や権限管理の重要性を理解する上で、この事例は非常に良い学びの機会となるだろう。

具体的に発見されたのは、「redistributeLockedAmount」という名前の関数である。この関数は、sUSDeのステーキングコントラクト内に実装されており、その役割は、ある特定のアドレスが保有するsUSDeの残高を、別の指定されたアドレスに移動させるか、あるいはその残高を完全に焼却(ブロックチェーン上から削除)することだ。もし残高が焼却された場合、そのコントラクト全体で流通するsUSDeの総量が減るため、理論上は残りのsUSDeを保有している他のユーザーの資産価値が相対的に上昇する可能性がある。この操作を実行できるのは、コントラクトに定義された「DEFAULT_ADMIN_ROLE」という管理者権限を持つアドレスのみである。

この機能が実行されるには厳格な条件が設定されている。まず、残高を移動させられる「元のアドレス(from)」は、あらかじめ「FULL_RESTRICTED_STAKER_ROLE」という役割が付与されている必要がある。これは「完全制限されたステーカー」と訳され、コントラクトの所有者が、この役割を持つアドレスのステーキング残高をリダイレクトできるという意図が、コントラクトのコメントにも明記されている。つまり、この機能は隠されたバックドアや意図しない脆弱性として存在するのではなく、ソースコード上で公開され、特定の目的のために設計されたものである。また、残高を受け取る「先のアドレス(to)」は、この「FULL_RESTRICTED_STAKER_ROLE」を持っていてはならないという条件も課せられている。

さらに、このような管理者権限が悪用されるのを防ぐための仕組みも導入されている。誰を「FULL_RESTRICTED_STAKER_ROLE」に指定するかは、「BLACKLIST_MANAGER_ROLE」という別の役割を持つアドレスが「addToBlacklist」関数を呼び出すことで決定される。つまり、残高の移動を直接行う管理者とは異なるアドレスが、制限対象を決定する権限を持つことで、権限の分散が図られているのだ。そして最も重要なのは、この管理者権限自体が「タイムロック」という仕組みによって保護されていることである。タイムロックとは、管理者が何らかの操作を実行しようとする際に、その操作が実際に実行されるまでに一定の待機期間(このsUSDeのケースでは24時間)が設けられる仕組みだ。この待機期間中、操作の内容は公開されるため、もし不正な意図を持った操作が計画されたとしても、コミュニティがそれに気づき、対応する時間が与えられることになる。

では、もしあなたがsUSDeを保有している場合、この機能はあなたにどのような影響を与える可能性があるのだろうか。まず、一度「FULL_RESTRICTED_STAKER_ROLE」が付与されて制限されたアドレスは、そのsUSDeを他のアドレスに送金したり、コントラクトから引き出したり、償還したりすることが一切できなくなる。つまり、その資産は実質的に凍結された状態となる。もしあなたがsUSDeを、自身で秘密鍵を管理していないコントラクト、例えばDeFi(分散型金融)のボールト、レンディングプラットフォーム、あるいは複数の署名が必要なマルチシグウォレットなどを通じて保有している場合、注意が必要である。なぜなら、そのコントラクトのアドレス自体が制限の対象となった場合、たとえあなた個人のアドレスが制限されていなくても、そのコントラクトを介して保有しているあなたのsUSDeは影響を受ける可能性があるからだ。ただし、この記事の著者自身も、この「redistributeLockedAmount」機能が実際に使用された証拠は現時点で見つけていないと述べている。

この情報を発見した著者は、自身の開発した「Contract Powers Registry」というツールを運用している。これは、スマートコントラクトの所有者がどのような権限を持っているかを分類し、リスト化する目的で作られたものだ。しかし、「redistributeLockedAmount」関数は、当初このツールの既存の分類カテゴリ(例えば、コントラクトのアップグレード、新たなトークンの発行、ブラックリストへの追加、資産の移動、一時停止など)のどれにも合致しなかったため、自動スキャンでは見落とされていた。著者は、自らがソースコードを詳細に読み込むことでこの機能を発見し、その後ツールの改善を行い、カテゴライズされていない所有者のみの関数もリストアップするように改良したという。この経験は、自動化されたセキュリティチェックツールの限界と、人間の手による詳細なコードレビューの重要性を示唆している。

今回の解説は、あくまでsUSDeのスマートコントラクトのコードから読み取れる事実に基づいている。著者は、誰が「BLACKLIST_MANAGER_ROLE」を保持しているのか、タイムロックの提案権限や実行権限を誰が持っているのか、あるいは発行元であるEthenaのオフチェーンポリシーがこの機能の使用をどのように制限しているか、といった点については確認していないことを明言している。システムエンジニアを目指す皆さんにとって、スマートコントラクトの設計がいかに複雑であり、その透明性と権限管理の仕組みが非常に重要であるかを理解する一助となるだろう。実際にこれらの情報を自分で確認したい場合は、EtherscanでsUSDeコントラクトの検証済みソースコードを参照し、owner()関数やタイムロックコントラクトのgetMinDelay()関数を呼び出すことで、記事中の主張を検証できる。

関連コンテンツ

関連IT用語

関連ITニュース