Back to skill

Security audit

Sbti Fun Test

Security checks for vulnerabilities and agentic risk

Overview

This is a local entertainment personality quiz with no hidden network, credential, persistence, or system-modifying behavior.

Install this as an entertainment-only Chinese-language quiz. Be aware that the documentation appears to overstate the V3 result count, and older V1/V2 scripts are included, so use the documented scripts/sbti_test.py entrypoint for the current version.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (19)

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding
The code does broadly implement a humorous SBTI-style personality test, so the general category is aligned. However, several core advertised features in the description are materially inaccurate relative to the code: the script contains 31 questions rather than 30, each question has only A/B choices rather than 4 options, it defines roughly 23 personality types rather than 28, and there is no implementation of unique ASCII-art pets for each type. The supplied file is also labeled v1, not V3. Because these are central product characteristics rather than minor implementation details, the description does not accurately represent the code.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The code is clearly a benign local personality test and generally aligns at a high level with the idea of an SBTI quiz using 30 questions, 4 options, humorous results, and ASCII-art pets. However, the declared description does not accurately represent this specific code chunk. The implementation is explicitly V2 rather than V3, branded as '电子宠物版' rather than '梗王版', and the set/number of personality types materially differs from the declared 28 types and examples provided. The code defines only 23 personality types, with different names and scoring logic. Therefore this is a description-behavior mismatch, even though there are no suspicious undeclared permissions or external-resource accesses.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The code does match the broad category of an entertainment personality quiz with 30 questions, 4 answer choices, and ASCII-art pets. However, the declared description makes concrete content claims that are not reflected in the implementation: it says V3 with 28 personality types and lists example types such as 自我攻击者、吗喽、狗屎人、握草人, while the supplied code is explicitly a V2 backup and defines only 23 types with a different set of names (e.g. CTRL, SHIT/愤世者, LOVE, FART, etc.). This is a material mismatch in the actual test content and scope, even though there are no suspicious undeclared behaviors or permission/resource mismatches.

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Content
ist[str]  # 该题影响哪些维度
    option_a: str
    option_b: str
    option_c: str
    option_d: str
    # 每个选项对应的维度得分
    scores_a: Dict[str, int]
    scores_b: Dict[str, int]
    scores_c: Dict[str, int]
    scores_d: Dict[str, int]


@dataclass
class SBTIType:
    """SBTI人格类型 + ASCII宠物"""
    code: str
    name: str
    nickname: str
    emoji: str
    description: str
    traits: List[str]
    pet_art: str  # ASCII艺术宠物
    pet_name: str  # 宠物名字


# ==================== ASCII艺术宠物库 ====================

