Back to skill

Security audit

Knowledge Graph - Property Graph Schema Designer

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent Neo4j schema-design aid, with a helper script that generates Cypher text but does not execute it or access external systems.

Safe to install for schema-design help. Treat any generated Cypher as a draft: review labels, property names, constraints, and indexes before running them in Neo4j, and avoid feeding attacker-controlled schema names directly into the helper script without validation.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/schema_builder.py:66
Finding

Unvalidated Schema Identifiers and DDL Fragments in Generated Cypher

Content
View full analysis
NodeLabel: """Add a node label to schema.""" node = NodeLabel(label, description=description) self.nodes[label] = node return node def add_property_to_node(self, node_label: str, prop_name: str, prop_type: PropertyType = PropertyType.STRING, unique: bool = False, indexed: bool = False) -> None: """Add property to a node label.""" if node_label not in self.nodes: self.add_node(node_label) prop = Property(prop_name, prop_type, unique, indexed) self.nodes[node_label].add_property(prop) # Auto-create constraint for unique properties if unique: self.add_constraint(f"{node_label}.{prop_name} UNIQUE") # Auto-create index if indexed: self.add_index(f"ON (:{node_label})({prop_name})") def add_relationship(self, source: str, rel_type: str, target: str, properties: List[Property] = None) -> Relationship: """Add a relationship type to schema.""" rel = Relationship(source, rel_type, target, properties or []) self.relationships.append(rel) return rel def add_constraint(self, constraint: str) -> None: """Add constraint to schema.""" self.constraints.append(f"CREATE CONSTRAINT ON {constraint} IF NOT EXISTS") def add_index(self, index: str) -> None: """Add index to schema.""" self.indexes.append(f"CREATE INDEX {index} IF NOT EXISTS") def get_cypher_nodes(self) -> str: """Generate Cypher CREATE NODE statements.""" output = [] for label, node in self.nodes.items(): output.append(f"\n-- {label}") if node.description: output.append(f"-- {node.description}") output.append(f"CREATE ...[truncated 3512 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep

Static analysis

No suspicious patterns detected.