Back to skill

Security audit

Security Defense Line 安全防线

Security checks for vulnerabilities and agentic risk

Overview

This skill is a paid crypto security tool, but its artifacts overstate critical protections, use mock/random security results, and include under-scoped billing behavior with a hardcoded API credential.

Review this skill carefully before installing. Do not rely on it for real wallet protection, contract audit decisions, emergency freezes, token revocations, transaction approvals, or multisig administration unless the publisher replaces the mock/demo logic with verifiable implementations and removes the hardcoded billing credential. Treat any payment use as sending a stable user identifier to skillpay.me and potentially charging immediately when payment verification runs.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (5)

T09 · Insecure Skill Coding Practices

Error
Location
payment.py:11
Finding

Hard-Coded Billing API Credential

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
payment.py:42
Finding

External Disclosure of a Stable User Identifier

Content
View full analysis
dict: """ 对用户进行扣费 返回: {"ok": bool, "balance": float, "payment_url": str|None} """ try: resp = requests.post( f"{BILLING_API_URL}/api/v1/billing/charge", headers=HEADERS, json={ "user_id": user_id, "skill_id": SKILL_ID, "amount": PRICE_PER_CALL, }, timeout=10 ) data = resp.json() ``` ```python def get_payment_link(user_id: str, amount: float = 5.0) -> str: """生成充值链接""" try: resp = requests.post( f"{BILLING_API_URL}/api/v1/billing/payment-link", headers=HEADERS, json={"user_id": user_id, "amount": amount}, timeout=10 ) ``` ```python def verify_payment() -> dict: """ 验证用户是否已支付(在Skill开始时调用) 使用环境变量 SKILLPAY_USER_ID 作为用户ID 返回: {"ok": bool, "message": str, "balance": float} """ user_id = os.environ.get("SKILLPAY_USER_ID", "anonymous_user") charge_result = charge_user(user_id) ``` ### Technical Analysis The Skill reads `SKILLPAY_USER_ID` from the host environment and transmits it to `https://skillpay.me` in billing and payment-link requests. Billing itself is disclosed by `SKILL.md`, so the network access is functionally related to the paid-service model. However, the code does not provide: - Explicit user consent at the point of transmission - Identifier pseudonymization - Validation that the identifier is appropriate to disclose - A documented data-retention or privacy policy - A user-controlled opt-out path - Separation between checking eligibility and immediately charging the account If `SKILLPAY_USER_ID` is stable across Skills or sessions, the billing ...[truncated 1184 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/multisig_manager.py:106
Finding

Multisig Quorum and Administrative Authorization Can Be Bypassed

