¿Qué hace algorand-vulnerability-scanner?
Escanea contratos inteligentes de Algorand en busca de 11 vulnerabilidades comunes, incluyendo ataques de rekeying, tarifas de transacción no verificadas, validaciones de campo faltantes y problemas de control de acceso. Útil al auditar proyectos de Algorand (TEAL/PyTeal).
Vulnerabilidades Detectadas
El escáner identifica las siguientes vulnerabilidades:
- Ataques de Rekeying: Verifica si el contrato permite que un atacante cambie la clave de autorización de una cuenta.
- Tarifas de Transacción No Verificadas: Detecta cuando el contrato no valida que las tarifas de transacción estén dentro de límites razonables.
- Validaciones de Campo Faltantes: Identifica si campos críticos de transacciones (como
type,sender,receiver) no se están validando adecuadamente. - Problemas de Control de Acceso: Encuentra debilidades que permitan a usuarios no autorizados ejecutar funciones restringidas.
- Uso Inseguro de Boxes: Señala si los contratos no protegen adecuadamente los datos almacenados en boxes.
- Falta de Verificación de Sender: Detecta cuándo no se verifica el remitente de una transacción en operaciones sensibles.
- Desbordamiento de Operaciones Aritméticas: Busca posibles desbordamientos en cálculos matemáticos.
- Reentrancia: Identifica patrones que permiten llamadas recursivas no controladas.
- Uso Incorrecto de
assert: Verifica que las aserciones se usen correctamente para evitar bloqueos inesperados. - Variables Globales Mal Gestionadas: Detecta uso incorrecto de variables globales como
Global.group_sizeoGlobal.latest_timestamp. - Falta de Verificación de
closeRemainderTo: Asegura que el contrato valide la dirección a la que se envía el saldo restante.
Cómo Usar el Escáner
Requisitos Previos
- Python 3.8 o superior
- Entorno virtual (opcional pero recomendado)
- Acceso al código fuente del contrato (archivos
.tealo.py)
Instalación
pip install algorand-vulnerability-scanner
Ejecución Básica
scanner --contract contrato.teal
Ejecución con Directorio de Proyecto
scanner --project-dir ./mi_proyecto_algorand
Opciones Adicionales
--output-format json: Para obtener resultados en formato JSON.--ignore-vuln VULN_ID: Para omitir una vulnerabilidad específica.--verbose: Para obtener información detallada durante el análisis.
Integración en CI/CD
Puedes integrar el escáner en tu pipeline de CI/CD usando el siguiente comando:
- name: Escanear vulnerabilidades
run: scanner --project-dir ./contratos --output-format json > informe.json
Ejemplo de Salida
Escaneando contrato: contrato.teal...
[!] Vulnerabilidad encontrada: Rekeying Attack
Descripción: El contrato no protege contra cambios de clave de autorización.
Ubicación: Línea 42
Recomendación: Verificar que 'RekeyTo' no se establezca a una dirección no confiable.
[✔] No se encontraron vulnerabilidades de acceso.
...
Notas Adicionales
- El escáner es compatible con contratos escritos en TEAL y PyTeal.
- Se recomienda ejecutar el escáner como parte de una auditoría de seguridad completa junto con pruebas manuales.
- Para vulnerabilidades críticas, el escáner puede fallar con un código de error para alertar al desarrollador.
Soporte y Reporte de Problemas
Si encuentras algún problema o tienes sugerencias, por favor reporta en el repositorio oficial de GitHub.