Prepared by:
HALBORN
Last Updated 06/26/2025
Date of Engagement: June 16th, 2025 - June 16th, 2025
100% of all REPORTED Findings have been addressed
All findings
1
Critical
0
High
0
Medium
0
Low
1
Informational
0
TAC
engaged Halborn
to perform a security assessment of their smart contracts on June 16th, 2025. This assessment focused on specific changes made to a Cosmos module provided to the Halborn
team. Commit hashes and additional details are available in the Scope section of this report.
TAC
is a Layer 1 introducing a novel TON-Adapter that enables Ethereum dApps to access Telegram’s users, and is also TON’s first EVM-equivalent extension.
The Halborn
team assigned two full-time security engineers to evaluate the security of the merge requests. These engineers are experts in blockchain and smart contract security, with advanced skills in penetration testing, smart contract auditing, and extensive knowledge of multiple blockchain protocols.
The objectives of this assessment were to:
Verify that the Golang components function as intended.
Identify potential security vulnerabilities within the Cosmos application.
In summary, Halborn
identified one improvement to reduce the likelihood and impact of risks, which was addressed by the TAC team
:
Implement checked conversion to prevent panic reverts.
Halborn
employed a combination of manual and automated security testing to balance efficiency, timeliness, practicality, and accuracy within the scope of the custom modules. Manual testing was used to uncover logical, procedural, and implementation flaws, while automated testing enhanced coverage and quickly identified deviations from security best practices. The following phases and tools were utilized during the assessment:
Research into architecture and purpose.
Static analysis of the scoped repository and imported functions using tools such as staticcheck
, gosec
, unconvert
, codeql
, ineffassign
, and semgrep
.
Manual assessment to identify security vulnerabilities within the codebase.
Verification of codebase correctness.
Dynamic analysis of files and modules within scope.
CosmosEVM
security assessment is limited to the files directly affected by the Pull Request listed in the Sources section. Only changes introduced or modified in this comparison were considered; any pre-existing vulnerabilities or issues outside these specific files are beyond the scope of this review. Additionally, the audit does not cover dependencies, configuration files, or runtime environments. Therefore, findings and recommendations apply solely to the code and files added, removed, or modified in this branch comparison.
EXPLOITABILITY METRIC () | METRIC VALUE | NUMERICAL VALUE |
---|---|---|
Attack Origin (AO) | Arbitrary (AO:A) Specific (AO:S) | 1 0.2 |
Attack Cost (AC) | Low (AC:L) Medium (AC:M) High (AC:H) | 1 0.67 0.33 |
Attack Complexity (AX) | Low (AX:L) Medium (AX:M) High (AX:H) | 1 0.67 0.33 |
IMPACT METRIC () | METRIC VALUE | NUMERICAL VALUE |
---|---|---|
Confidentiality (C) | None (I:N) Low (I:L) Medium (I:M) High (I:H) Critical (I:C) | 0 0.25 0.5 0.75 1 |
Integrity (I) | None (I:N) Low (I:L) Medium (I:M) High (I:H) Critical (I:C) | 0 0.25 0.5 0.75 1 |
Availability (A) | None (A:N) Low (A:L) Medium (A:M) High (A:H) Critical (A:C) | 0 0.25 0.5 0.75 1 |
Deposit (D) | None (D:N) Low (D:L) Medium (D:M) High (D:H) Critical (D:C) | 0 0.25 0.5 0.75 1 |
Yield (Y) | None (Y:N) Low (Y:L) Medium (Y:M) High (Y:H) Critical (Y:C) | 0 0.25 0.5 0.75 1 |
SEVERITY COEFFICIENT () | COEFFICIENT VALUE | NUMERICAL VALUE |
---|---|---|
Reversibility () | None (R:N) Partial (R:P) Full (R:F) | 1 0.5 0.25 |
Scope () | Changed (S:C) Unchanged (S:U) | 1.25 1 |
Severity | Score Value Range |
---|---|
Critical | 9 - 10 |
High | 7 - 8.9 |
Medium | 4.5 - 6.9 |
Low | 2 - 4.4 |
Informational | 0 - 1.9 |
Critical
0
High
0
Medium
0
Low
1
Informational
0
Security analysis | Risk level | Remediation Date |
---|---|---|
Possible uint256 Overflow Panic | Low | Solved - 06/24/2025 |
//
In precompiles/staking/tx.go::Delegate
, uint256.MustFromBig(scaledAmt)
panics if scaledAmt > 2^{256}-1
. Triggering this condition would require supplying at least 1.15\times10^{65}
native tokens (assuming a 6-decimal denomination), which far exceeds any realistic total supply:
// Scale the amount to 18 decimals for the EVM balance change entry
scaledAmt := evmtypes.ConvertAmountTo18DecimalsBigInt(msg.Amount.Amount.BigInt())
p.SetBalanceChangeEntries(cmn.NewBalanceChangeEntry(delHexAddr, uint256.MustFromBig(scaledAmt), cmn.Sub))
The condition is practically unreachable and cannot be exploited as a denial-of-service vector. However, replacing the Must…
helper with a checked conversion is a low-cost hardening measure:
scaled, overflow := uint256.FromBig(scaledAmt)
if overflow {
return nil, fmt.Errorf("delegate amount too large for uint256")
}
p.SetBalanceChangeEntries(cmn.NewBalanceChangeEntry(delHexAddr, scaled, cmn.Sub))
SOLVED: The suggested mitigation was implemented.
Halborn strongly recommends conducting a follow-up assessment of the project either within six months or immediately following any material changes to the codebase, whichever comes first. This approach is crucial for maintaining the project’s integrity and addressing potential vulnerabilities introduced by code modifications.
// Download the full report
Cosmos EVM
* Use Google Chrome for best results
** Check "Background Graphics" in the print settings if needed