PET_ARTS = {
    "CTRL": """
    ╭─────────╮
    │  👑 CTRL  │
    ╰────┬────╯
         │
       🎩👑🎩
       ( ͡° ͜ʖ ͡°)
       <⚡️  ⚡️>
        ╱   ╲
       ╱ 👊  ╲
      🕴️  掌控者 🕴️
    """,
    
    "SHIT": """
       💩 SHIT
      ╱     ╲
     │  ಠ_ಠ  │
     │  ╭─╮  │
     │  │ │  │
Confidence
80% confidence
Finding
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Content
ist[str]  # 该题影响哪些维度
    option_a: str
    option_b: str
    option_c: str
    option_d: str
    # 每个选项对应的维度得分
    scores_a: Dict[str, int]
    scores_b: Dict[str, int]
    scores_c: Dict[str, int]
    scores_d: Dict[str, int]


@dataclass
class SBTIType:
    """SBTI人格类型 + ASCII宠物"""
    code: str
    name: str
    nickname: str
    emoji: str
    description: str
    traits: List[str]
    pet_art: str  # ASCII艺术宠物
    pet_name: str  # 宠物名字


# ==================== ASCII艺术宠物库 ====================

PET_ARTS = {
    "CTRL": """
    ╭─────────╮
    │  👑 CTRL  │
    ╰────┬────╯
         │
       🎩👑🎩
       ( ͡° ͜ʖ ͡°)
       <⚡️  ⚡️>
        ╱   ╲
       ╱ 👊  ╲
      🕴️  掌控者 🕴️
    """,
    
    "SHIT": """
       💩 SHIT
      ╱     ╲
     │  ಠ_ಠ  │
     │  ╭─╮  │
     │  │ │  │
Confidence
80% confidence
Finding
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Content
��目 - 4选项版本"""
    id: int
    text: str
    dimensions: List[str]
    option_a: str
    option_b: str
    option_c: str
    option_d: str
    scores_a: Dict[str, int]
    scores_b: Dict[str, int]
    scores_c: Dict[str, int]
    scores_d: Dict[str, int]


@dataclass
class SBTIType:
    """SBTI人格类型 + ASCII宠物"""
    code: str
    name: str
    nickname: str
    emoji: str
    description: str
    traits: List[str]
    pet_art: str
    pet_name: str


# ==================== 新梗王版ASCII艺术宠物库 ====================

PET_ARTS = {
    "IMSB": """
      💔 IMSB
    ╭────────╮
    │  (╥﹏╥)  │
    │  我垃圾  │
    │  我不行  │
    ╰────┬───╯
       🔪│🔪
        🩸
     自我攻击刺猬
    """,
    
    "BOSS": """
      👔 BOSS
    ╭────────╮
    │ 😎😎😎 │
    │  听我的 │
    │  我说了算│
    ╰────┬───╯
       💼�
Confidence
80% confidence
Finding
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Content
��目 - 4选项版本"""
    id: int
    text: str
    dimensions: List[str]
    option_a: str
    option_b: str
    option_c: str
    option_d: str
    scores_a: Dict[str, int]
    scores_b: Dict[str, int]
    scores_c: Dict[str, int]
    scores_d: Dict[str, int]


@dataclass
class SBTIType:
    """SBTI人格类型 + ASCII宠物"""
    code: str
    name: str
    nickname: str
    emoji: str
    description: str
    traits: List[str]
    pet_art: str
    pet_name: str


# ==================== 新梗王版ASCII艺术宠物库 ====================

PET_ARTS = {
    "IMSB": """
      💔 IMSB
    ╭────────╮
    │  (╥﹏╥)  │
    │  我垃圾  │
    │  我不行  │
    ╰────┬───╯
       🔪│🔪
        🩸
     自我攻击刺猬
    """,
    
    "BOSS": """
      👔 BOSS
    ╭────────╮
    │ 😎😎😎 │
    │  听我的 │
    │  我说了算│
    ╰────┬───╯
       💼�
Confidence
80% confidence
Finding
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
The skill documentation and user-facing content are written almost entirely in Chinese, with no indication that users can choose another language or that the skill is intended only for a Chinese-speaking audience. Under the stated policy, forcing a specific language without opt-in is a natural-language policy violation.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
This code presents the skill name, questions, and descriptions in a single fixed language, and the interactive flow later also prompts users only in Chinese. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The runtime interface shown to users is exclusively Chinese, including title, instructions, answer prompt, and validation message. Because the skill does not offer a language choice or disclose that it is intentionally Chinese-only, it violates the language/locale policy criterion.

Natural-Language Policy Violations

Medium
Confidence
90% confidence
Finding
This code file includes user-facing natural-language content that assumes Chinese as the only interaction language, including the module description and later prompts. Under the policy rule, forcing a specific language without user opt-in is a natural-language policy violation unless the locale constraint is explicitly justified.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This code presents the skill entirely in Chinese and the interactive prompts later also require Chinese-language usage, but there is no user opt-in or documented justification for a Chinese-only locale. The policy scope explicitly covers natural-language strings in code files, so this is a language/locale policy issue rather than a code-security issue.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The runtime interface shown to users is fully Chinese, including instructions and input validation messages, with no option to switch languages. Because the skill does not offer user choice or justify the locale restriction, this conflicts with the stated policy on forced language or locale.

Description-Behavior Mismatch

Medium
Confidence
99% confidence
Finding
The manifest describes 'SBTI personality test V3' with '28种接地气的人格类型'. This code implements an older 'V2' test, defines 9 scoring dimensions, and provides 23 personality outcomes (CTRL through BOBO), so the actual behavior and content differ from the skill's claimed functionality.

Natural-Language Policy Violations

Medium
Confidence
90% confidence
Finding
SQP-3 applies to all file types and covers language or locale policy violations. This file's user-facing instructions, questions, and results are all Chinese-only, and there is no opt-in, fallback, or explanation that the skill is intended only for a Chinese-speaking region or audience.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This code presents the test title, prompts, questions, result descriptions, and user interaction entirely in Chinese, indicating a fixed language/locale experience. The file does not provide any user opt-in, language selection, or justification that the skill is intended only for a Chinese-speaking or region-specific context.

Intent-Code Divergence

Low
Confidence
99% confidence
Finding
The top-level documentation says the test is '基于15个维度', which implies a 15-dimension model. However, the Dimension enum and scoring state only implement 9 dimensions, so the documentation actively misstates the core behavior of the test logic rather than merely omitting detail.

Intent-Code Divergence

Low
Confidence
98% confidence
Finding
The top-level documentation states the test is '基于15个维度', which describes the skill's core behavior. However, the code defines only 9 dimensions in the Dimension enum and uses those same 9 dimensions for scoring and result calculation, so the documentation materially contradicts the implemented test logic.

Intent-Code Divergence

Low
Confidence
78% confidence
Finding
The code documentation identifies this as 'SBTI 测试 V2 - 4选项版', while the manifest describes a V3 test with 28 personality types. This file is explicitly a backup V2 implementation and its inline documentation reflects that older version, creating an intent/version mismatch with the stated skill identity.

Static analysis

No suspicious patterns detected.