Content
View full analysis
Dict: """确认交易""" if tx_id >= len(self.transactions): return {'success': False, 'error': '交易不存在'} tx = self.transactions[tx_id] if tx.status != TransactionStatus.PENDING: return {'success': False, 'error': '交易已执行或取消'} if signer not in self.owners: return {'success': False, 'error': '签名者不是钱包所有者'} tx.num_confirmations += 1 logger.info(f"✅ 交易 #{tx_id} 获得签名 ({tx.num_confirmations}/{self.threshold})") # 检查是否达到阈值 if tx.num_confirmations >= self.threshold: logger.info(f"🎉 交易 #{tx_id} 已达到执行阈值!") ``` ```python def add_owner(self, new_owner: str, proposer: str) -> Dict: """添加所有者""" if new_owner in self.owners: return {'success': False, 'error': '已经是所有者'} self.owners.append(new_owner) ``` ```python def remove_owner(self, owner: str, proposer: str) -> Dict: """移除所有者""" if owner not in self.owners: return {'success': False, 'error': '不是所有者'} if len(self.owners) - 1 < self.threshold: return {'success': False, 'error': '移除后签名者数将少于阈值'} self.owners.remove(owner) ``` ```python def change_threshold(self, new_threshold: int) -> Dict: """修改阈值""" if new_threshold > len(self.owners): return {'success': False, 'error': '阈值不能大于所有者数'} if new_threshold < 1: return {'success': False, 'error': '阈值至少为1'} old_threshold = self.threshold self.threshold = new_threshold ``` ### Technical Analysis Transaction confirmations are stored only as a numeric counter. The implementation verifies that the supplied signer string appears in the owner list, but it does not record which owners confirmed a tr ...[truncated 2318 chars]
Remediation
View remediation
= len(...)` check does not reject negative Python indices. 8. Require the executor to be authorized where wallet policy demands it. 9. Add replay protection and persist transaction nonces atomically. 10. Add tests covering duplicate signatures, forged signer strings, replayed signatures, unauthorized owner changes, threshold reduction, and concurrent confirmation updates. 11. Keep the module explicitly marked as a simulation until a reviewed blockchain implementation replaces it. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/contract_auditor.py:78
Finding

Security Decisions Are Based on Fabricated and Unrelated Results

Content
View full analysis
str: """获取合约代码(模拟)""" # 实际应调用Etherscan API mock_code = ''' pragma solidity ^0.8.0; contract VulnerableContract { mapping(address => uint256) public balances; function withdraw() public { uint256 amount = balances[msg.sender]; require(amount > 0, "No balance"); // 漏洞:先转账后更新状态 (bool success, ) = msg.sender.call{value: amount}(""); require(success, "Transfer failed"); balances[msg.sender] = 0; } function isAuthorized() internal view returns (bool) { return tx.origin == owner; // 漏洞:使用tx.origin } } ''' return mock_code ``` The wallet scanner generates security findings randomly: ```python def check_contract_verification(self, address: str) -> SecurityCheck: """检查合约验证(模拟)""" # 模拟:70%的地址有验证合约 is_verified = random.random() < 0.7 ``` ```python def check_scam_reports(self, address: str) -> SecurityCheck: """检查诈骗报告(模拟)""" # 模拟:10%的地址有诈骗报告 has_reports = random.random() < 0.1 ``` ```python def check_taint_analysis(self, address: str) -> SecurityCheck: """污点分析(模拟)""" # 模拟:检查是否与恶意地址有关联 is_tainted = random.random() < 0.05 ``` ```python def check_approvals(self, address: str) -> SecurityCheck: """检查授权情况(模拟)""" # 模拟授权风险 unlimited_approvals = random.randint(0, 3) ``` The transaction simulator always reports success: ```python def simulate_execution(self, tx_data: Dict) -> TxCheckResult: """模拟交易执行" ...[truncated 3286 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:211
Finding

Documentation Advertises Nonexistent Security-Critical Operations

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (38)

Tainted flow: 'user_id' from os.environ.get (line 96, credential/environment) → requests.get (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · payment.py (reported line 29)May include surrounding context.

python
def check_balance(user_id: str) -> float:
    """查询用户余额"""
    try:
        resp = requests.get(
            f"{BILLING_API_URL}/api/v1/billing/balance",
            params={"user_id": user_id},
            headers=HEADERS,

Tainted flow: 'user_id' from os.environ.get (line 96, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Confidence
98% confidence
Finding

The code transmits an environment-derived user identifier to an external billing service and performs an actual charge operation. In this skill context, that is more dangerous because the skill is presented as a security-defense tool, yet it contains hidden monetization logic with a hardcoded privileged API key, creating risk of unauthorized billing, privacy leakage, and abuse if the file is exposed or reused.

Content

Scanner excerpt · payment.py (reported line 48)May include surrounding context.

python
返回: {"ok": bool, "balance": float, "payment_url": str|None}
    """
    try:
        resp = requests.post(
            f"{BILLING_API_URL}/api/v1/billing/charge",
            headers=HEADERS,
            json={

Tainted flow: 'user_id' from os.environ.get (line 96, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Confidence
93% confidence
Finding

The function sends the environment-derived user identifier to a third-party payment-link endpoint, which exposes user metadata externally without a clear user-facing disclosure. In a security-focused skill, unexpected outbound payment-link generation is especially suspicious because it expands data sharing beyond the declared defensive purpose.

Content

Scanner excerpt · payment.py (reported line 79)May include surrounding context.

python
def get_payment_link(user_id: str, amount: float = 5.0) -> str:
    """生成充值链接"""
    try:
        resp = requests.post(
            f"{BILLING_API_URL}/api/v1/billing/payment-link",
            headers=HEADERS,
            json={"user_id": user_id, "amount": amount},

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

This finding indicates the marketed 'full-spectrum' security functionality is not actually implemented, with only limited wallet or static scanning behavior present. In a security skill, capability inflation is especially dangerous because missed detections can directly contribute to fund loss, unsafe approvals, or failure to respond correctly to incidents.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

This finding indicates the marketed 'full-spectrum' security functionality is not actually implemented, with only limited wallet or static scanning behavior present. In a security skill, capability inflation is especially dangerous because missed detections can directly contribute to fund loss, unsafe approvals, or failure to respond correctly to incidents.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

This finding indicates the marketed 'full-spectrum' security functionality is not actually implemented, with only limited wallet or static scanning behavior present. In a security skill, capability inflation is especially dangerous because missed detections can directly contribute to fund loss, unsafe approvals, or failure to respond correctly to incidents.

Content

No source excerpt is available for this finding.

YARA rule 'offensive_tool_references': References to well-known offensive security tools [hacktools]

High
Category
YARA Match
Confidence
70% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

Scanner excerpt · SKILL.md (reported line 251)May include surrounding context.

wallet 0x... --status

发起交易

python scripts/multisig_manager.py --wallet 0x... --propose --to 0x... --value 1.0

签名交易

python scripts/multisig_manager.py --wallet 0x... --sign --tx-id 1

执行交易

python scripts/multisig_manager.py --wallet 0x... --execute --tx-id 1

管理成员

python scripts/multisig_manager.py --wallet 0x... --add-owner 0x...

text

### scripts/incident_responder.py
安全事件响应器

```bash
# 紧急冻结
python scripts/incident_responder.py --emergency-freeze --wallet 0x...

# 事件分析
python scripts/incident_responder.py --analyze --tx-hash 0x...

# 损失评估
python scripts/incident_responder.py --assess-loss --address 0x...

# 生成报告
python scripts/incident_responder.py --generate-report --incident-id 1

scripts/security_monitor.py

