Algorand漏洞扫描器Skill algorand-vulnerability-scanner

这是一个用于扫描Algorand区块链智能合约安全漏洞的工具,专注于检测11种常见漏洞,如重密钥攻击、未检查交易费用等,适用于安全审计和开发评估。关键词:Algorand、智能合约、安全扫描、漏洞检测、区块链审计。

智能合约 0 次安装 0 次浏览 更新于 3/14/2026

名称: algorand-vulnerability-scanner 描述: 扫描Algorand智能合约中的11种常见漏洞,包括重密钥攻击、未检查交易费用、缺失字段验证和访问控制问题。用于审计Algorand项目(TEAL/PyTeal)。

Algorand漏洞扫描器

1. 目的

系统性地扫描Algorand智能合约(TEAL和PyTeal)中的平台特定安全漏洞,这些漏洞记录在Trail of Bits的“Not So Smart Contracts”数据库中。此技能编码了11种关键漏洞模式,专属于Algorand的交易模型。

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.py
  • contract.teal / signature.teal
  • 引用Algorand SDK或Beaker框架

工具支持

  • Tealer: Trail of Bits的Algorand静态分析器
  • 安装: pip3 install tealer
  • 使用: tealer contract.teal --detect all

4. 此技能如何工作

当调用时,我将:

  1. 搜索代码库 中的TEAL/PyTeal文件
  2. 分析每个文件 的11种漏洞模式
  3. 报告发现 包括文件引用和严重性
  4. 提供修复 针对每个识别的问题
  5. 运行Tealer(如果已安装)进行自动检测

5. 示例输出

当发现漏洞时,您将获得类似此报告:

=== ALGORAND漏洞扫描结果 ===

项目: my-algorand-dapp
扫描文件: 3 (.teal, .py)
发现漏洞: 2

---

[严重] 重密钥攻击
文件: 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种模式)

我检查11种关键的Algorand特定漏洞模式。有关详细检测模式、代码示例、缓解和测试策略,请参见[VULNERABILITY_PATTERNS.md](resources/VULNERABILITY_PATTERNS.md)。

### 模式摘要:

1. **重密钥漏洞** ⚠️ 严重 - 未检查RekeyTo字段
2. **缺失交易验证** ⚠️ 严重 - 无GroupSize/GroupIndex检查
3. **组交易操作** ⚠️ 高 - 不安全的组交易处理
4. **资产回收风险** ⚠️ 高 - 缺失回收地址检查
5. **应用程序状态操作** ⚠️ 中 - 不安全的全局/本地状态更新
6. **资产选择加入缺失** ⚠️ 高 - 无资产选择加入验证
7. **最低余额违规** ⚠️ 中 - 账户低于最低余额
8. **关闭剩余地址检查** ⚠️ 高 - 未检查CloseRemainderTo字段
9. **应用程序清除状态** ⚠️ 中 - 不安全的清除状态程序
10. **原子交易排序** ⚠️ 高 - 假设交易顺序
11. **逻辑签名重用** ⚠️ 高 - 逻辑签名无唯一性约束

有关完整漏洞模式及代码示例,请参见[VULNERABILITY_PATTERNS.md](resources/VULNERABILITY_PATTERNS.md)。
## 5. 扫描工作流

### 步骤1: 平台识别
1. 确认文件扩展名(`.teal`, `.py`)
2. 识别框架(PyTeal, Beaker, 纯TEAL)
3. 确定合约类型(状态化应用程序 vs 智能签名)
4. 定位批准和清除状态程序

### 步骤2: 使用Tealer的静态分析
```bash
# 在合约上运行Tealer
tealer contract.teal --detect all

# 或特定检测器
tealer contract.teal --detect unprotected-rekey,group-size-check,update-application-check

步骤3: 手动漏洞扫描

对于上述11种漏洞中的每一种:

  1. 搜索相关交易字段使用
  2. 验证验证逻辑存在
  3. 检查绕过条件
  4. 验证内部交易处理

步骤4: 交易字段验证矩阵

为所有使用的交易类型创建清单:

支付交易:

  • [ ] RekeyTo已验证
  • [ ] CloseRemainderTo已验证
  • [ ] 费用已验证(如果是智能签名)

资产转移:

  • [ ] 资产ID已验证
  • [ ] AssetCloseTo已验证
  • [ ] RekeyTo已验证

应用程序调用:

  • [ ] OnComplete已验证
  • [ ] 访问控制强制执行
  • [ ] 组大小已验证

内部交易:

  • [ ] 费用明确设置为0
  • [ ] RekeyTo非用户控制(Teal v6+)
  • [ ] 所有字段已验证

步骤5: 组交易分析

对于原子交易组:

  1. 验证Global.group_size()检查
  2. 审查绝对 vs 相对索引
  3. 检查重放保护(Lease字段)
  4. 验证ApplicationCalls在组中的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检查
)

攻击场景:

  1. 攻击者提交设置RekeyTo为攻击者地址的支付交易
  2. 合约未检查RekeyTo即批准交易
  3. 账户授权被重密钥给攻击者
  4. 攻击者获得账户完全控制

推荐: 添加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. 优先级指南

### 严重(需要立即修复)
- 重密钥攻击
- CloseRemainderTo / AssetCloseTo问题
- 访问控制绕过

### 高(部署前修复)
- 未检查交易费用
- 资产ID验证问题
- 组大小验证
- 清除状态交易检查

### 中(审计中解决)
- 内部交易费用问题
- 基于时间的重放攻击
- 通过资产选择加入的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. 额外资源


10. 快速参考清单

在完成Algorand审计前,验证所有项目已勾选:

  • [ ] RekeyTo在所有交易类型中已验证
  • [ ] CloseRemainderTo在支付交易中已验证
  • [ ] AssetCloseTo在资产转移中已验证
  • [ ] 交易费用已验证(智能签名)
  • [ ] 组大小已验证原子交易
  • [ ] Lease字段用于重放保护(如果适用)
  • [ ] 更新/删除操作有访问控制
  • [ ] 资产ID在所有资产操作中已验证
  • [ ] 资产转移使用拉模式以避免DoS
  • [ ] 内部交易费用明确设置为0
  • [ ] OnComplete字段在ApplicationCall交易中已验证
  • [ ] Tealer扫描完成无关键/高发现
  • [ ] 单元测试覆盖所有漏洞场景