7 repositories connected. Each ran its latest scan via the GitHub Action; click a repo for findings, history, and trend.
Repository
Language
Score
Critical
High
Last scan
30d trend
payments-apihelios-banking/payments-api
TypeScript
A−
2
3
4m ago
core-ledgerhelios-banking/core-ledger
Java
A
0
1
4m ago
htlc-bridgehelios-banking/htlc-bridge
Solidity
B+
1
2
4m ago
aml-screeninghelios-banking/aml-screening
Python
A−
0
2
5m ago
wallet-svchelios-banking/wallet-svc
Go
B
1
3
5m ago
customer-portalhelios-banking/customer-portal
TypeScript
A
0
1
6m ago
analytics-batchhelios-banking/analytics-batch
Python
B+
0
2
6m ago
Findings
26 active findings across 7 repos. AI assessment + suggested patch shown for each. Mark as accepted-risk or false-positive — feedback flows back into the AI training set.
AI assessment
confidence: 0.94 · real vulnerability
The /transfer endpoint accepts client-supplied amount and recipient with no idempotency key — a network retry or accidental double-click will execute the transfer twice. The fix is a server-side dedup window keyed on (caller_id, request_id, amount_hash) with a TTL ≥ the client retry budget.
contracts/HTLCEscrow.sol:228: function refund(bytes32 htlcId) external nonReentrant whenNotPaused { ...
AI assessment
confidence: 0.91 · real vulnerability
refund() doesn't enforce that the caller is the original sender. Funds still go to the original sender, but anyone can grief the swap by triggering refunds before the legitimate counterparty claims. This breaks atomic-swap semantics. Pattern matches the digital_escrow SC-C1 finding — see P-712 for the canonical fix.
function refund(bytes32 htlcId) external nonReentrant whenNotPaused {
HTLC storage htlc = htlcs[htlcId];
if (htlc.sender == address(0)) revert HTLCNotFound();
+ if (msg.sender != htlc.sender) revert UnauthorizedRefund();
if (htlc.claimed) revert AlreadyClaimed();
AI assessment
confidence: 0.86 · real vulnerability
The relay() function accepts a signed cross-chain message but does not bind block.chainid into the signed payload. An attacker who captures a message on chain A can replay it on chain B at the same contract address. Wormhole lost $320M to a structurally similar bug in February 2022.
Withdraw() reads balance and decrements without a SELECT FOR UPDATE or advisory lock. Under concurrent withdrawals from the same account, the balance check can succeed twice before either decrement persists. Add a row-level lock or atomic UPDATE-WHERE for safety.
Compliance
Framework-control rollups across all 7 repos. Click any framework for the per-control breakdown and a one-click evidence bundle for your auditor.
Frameworks evaluated12+2 this quarter
Total controls241across all frameworks
Passing214+11
Evidence bundles ready8+3
Frameworks
PCI-DSS v4.0
Card payments34 / 37
SOC 2 (TSC 2017)
Trust Services Criteria52 / 59
ISO 27001:2022
InfoSec management78 / 91
MiCA (EU 2024)
EU crypto-asset13 / 17
DORA (EU 2025)
Digital operational resilience22 / 27
NIST CSF 2.0
Govern · Identify · Protect20 / 22
Settings
Organization, team, billing, license, API tokens, notifications, data export.
Organization
Organization nameShown on branded reports.
LogoSVG or PNG, displayed on PDF cover pages and the customer portal.