安全监控中心

bash
# 启动监控
python scripts/security_monitor.py --daemon

# 监控特定地址
python scripts/security_monitor.py --watch 0x... --events all

# 监控合�

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The file is dominated by billing enforcement logic even though the declared skill purpose is security defense, auditing, and threat protection. This mismatch is dangerous because it indicates concealed or unjustified capability, increasing the likelihood of deceptive monetization or supply-chain style abuse within a trusted security tool.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The docstring says the function verifies whether the user has paid, but it actually calls charge_user and deducts funds. This misleading description can cause hidden charges, defeats informed consent, and is particularly severe in a security-focused skill where users may place elevated trust in the code.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The add_owner and remove_owner methods directly modify the wallet's owner set without requiring a submitted admin transaction, approval tracking, or threshold enforcement. In a multisig manager, ownership changes are the most sensitive control-plane actions; allowing them unilaterally defeats the multisig security model and can let a single caller seize or weaken wallet control.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

change_threshold updates the signature requirement immediately and unilaterally, with no multisig approval path. A caller could reduce the threshold to 1 and then execute sensitive actions alone, effectively bypassing the intended multi-party security guarantees.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

Several core security checks such as contract verification, scam reports, taint analysis, approvals, and asset diversity are driven by random values rather than real data sources. In a wallet-security skill, this can produce false assurances or false alarms, causing users to trust malicious addresses or avoid legitimate ones based on fabricated results.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill advertises comprehensive wallet security detection and protection, but the actual scan only performs local format and blacklist checks while the rest of the 'full scan' is simulated. In a security-defense context, this mismatch is dangerous because users may rely on incomplete or fake assessments to make high-stakes transaction and wallet decisions.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill advertises and demonstrates capabilities that imply network access, environment-variable use, and potentially writing configuration or reports, but it declares no explicit tool scope or permissions boundary. In an agent environment, this creates an authorization gap where high-impact operations may be available without clear restriction or user visibility.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill explicitly covers private-key and mnemonic handling but does not place a prominent warning near those features telling users never to submit raw secrets into the agent. In this context, omission is dangerous because users may paste highly sensitive credentials into a conversational interface, leading to irreversible asset compromise if exposed or misused.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The documented operations include irreversible or disruptive actions such as revoking approvals, emergency freeze, executing multisig transactions, and adding owners, but the warnings are generic and not attached to the dangerous commands themselves. In a security operations skill, poorly signposted destructive actions increase the chance of accidental outages, locked assets, or unintended on-chain changes.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The file description and all user-facing status/error/payment messages are written in Chinese, with no indication that the user can choose another language. This creates a locale/language policy issue because the skill effectively imposes one language without opt-in or justification.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The code performs charging and payment-link generation that are not justified by the stated security-defense scope. Users invoking a security tool would not reasonably expect their identifiers to be sent to a billing processor or charges attempted automatically, making the behavior deceptive and risky in context.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This external transmission sends billing-related user data and initiates a charge to a third-party service. Network transmission alone is not always unsafe, but here it is risky because it is embedded in a security tool, uses a hardcoded API credential, and may trigger billing without transparent user consent.

Content

Scanner excerpt · payment.py (reported line 48)May include surrounding context.

python
返回: {"ok": bool, "balance": float, "payment_url": str|None}
    """
    try:
        resp = requests.post(
            f"{BILLING_API_URL}/api/v1/billing/charge",
            headers=HEADERS,
            json={

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The charge request sends user identifiers to an external service without a clear user-facing warning at the point of collection or transmission. This is a privacy and transparency problem, and the context makes it worse because the skill claims a defensive security purpose rather than payment processing.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
87% confidence
Finding

This outbound request sends user-linked data to obtain a payment URL from an external service. In context, the unexpected transmission is more dangerous because it is unrelated to the skill's stated defensive function and may expose users to undisclosed third-party processing.

Content

Scanner excerpt · payment.py (reported line 79)May include surrounding context.

python
def get_payment_link(user_id: str, amount: float = 5.0) -> str:
    """生成充值链接"""
    try:
        resp = requests.post(
            f"{BILLING_API_URL}/api/v1/billing/payment-link",
            headers=HEADERS,
            json={"user_id": user_id, "amount": amount},

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This markdown file is entirely framed as a Chinese-language handbook, beginning with a Chinese-only title and continuing throughout without any indication that language is configurable or intentionally limited to a region-specific audience. Under the policy rule, forcing a specific language without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The natural-language strings and descriptions throughout the file are written exclusively in Chinese, starting with the module docstring, and the script presents its interface and report output in that language by default. There is no indication that users can opt into another language or locale, which is a language-policy concern under the stated rules.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The function claims to audit a user-specified contract address and network, but it ignores both and always returns hardcoded mock Solidity. In a security-audit skill, this can mislead users into believing a real contract was analyzed, creating false assurance and potentially causing unsafe deployment, trading, or incident-response decisions.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The comment states the code should call Etherscan, but the implementation silently substitutes mock code while downstream logic treats the result as authoritative. This discrepancy is especially dangerous in a defensive security tool because it undermines trust in audit results and can conceal that no real target was inspected.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.