algorand-vulnerability-scanner
Algorandスマートコントラクトを対象に、リキーイング攻撃・未検証のトランザクション手数料・フィールドバリデーション不備・アクセス制御の欠陥など11種類の一般的な脆弱性を自動スキャンします。TEAL/PyTealで構築されたAlgorandプロジェクトのセキュリティ監査時に活用してください。
description の原文を見る
Scans Algorand smart contracts for 11 common vulnerabilities including rekeying attacks, unchecked transaction fees, missing field validations, and access control issues. Use when auditing Algorand projects (TEAL/PyTeal).
SKILL.md 本文
Algorand脆弱性スキャナー
1. 目的
Algorandスマートコントラクト(TEAL及びPyTeal)をシステマティックにスキャンして、Trail of Bitsの「Not So Smart Contracts」データベースに記載されているプラットフォーム固有のセキュリティ脆弱性を検出します。このスキルはAlgorandのトランザクションモデルに特有の11個の重大な脆弱性パターンをエンコードしています。
2. このスキルを使用する場合
- Algorandスマートコントラクト(ステートフルアプリケーションまたはスマートシグネチャ)の監査
- TEALアセンブリまたはPyTealコードのレビュー
- Algorandプロジェクトの監査前のセキュリティ評価
- 報告されたAlgorand脆弱性の修正の検証
- Algorand固有のセキュリティパターンについてのチームトレーニング
3. プラットフォーム検出
ファイル拡張子とインジケータ
- TEALファイル:
.teal - PyTealファイル:
.py(PyTealインポート付き)
言語/フレームワークマーカー
# PyTealインジケータ
from pyteal import *
from algosdk import *
# 一般的なパターン
Txn, Gtxn, Global, InnerTxnBuilder
OnComplete, ApplicationCall, TxnType
@router.method, @Subroutine
プロジェクト構造
approval_program.py/clear_program.pycontract.teal/signature.teal- AlgorandのSDKまたはBeakerフレームワークへの参照
ツール対応
- Tealer: Trail of BitsのAlgorand向けスタティック分析ツール
- インストール:
pip3 install tealer - 使用方法:
tealer contract.teal --detect all
4. このスキルの動作方法
呼び出すと、以下を実行します:
- コードベースを検索してTEAL/PyTealファイルを探す
- 各ファイルを分析して11個の脆弱性パターンを検出
- 検出結果をレポート(ファイル参照と重大度付き)
- 各問題に対する修正を提供
- Tealerを実行(インストール済みの場合)して自動検出を実施
5. 出力例
脆弱性が見つかった場合、以下のようなレポートが表示されます:
=== ALGORAND脆弱性スキャン結果 ===
プロジェクト: my-algorand-dapp
スキャンファイル数: 3 (.teal, .py)
検出脆弱性数: 2
---
[CRITICAL] リキーイング攻撃
ファイル: contracts/approval.py:45
パターン: RekeyToの検証がない
コード:
If(Txn.type_enum() == TxnType.Payment,
Seq([
# 不足: Assert(Txn.rekey_to() == Global.zero_address())
App.globalPut(Bytes("balance"), balance + Txn.amount()),
Approve()
])
)
問題: コントラクトがRekeyToフィールドを検証していないため、攻撃者は
アカウント認可を変更して制限を回避できます。
---
## 5. 脆弱性パターン(11パターン)
Algorandに特有の11個の重大な脆弱性パターンをチェックしています。詳細な検出パターン、コード例、軽減策、テスト戦略については、[VULNERABILITY_PATTERNS.md](resources/VULNERABILITY_PATTERNS.md)を参照してください。
### パターンの概要:
1. **リキーイング脆弱性** ⚠️ CRITICAL - 未チェックのRekeyToフィールド
2. **トランザクション検証の不足** ⚠️ CRITICAL - GroupSize/GroupIndexチェックがない
3. **グループトランザクション操作** ⚠️ HIGH - グループトランザクション処理が安全でない
4. **資産クローバックリスク** ⚠️ HIGH - クローバックアドレスチェックがない
5. **アプリケーション状態操作** ⚠️ MEDIUM - グローバル/ローカル状態更新が安全でない
6. **資産オプトインの不足** ⚠️ HIGH - 資産オプトイン検証がない
7. **最小残高違反** ⚠️ MEDIUM - アカウントが最小残高以下
8. **CloseRemainderToチェック** ⚠️ HIGH - 未チェックのCloseRemainderToフィールド
9. **アプリケーションクリア状態** ⚠️ MEDIUM - クリア状態プログラムが安全でない
10. **アトミックトランザクション順序** ⚠️ HIGH - トランザクション順序を仮定している
11. **ロジックシグネチャ再利用** ⚠️ HIGH - 一意性制約のないロジックシグ
完全な脆弱性パターンとコード例については、[VULNERABILITY_PATTERNS.md](resources/VULNERABILITY_PATTERNS.md)を参照してください。
## 5. スキャンワークフロー
### ステップ1: プラットフォーム識別
1. ファイル拡張子(`.teal`、`.py`)を確認
2. フレームワーク(PyTeal、Beaker、純粋TEAL)を識別
3. コントラクトタイプ(ステートフルアプリケーション対スマートシグネチャ)を判定
4. 承認プログラムとクリア状態プログラムを特定
### ステップ2: Tealerによるスタティック分析
```bash
# コントラクトに対してTealerを実行
tealer contract.teal --detect all
# または特定の検出器を実行
tealer contract.teal --detect unprotected-rekey,group-size-check,update-application-check
ステップ3: 手動脆弱性チェック
上記の11個の脆弱性ごとに:
- 関連するトランザクションフィールドの使用を検索
- 検証ロジックが存在することを確認
- バイパス条件をチェック
- 内部トランザクション処理を検証
ステップ4: トランザクションフィールド検証マトリックス
使用されるすべてのトランザクションタイプのチェックリストを作成:
支払いトランザクション:
- RekeyToが検証されている
- CloseRemainderToが検証されている
- 手数料が検証されている(スマートシグネチャの場合)
資産転送:
- 資産IDが検証されている
- AssetCloseToが検証されている
- RekeyToが検証されている
アプリケーション呼び出し:
- OnCompleteが検証されている
- アクセス制御が実施されている
- グループサイズが検証されている
内部トランザクション:
- 手数料が明示的に0に設定されている
- RekeyToがユーザーコントロールでない(Teal v6以上)
- すべてのフィールドが検証されている
ステップ5: グループトランザクション分析
アトミックトランザクショングループの場合:
Global.group_size()チェックを検証- 絶対値対相対的なインデックスを確認
- リプレイ保護(Leaseフィールド)をチェック
- グループ内のApplicationCallのOnCompleteフィールドを検証
ステップ6: アクセス制御レビュー
- クリエータ/管理者権限が適切に実施されている
- 更新/削除操作が保護されている
- 機密性の高い関数に認可チェックがある
6. レポート形式
検出結果テンプレート
## [重大度] 脆弱性名(例:RekeyTo検証の欠落)
**場所**: `contract.teal:45-50`または`approval_program.py:withdraw()`
**説明**:
コントラクトがRekeyToフィールドを検証せずに支払いトランザクションを承認しており、攻撃者がアカウントをリキーして今後の認可チェックを回避できます。
**脆弱なコード**:
```python
# approval_program.py、45行目
If(Txn.type_enum() == TxnType.Payment,
Approve() # RekeyToチェックがない
)
攻撃シナリオ:
- 攻撃者がRekeyToを攻撃者のアドレスに設定した支払いトランザクションを送信
- コントラクトがRekeyToをチェックせずにトランザクションを承認
- アカウント認可が攻撃者にリキーされる
- 攻撃者がアカウント全体を制御できるようになる
推奨事項: RekeyToフィールドの明示的な検証を追加してください:
If(And(
Txn.type_enum() == TxnType.Payment,
Txn.rekey_to() == Global.zero_address()
), Approve(), Reject())
参考資料:
- building-secure-contracts/not-so-smart-contracts/algorand/rekeying
- Tealer検出器:
unprotected-rekey
---
## 7. 優先度ガイドライン
### Critical(即座の修正が必要)
- リキーイング攻撃
- CloseRemainderTo / AssetCloseTo問題
- アクセス制御バイパス
### High(デプロイ前に修正)
- 未チェックのトランザクション手数料
- 資産ID検証問題
- グループサイズ検証
- クリア状態トランザクションチェック
### Medium(監査で対応)
- 内部トランザクション手数料の問題
- タイムベースのリプレイ攻撃
- 資産オプトインによるDoS
---
## 8. テスト推奨事項
### 必須ユニットテスト
- 各脆弱性シナリオをPoC悪用でテスト
- 修正が悪用を防ぐことを検証
- エッジケース(グループサイズ=0、空のアドレスなど)をテスト
### Tealer統合
```bash
# CI/CDパイプラインに追加
tealer approval.teal --detect all --json > tealer-report.json
# クリティカル検出時にビルド失敗
tealer approval.teal --detect all --fail-on critical,high
シナリオテスト
- すべての重大フィールドを操作したトランザクションを送信
- 予期しないサイズのアトミックグループをテスト
- アクセス制御バイパスを試行
- 内部トランザクション手数料処理を検証
9. 追加リソース
- Building Secure Contracts:
building-secure-contracts/not-so-smart-contracts/algorand/ - Tealer Documentation: https://github.com/crytic/tealer
- Algorand Developer Docs: https://developer.algorand.org/docs/
- PyTeal Documentation: https://pyteal.readthedocs.io/
10. クイックリファレンスチェックリスト
Algorand監査を完了する前に、すべての項目がチェックされていることを確認してください:
- すべてのトランザクションタイプでRekeyToが検証されている
- 支払いトランザクションでCloseRemainderToが検証されている
- 資産転送でAssetCloseToが検証されている
- トランザクション手数料が検証されている(スマートシグネチャ)
- アトミックトランザクションでグループサイズが検証されている
- リプレイ保護にLeaseフィールドが使用されている(該当する場合)
- Update/Delete操作のアクセス制御
- すべての資産操作で資産IDが検証されている
- 資産転送がDoS回避のためのプルパターンを使用している
- 内部トランザクション手数料が明示的に0に設定されている
- ApplicationCallトランザクションのOnCompleteフィールドが検証されている
- Tealerスキャンがクリティカル/ハイ検出なしで完了している
- ユニットテストがすべての脆弱性シナリオをカバーしている
ライセンス: CC-BY-SA-4.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- trailofbits
- リポジトリ
- trailofbits/skills
- ライセンス
- CC-BY-SA-4.0
- 最終更新
- 不明
Source: https://github.com/trailofbits/skills / ライセンス: CC-BY-SA-4.0
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。