Back to skill

Security audit

FRED-Navigator

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent FRED lookup helper, but it disables HTTPS certificate verification while using a FRED API key, so it needs review before install.

Review this skill before installing. Remove the SSL context override in scripts/fred_query.py so HTTPS certificates are verified, then pin and review dependency versions. Use a restricted FRED API key and expect the helper commands to contact FRED over the network when querying categories or series.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/fred_query.py:12
Finding

Global TLS Certificate Verification Disabled for Authenticated FRED Requests

Content
View full analysis
Fred: api_key = os.getenv("FRED_API_KEY") if not api_key: raise SystemExit("Missing FRED_API_KEY in environment") return Fred(api_key=api_key) ``` ### Technical Analysis The script globally replaces Python's default HTTPS context factory with `ssl._create_stdlib_context`. In this context, that compatibility factory creates an unverified TLS context, disabling normal certificate-chain and hostname verification for HTTPS connections made by the process. Network access to the FRED service is necessary for the Skill's declared functionality. Disabling certificate verification is not necessary and exceeds the minimum security relaxation required to perform that function. Because the same process supplies `FRED_API_KEY` to `fredapi`, authenticated API requests can be exposed to an active network attacker. This is a process-wide change rather than a narrowly scoped connection setting. Therefore, any library in the same process that relies on Python's default HTTPS context may also inherit the insecure behavior. ### Attack Path 1. A user runs `scripts/fred_query.py` with `FRED_API_KEY` present in the environment. 2. The script globally installs an unverified default HTTPS context. 3. The script initializes `fredapi` with the API key and performs an HTTPS request. 4. An attacker capable of intercepting traffic, such as a malicious proxy, compromised gateway, or hostile wireless-network operator, presents an arbitrary certificate. 5. The client accepts the certificate without validating its chain or hostname. 6. The att ...[truncated 815 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Third-Party Dependencies Are Installed Without Version or Integrity Constraints

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (17)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared purpose suggests an interactive or query-processing skill for navigating FRED categories and series using fredapi, including natural-language understanding and validation logic. The actual code chunk does none of that: it only processes a local JSON reference file to build category path metadata and save it to another local JSON file. This is a materially different primary purpose and lacks the core declared capabilities.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The core domain is aligned with FRED category/series navigation, so the primary purpose is related. However, the declared description specifically claims natural-language queries with intent recognition and double validation, none of which appear in this code. Instead, the code exposes straightforward command-line subcommands that require explicit category IDs or series IDs. It also relies on local JSON reference files for category tree/flat data, an implementation aspect that materially affects behavior but is not reflected in the description. Therefore, the description overstates higher-level language/validation features that this code chunk does not implement.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- Optional: `references/category_paths.json` (precomputed)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- Optional: `references/category_paths.json` (precomputed)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- Optional: `references/category_paths.json` (precomputed)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- Update workflow or constraints: edit `SKILL.md`.

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.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The document explicitly provides only English and Chinese sections, which can amount to a language/locale constraint without user opt-in. The policy allows locale constraints when they are optional or clearly justified, but this README does not state that users may choose another language or that the bilingual limitation is required.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This markdown file explicitly states that the skill reads FRED_API_KEY from the environment, which is access to a sensitive credential source. The description does not include any warning or disclosure about credential use, privacy implications, or how the key is handled.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The entry "A Millennium of Macroeconomic Data for the UK" hard-codes the "UK" locale in natural-language content, which can be interpreted as a locale-specific constraint without any opt-in or explanatory context in this file. Under the stated policy, locale/language constraints should either offer user choice or be clearly documented and justified.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency on fredapi is unpinned, so installs can resolve to different versions over time, including future releases with breaking changes or newly introduced vulnerabilities. This weakens build reproducibility and supply-chain control, even though the file itself does not prove an actively exploitable flaw today.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
# Dependencies for FRED Scout Skill
fredapi
pandas

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
98% confidence
Finding

The pandas dependency is also unpinned, allowing installation of unpredictable versions depending on when and where the skill is deployed. In a security context this increases supply-chain risk and makes it harder to determine whether known vulnerable releases are in use.

Content

Scanner excerpt · requirements.txt (reported line 3)May include surrounding context.

text
# Dependencies for FRED Scout Skill
fredapi
pandas

Unverifiable Dependency: pandas has 1 known advisory(ies) (CVE-2020-13091 (** DISPUTED ** pandas through 1.0.3 can unserialize and execute commands from an)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
81% confidence
Finding

Because pandas is not version-pinned, it is impossible to verify from this manifest whether deployment could select a release affected by the cited advisory. The advisory is disputed and the manifest alone does not show direct unsafe deserialization usage, so the immediate risk is limited, but the uncertainty itself is a supply-chain weakness.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

This code makes external API requests via fred.search_by_category, but there is no confirmation prompt or user-facing notice at the call site. For code files, network calls that transmit user or system data should have some visible disclosure unless clearly warned elsewhere; this file only notes the API key requirement, not that queries are sent to a remote service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The function fetches series data from FRED over the network, but the code provides no visible disclosure beyond the library wrapper context. Under the rule, network/HTTP operations should include some user-facing indication or documentation unless the warning exists elsewhere.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This function sends the provided series identifier to the FRED API to retrieve metadata, but there is no confirmation, user-facing log, or explanatory comment about the external request. The existing module docstring mentions the API key requirement but not the fact that user-provided identifiers are transmitted remotely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The check-category command calls the FRED API to determine whether a category has series, but the code does not visibly inform the user that an external network request is being made. This meets the missing-warning criterion for code files handling network operations without disclosure.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.