Back to skill

Security audit

Splunk Log Analyzer Dashboard

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed local log-analysis tool with no evidence of data exfiltration, destructive behavior, or persistence, though it can read sensitive log files the user selects.

Install only if you are comfortable letting a local Streamlit app read the log directory you choose. Avoid pointing it at broad or sensitive directories unless necessary, review logs for secrets before analysis when possible, and prefer a contained Python environment because dependencies are installed from pip without pinned versions.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:10
Finding
Unpinned Third-Party Python Dependencies## Vulnerability Details **File Location**: `SKILL.md:10-28` **Vulnerability Type**: Unpinned dependencies and non-reproducible package resolution **Risk Level**: Medium ### Vulnerable Code ```yaml "install": [ { "id": "python", "kind": "pip", "package": "streamlit", "label": "Install Streamlit (pip)", }, { "id": "pandas", "kind": "pip", "package": "pandas", "label": "Install Pandas (pip)", }, { "id": "plotly", "kind": "pip", "package": "plotly", "label": "Install Plotly (pip)", }, ], ``` ### Technical Analysis The installation metadata identifies `streamlit`, `pandas`, and `plotly` only by package name, without exact versions or integrity hashes. Consequently, installation resolves whichever compatible releases are available from the configured Python package index at installation time. This makes installations non-reproducible and leaves the Skill exposed to supply-chain risks. If an upstream package, one of its transitive dependencies, the configured package index, or the dependency-resolution environment is compromised, installation may retrieve and execute code that was not present during this audit. Ordinary incompatible future releases could also unexpectedly alter application behavior. No evidence was found that these package names are intentionally malicious or that the project uses dependency confusion or typosquatting. The risk arises from unconstrained dependency resolution rather than from a confirmed compromise of the named packages. ### Attack Path 1. An attacker compromises an upstream package release, a transitive dependency, or the package index used by pip. 2. The attacker publishes a malicious version that satisfies the unconstrained package specification. 3. A user or automation framework installs the Skill dependencies after that version becomes available. 4. Pip ...[truncated 988 chars]
Remediation
## Remediation Suggestions 1. Pin every direct dependency to an exact, reviewed version, for example `streamlit==X.Y.Z`. 2. Generate and commit a lock file that records all transitive dependency versions. 3. Require cryptographic hashes during installation, such as through a hash-locked requirements file installed with `pip install --require-hashes`. 4. Obtain packages only from an explicitly configured, trusted package index. Avoid silently inheriting untrusted extra indexes or mirrors. 5. Perform dependency vulnerability and provenance checks in CI before approving lock-file updates. 6. Apply dependency updates through a controlled review process rather than automatically resolving the newest available releases. 7. Install and run the application in an isolated virtual environment or container under a non-privileged account with access limited to the required log directories.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
整体上,这段代码确实是一个纯本地日志分析工具,没有看到网络访问、外部数据上传或越权资源访问,因此与“纯本地日志分析系统”的大方向基本一致,也覆盖了日志统计、重复检测、错误检测和简单异常识别等核心能力。 但按严格的描述-行为一致性检查,仍存在实质性不匹配:第一,界面和 CORE_FUNCTIONS 中将一部分能力描述为“索引性能优化”“分析索引效率和查询性能”“存储优化”,而代码实际上只是做文件统计和错误检测,没有任何真实的索引、查询性能或存储优化分析逻辑,这是功能描述夸大。第二,LogParser.parse_line 中若匹配错误类型或攻击类型的正则,代码试图调用 match.group(1),但这些模式并未定义捕获组,说明相关字段提取实现不可靠,削弱了所宣称的错误分析/异常识别能力。 因此,虽然主用途接近声明,描述仍未准确反映实际可用能力,应判定为存在不匹配。

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill describes local log analysis and explicitly instructs users to analyze arbitrary filesystem paths such as /var/log/app.log, which implies file-reading capability. However, the manifest does not declare any permissions or allowed-tools scope, creating an authorization gap where the platform may not be able to constrain or clearly surface what files the skill is expected to access. In a log-analysis context this is meaningful because logs often contain secrets, tokens, credentials, or personal data.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The activation examples are broad enough to match ordinary conversation about logs, which can cause the skill to trigger unexpectedly. In context, unexpected activation matters because the skill is designed to read and analyze local log files, so an accidental invocation could expose sensitive local data or initiate actions the user did not intend.

Description-Behavior Mismatch

Medium
Confidence
97% confidence
Finding
The manifest and in-code feature descriptions claim capabilities such as '索引效率', '查询性能', and 'storage_optimization', but the implementation for that mode only calls analyze_log_stats() and detect_errors(). No code measures indexing behavior, query performance, or storage optimization, so the declared behavior materially exceeds what the code actually does.

Intent-Code Divergence

Medium
Confidence
91% confidence
Finding
The parser logic is flawed in ways that can silently misclassify log content: some regex branches call match.group(1) even when the pattern has no capture group, and the code sets critical status based on the regex pattern string rather than the matched log content. In a security-monitoring tool, this can produce false negatives, false positives, or runtime failures, causing operators to miss real incidents or trust incorrect severity assessments.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
This Python file contains many user-facing UI strings in Chinese, including headings, controls, warnings, and status messages, which effectively forces a specific language for interaction. The policy allows locale constraints only when clearly justified or when users are offered a language choice, neither of which is present in the interface flow.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
The skill name and description are presented in Chinese, and the document content is effectively Chinese-only, with no indication that users may choose another language. This can violate language or locale policy when a skill imposes a specific language without user opt-in or documented regional justification.

Natural-Language Policy Violations

Low
Confidence
93% confidence
Finding
The script's comments and all user-facing status messages are in Chinese, with no option to select another language or locale. This can violate a language/locale policy when skills are expected to respect user preference or provide opt-in for a fixed language.

Static analysis

No suspicious patterns detected.