ChainSecurityが影響事例13件を確認、開発者に点検呼びかけ
イーサリアム(Ethereum)の次期大型アップグレード「グラムステルダム(Glamsterdam)」に伴う仕様変更について、既存のスマートコントラクトが影響を受ける可能性のある実例が13件確認された。スマートコントラクトのセキュリティ企業チェーンセキュリティ(ChainSecurity)が10月22日に報告した。
同社は影響を受けるプロジェクトへの情報開示を進め、開発者に対し、既存のスマートコントラクトを早急に確認するよう呼びかけている。
グラムステルダムは、イーサリアムの処理能力向上に向け、ブロックの生成や検証の仕組みなどを見直す次期大型アップグレードだ。今回、チェーンセキュリティが問題を指摘したのは、同アップグレードに含まれるイーサリアム改善提案「EIP-8037」と「EIP-8038」によるガス計算の変更だ。ガスは、取引やスマートコントラクトの実行に必要な計算量を測る単位を指す。
具体的には、EIP-8037は、ブロックチェーン上に新たな「状態」を作成する際のガスコストを引き上げ、通常の実行処理とは別に計測する仕組みを導入する提案だ。状態とは、アカウント情報やスマートコントラクトの保存データなどを指す。一方、EIP-8038は、既存の状態へのアクセスや書き込みにかかるガスコストを見直すものだ。
チェーンセキュリティは10月13日付の技術解説で、こうした変更によってガスの消費量や、処理の失敗後に利用できるガスの量が変わると指摘していた。
例えば、あるスマートコントラクトが別のコントラクトを呼び出し、ガス不足で失敗した場合、従来は後続処理も完了できず、処理全体が取り消されることがあった。しかし、変更後は呼び出し元のコントラクトにガスが残り、失敗を記録する処理まで完了する可能性がある。その結果、本来は再試行できる操作が、コントラクトの設計によっては再試行できない失敗として記録されるおそれがあるとのこと。
GlamsterdamのHoodi実施延期と今後の対応
こうしたセキュリティ上の懸念を受け、イーサリアム財団(Ethereum Foundation)は10月22日、テストネット「フーディ(Hoodi)」で10月26日に予定していたグラムステルダムの実施延期を発表した。延期は、EIP-8037と既存のメインネット上のスマートコントラクトの相互作用を追加調査するため、同日のコア開発者会議で決定された。新たな実施日は未定となっている。
テストネットは、アップグレードを本番環境に導入する前に検証するためのネットワークだ。なお、グラムステルダムは別のテストネット「セポリア(Sepolia)」では10月6日に実施済みだが、実際の資産移転やサービスが稼働するメインネットへの適用日は決まっていない。
チェーンセキュリティは、確認した13件について、影響を受けるプロジェクトの関係者と責任ある情報開示の手続きを進めている。これは、問題の悪用を防ぐため、一般公開に先立って関係者に情報を伝え、対応を促す手続きだ。また、同社は、イーサリアム財団が影響を受けるスマートコントラクトの数や影響の内容を調査していると説明した。13件の具体的な内訳や、実際の被害の発生については明らかにされていない。
Last week, core devs had to delay forking the Hoodi testnet to Glamsterdam to study a report by @chain_security which revealed some problems with how EIP-8037 interacts with a few contracts. Over the weekend, ppl tried to get a better picture of the impact and by now it’s quite well understood. So here’s what you need to know: What’s been known is that contracts which hardcode forwarded gas are affected by repricings, e.g. making state writes (SSTORE) more expensive. What’s new is that some coding patterns rely on specific invariant which were broken with EIP-8037. Gas already spent can come back mid-tx, so gasleft() can go up. This causes two problems: (1) a before / after gas counter underflows and reverts (2) a failed sub-call hands gas back, so a path that should’ve been unreachable runs, and the tx looks like it succeeded Related but different: (3) measuring the gas usage of a call using GAS – before and after the call – might undercount because the state gas reservoir is not visible during execution (e.g. gas_left). It’s now about deciding how to proceed. Delaying hoodi bought time but won’t resolve the issue. This week, we have to dig deep into contracts and make sure nothing is missed. Eventually, this might just need some coordination among the involved parties (dapps, core devs, auditors, people running nodes, etc.), or worst-case, spec changes. If you’re an app dev or auditor, check your contracts for issues with EIP-8037/EIP-8038, and report them. Also, share this with your favorite app dev to spread awareness.
— Toni Wahrstätter ⟠ (@nero_eth) October 26, 2026
画像:PIXTA