Skip to main content

Tealer

Tealer is a static analyzer for Teal code. It parses the Teal program, and builds its CFG. The analyzer comes with a set of vulnerabilities detectors and printers allowing to quickly review the contracts. In addition, tealer allows for custom path discovery through regular expression, and can be configured to follow the group information of the application.

Usage

To detect vulnerabilities

tealer detect --contracts file.teal

To run a printer

tealer print <printer_name> --contracts file.teal

To run the regular expression engine

tealer regex <regex_file.txt> --contracts file.teal

For additional configuration, see the Usage documentation.

Detectors

Num Detector What it detects Applies To Impact Confidence
1 is-deletable Deletable Applications Stateful High High
2 is-updatable Upgradable Applications Stateful High High
3 unprotected-deletable Unprotected Deletable Applications Stateful High High
4 unprotected-updatable Unprotected Upgradable Applications Stateful High High
5 group-size-check Usage of absolute indexes without validating GroupSize Stateless, Stateful High High
6 can-close-account Missing CloseRemainderTo field Validation Stateless High High
7 can-close-asset Missing AssetCloseTo Field Validation Stateless High High
8 missing-fee-check Missing Fee Field Validation Stateless High High
9 rekey-to Rekeyable Logic Signatures Stateless High High
10 constant-gtxn Unoptimized Gtxn Stateless Optimization High
11 self-access Unoptimized self access Stateless Optimization High
12 sender-access Unoptimized Gtxn Stateless Optimization High

For more information, see

Printers

Num Printer What it prints
1 call-graph Export the call graph of contract to a dot file
2 cfg Export the CFG of entire contract
3 human-summary Print a human-readable summary of the contract
4 subroutine-cfg Export the CFG of each subroutine
5 transaction-context Output possible values of GroupIndices, GroupSize

Printers output dot files. Use xdot to open the files (sudo apt install xdot).

Regular expression

Tealer can detect if there is a path between a given label and a set of instruction using the regex subcommand: tealer regex regex.txt --contracts file.teal.

The Regular expression file must be on the form:

label =>
  ins1
  ins2

If there is a match, tealer will generate a DOT file with the graph.

For an example, run tealer regex tests/regex/regex.txt --contract tests/regex/vote_approval.teal, with:

Which will generate regex_result.dot.

How to install

pip3 install tealer

Using Git

git clone https://github.com/crytic/tealer.git && cd tealer
make dev

Group configuration

To help tealer reasons about applications that are meant to be run in a group of transaction, the user can provide the group information through a configuration file:

The file format is still in development, and it is likely to evolve in the future

License

Tealer is licensed and distributed under the AGPLv3 license. Contact us if you're looking for an exception to the terms.

Metadata

Release files for tealer 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tealer 0.1.2
File Size Uploaded
tealer-0.1.2.tar.gz 179.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tealer 0.1.2
File Interpreter ABI Platform
tealer-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 421.8 kB

Release files / tealer-0.1.2.tar.gz

Download URL tealer-0.1.2.tar.gz
Size 179.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ba393a2d5fed0446e5bae791460bb8e2313f666a8db6f0405c29e3faa417c856
BLAKE2b-256 checksum
How to use checksums
4f76b57850592e4f79a44554b49eea6ae3e5a28f1f4001d6122fea936967ba55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / tealer-0.1.2-py3-none-any.whl

Download URL tealer-0.1.2-py3-none-any.whl
Size 242.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
78f9922b13837b3e1bf7e48bf55392a8f222d21cab62fe4ce2434441fed24a18
BLAKE2b-256 checksum
How to use checksums
34ec092f9c51d712437fb6e704d142d6fdeb9a66401e03f6b3134cf1d3a1d094
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page