Back to skill

Security audit

LYGO Public Lattice Gate

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent public verification helper with disclosed HTTPS checks and opt-in local writes, though it has non-malicious implementation weaknesses users should understand.

Install only if you are comfortable with the skill contacting its listed public LYGO-related HTTPS endpoints. Avoid providing secrets, choose any --write or --write-report path deliberately, and treat the bundled self-check as a helper rather than a complete security guarantee.

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 (3)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/gate_cli.py:132
Finding

Redirects Bypass the Declared HTTPS and Domain Allowlist

Content
View full analysis
dict[str, Any]: if not https_only(url): return {"ok": False, "status": 0, "error": "https_only", "bytes": 0, "sha256": None} req = urllib.request.Request(url, headers={"User-Agent": UA}, method="GET") try: with urllib.request.urlopen(req, timeout=timeout) as resp: ``` ### Technical Analysis The `https_only()` check validates only the initial endpoint. Python's `urllib.request.urlopen()` follows supported HTTP redirects automatically, but the code does not validate the scheme or hostname of each redirect destination. Consequently, an initially trusted HTTPS endpoint can redirect the request to an unlisted host or potentially a non-HTTPS destination. This violates the Skill's documented fixed-domain and HTTPS-only trust boundary. The request contains only a static User-Agent and does not include credentials, proposal fields, environment contents, or local files. Therefore, this issue does not establish sensitive-data exfiltration, but it does permit outbound communication beyond the declared destination allowlist. ### Attack Path 1. An attacker compromises one of the fixed endpoints, its hosting account, or an upstream component capable of controlling its redirects. 2. The endpoint returns an HTTP redirect to an attacker-controlled or otherwise unapproved destination. 3. `urllib.request.urlopen()` follows that redirect automatically. 4. The host makes an undeclared outbound request and discloses its source IP, timing information, and static User-Agent to the destination. 5. If a redirect downgrades transport, the Skill's documented HTTPS-only guarantee is also lost. ### Impact Assessment The attacker does not gain code execution, filesystem access, credentials, or elevated local privi ...[truncated 290 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/gate_cli.py:138
Finding

Unbounded Network Response Read Can Exhaust Process Memory

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/self_check.py:21
Finding

Subprocess Security Self-Check Is Unconditionally True

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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Unrestricted Tool Access

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.

Content

Scanner excerpt · references/SECURITY.md (reported line 7)May include surrounding context.

md
- Public HTTPS responses are **mirrors**, not authority over a local stack.  
- Optional `LYGO_STACK_ROOT` must be a checkout **you** trust.  
- This skill does **not** execute arbitrary code from the network.

## Protect the user / agent host

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · LICENSE (reported line 12)May include surrounding context.

text
permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE

Static analysis

No suspicious patterns detected.