T09 · Insecure Skill Coding Practices
- Location
src/adapters/circle.ts:190- Finding
Circle API failures are converted into fabricated successful transfers
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
KarmaBank is a coherent USDC lending skill, but its live financial paths can record fake successful transfers and rely on weak identity checks, so it needs careful review before use.
Treat this as a Review install. Use only sandbox/testnet Circle credentials and isolated wallets unless the transfer-handling and identity-verification issues are fixed. Do not rely on its ledger for real financial accounting until failed Circle operations fail closed, transaction status is independently confirmed, Moltbook identity ownership is enforced, and dependencies are pinned and reproducible.
src/adapters/circle.ts:190Circle API failures are converted into fabricated successful transfers
src/cli/commands/register.ts:20Moltbook reputation can be used without proving ownership of the identity
package.json:31Security-sensitive dependencies are installed without reproducible version resolution
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
The skill reportedly accepts arbitrary credit limits and exposes broad administrative lifecycle operations instead of strictly enforcing the published Bronze-to-Diamond model derived from Moltbook karma. That makes the system more dangerous in context because it handles a lending workflow, where arbitrary limits and hidden admin actions can directly affect fund disbursement and borrower treatment.
Both disburseLoan and receiveRepayment return success:true with COMPLETE status when Circle API operations throw, even though no transfer may have occurred. In a lending system, this can desynchronize financial state from on-chain or provider reality, causing loans to be marked paid out or repaid without actual movement of USDC.
The disburseLoan function performs a real asset transfer via client.sendUSDC but provides no confirmation prompt, logging, or explicit user disclosure in the code around this safety-critical action. Because it can disburse loans and move funds on-chain, users or calling systems are not warned before an irreversible financial operation occurs.
The receiveRepayment function calls client.sendUSDC to transfer funds from an agent wallet to the pool wallet, which is a safety-critical and potentially irreversible action. There is no visible confirmation prompt, disclosure, or warning in the function to alert the user or operator that a real repayment transfer is being initiated.
When an agent's outstanding balance reaches zero or below after repayment, the code sets the agent status to SUSPENDED. In a lending system this inverts the expected business logic, allowing successful repayment to disable otherwise healthy accounts, which can cause denial of service, incorrect credit decisions, and potential abuse if attackers can trigger or race repayment updates.
The README encourages users to run borrowing and wallet-creation commands but provides no warning that these actions may trigger blockchain transactions, create custodial/non-custodial wallets, or interact with funded API-backed services. In a financial skill, omission of risk disclosures can cause users to expose funds, create wallets unintentionally, or assume the actions are harmless test commands when the configuration also supports real Circle integration.
The README lists sensitive environment variables for Moltbook and Circle without any guidance on secure storage, least-privilege handling, or avoiding accidental disclosure. Users may place live API secrets into shell history, source control, logs, or shared agent environments, which is especially risky because the skill appears able to create wallets and handle borrowing flows tied to financial infrastructure.
The skill advertises network and environment-dependent behavior such as API-key use, Moltbook API access, and Circle wallet operations, but it does not declare any explicit tool scope or allowed-tools. In an agent ecosystem, missing permission boundaries can cause an agent to invoke network or env capabilities implicitly, making secret access and external actions less auditable and easier to misuse.
The documentation for borrow/repay and wallet commands does not clearly and prominently warn that, when Circle is configured, these actions may create wallets or move real USDC. In a finance-related skill, insufficient disclosure of real-world side effects increases the chance of accidental transfers, operator confusion, and unsafe autonomous use.
The documented 'Auto-approved' borrowing flow indicates autonomous approval of a financial action when within a limit, especially in combination with a '--yes' flag. In context, this is risky because an agent could trigger borrowing without meaningful human review, and if the limit checks are weak or misimplemented, funds may be disbursed automatically.
karmabank borrow myagent 500 --yes
### Repay USDC
The test file explicitly notes that behavior may differ when Circle is configured, then proceeds to call loan disbursement and repayment functions that may trigger real external payment flows. In a financial skill handling USDC, tests that can hit live infrastructure create a meaningful risk of unintended state changes, token transfers, or use of production credentials during routine test execution or CI.
getPoolWallet and getWalletBalance silently substitute mock wallet data or a hardcoded balance when the real Circle API fails. In a credit product, this can lead to incorrect lending decisions, false liquidity assumptions, and follow-on fund movement attempts based on fabricated state.
The manifest describes a lending skill based on Moltbook karma score, which makes profile and karma lookup an expected implementation detail. However, this adapter also creates identity tokens and verifies identities, introducing an authentication/attestation capability not mentioned in the manifest's borrowing-and-tiering scope.
The register command calls getMoltbookProfile(name), which indicates a network lookup of the provided identifier. Although there is a console log saying it is fetching the profile, the file does not provide any warning about external data transmission or privacy implications beyond the operational status message.
Detected: suspicious.env_credential_access, suspicious.exposed_secret_literal