T09 · Insecure Skill Coding Practices
- Location
jira/README.md:18- Finding
Jira Bearer Token Is Transmitted over Plaintext HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Jira helper is broadly purpose-aligned, but it handles Jira tokens and attachments in ways that could leak credentials or overwrite local files.
Install only after reviewing the Jira host and token handling. Use HTTPS, prefer a narrowly scoped read-only Jira token, avoid downloading attachments from untrusted issues, and verify download/report paths before allowing writes or cleanup.
jira/README.md:18Jira Bearer Token Is Transmitted over Plaintext HTTP
jira/jira_client.py:148Bearer Token Can Be Forwarded to an Unrestricted Attachment URL
jira/jira_client.py:148Untrusted Attachment Filename Permits Writes Outside the Download Directory
jira/unzip_attachment.py:14Unbounded ZIP Extraction Enables Resource-Exhaustion Attacks
jira/requirements.txt:1Open-Ended Dependency Versions Make Installation Non-Reproducible
The code chunk is specifically a low-level Jira client, not the described analysis orchestrator. It does align partially with the description in that it can retrieve issue details and download attachments, but the declared primary purpose includes coordinating analysis, delegating log analysis to a subagent, and producing a final Markdown report to a local directory—none of which appear in this code. Additionally, the code includes undeclared capabilities such as testing Jira connectivity and searching issues by JQL/assignee. These are not harmful by themselves, but they are materially different from the declared role of an orchestrator. Therefore this chunk does not accurately represent the declared description.
描述将该技能定位为“问题分析编排器”,核心输出应是分析文档/Markdown 报告,并包含附件获取后进一步委托日志分析的流程。但代码仅实现了 Jira 数据获取与展示/下载:get 获取单个 issue 并打印详情或 JSON,download 下载附件,list 按 assignee 列出问题,--test 测试连接。代码中没有任何 Markdown 文件写入逻辑、没有本地报告生成、没有 subagent/日志分析调用或编排流程。因此其主要用途与声明存在实质性偏差。
The declared description presents a higher-level Jira analysis workflow: obtaining issue data and attachments, orchestrating analysis, and producing a Markdown report. The supplied code does none of those tasks. It only unzips a hardcoded local attachment file into a local folder and lists extracted files. While attachment extraction could be a supporting step in a larger Jira workflow, this code chunk by itself lacks the core declared behaviors and instead has a materially narrower and different primary function.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
cd ~/.cursor/skills/jira-issue-analyzer/jira python3 -m venv .venv .venv/bin/python -m pip install -r requirements.txt cp .env.example .env
编辑 `.env`:
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
The file presents all user-facing documentation in Chinese, including headings and package descriptions, with no indication that other languages are supported or that Chinese is required for a region-specific purpose. Under the policy, a skill that effectively mandates a specific language without opt-in is a natural-language policy concern.
The skill instructs use of networked Jira access and environment-based secrets (JIRA_TOKEN) but does not declare any explicit tool scope or allowed-tools boundaries. This weakens least-privilege controls and makes it easier for an agent to use broader-than-necessary capabilities when handling potentially sensitive Jira data.
The natural-language content of the skill, including its description and operational steps, is presented in Chinese only. There is no indication that the user can choose another language or that the locale restriction is required for a region-specific purpose.
The skill instructs deletion of a temporary attachment directory after report generation without an explicit safety warning or confirmation step. File deletion is destructive, and if the path is wrong, templated incorrectly, or manipulated, data loss could occur outside the intended temporary area.
The skill description and instructions are entirely in Chinese and present the role as a Chinese-language Jira log analyst, but nowhere offers the user a language choice or states that the skill is intentionally limited to a Chinese-speaking context. Under the policy, forcing a specific language without opt-in is a natural-language policy violation.
The README content is written entirely in Chinese, including usage instructions, with no indication that other languages are supported or that the Chinese-only requirement is intentional and justified. Per the policy, forcing a specific language without user opt-in or documented justification is a natural-language policy concern.
The client returns assignee email addresses in issue listings even though the stated skill purpose is Jira issue analysis/report generation, not contact harvesting or identity enrichment. Exposing unnecessary personal data increases privacy risk, broadens downstream data propagation into reports/logs, and can leak employee contact information to components that do not need it.
Detailed issue retrieval includes both assignee and reporter email addresses, which are not necessary for analyzing issue content, attachments, or comments. In this skill context, those fields are likely to be copied into generated Markdown or passed to subagents, unnecessarily spreading personal data and increasing privacy/compliance exposure.
Attachment downloads write untrusted Jira-provided filenames directly to disk without user confirmation or filename sanitization. A malicious attachment name could perform path traversal and overwrite files outside the intended directory, and the silent write behavior makes this more dangerous in an agent workflow that automatically fetches external content.
The user-facing output strings in the detailed issue view are written in Chinese, including section headers and field labels, with no visible option for users to select another language. This creates a language/locale policy concern because the skill effectively forces a specific language without documented opt-in or justification.
The manifest describes a skill focused on orchestrating Jira issue analysis, fetching issues and attachments, delegating log analysis to a subagent, and outputting a final Markdown report to a local directory. This file instead exposes CLI commands for fetching a single issue, downloading attachments, listing issues by assignee, and testing connectivity, with output limited to stdout JSON/detail/table views and attachment downloads; there is no orchestration, subagent delegation, or Markdown report generation.
The list command allows enumeration of issues for an arbitrary assignee, which expands access beyond the stated purpose of analyzing a user-requested Jira issue. In an agent context, this broadens data exposure and could be abused to collect metadata, comments, and issue contents for many tickets unrelated to the user's task.
The skill directs the agent to write a Markdown report into a local project directory without explicit user notice about persistent local writes. This can surprise users, expose sensitive Jira-derived information in the workspace, and create unintended retention of potentially confidential issue data.
The skill explicitly requires writing a Markdown report into a local project directory, but it does not require user confirmation or present any warning that it will modify the filesystem. In an agent setting, silent local writes can violate user expectations, overwrite existing artifacts, or be chained with broader orchestration to create unintended persistence in the workspace.
This markdown file states that the skill can query Jira issues and download attachments, which may involve retrieving potentially sensitive issue data and writing files locally. The description provides usage examples but does not include any warning about handling confidential attachment contents or where files will be stored.
The module docstring says 'Main entry point for Jira issue fetcher' and the CLI parser description is 'Jira issue fetcher', framing the tool as a retrieval utility. That documented intent conflicts with the manifest's claim that the skill is an analysis orchestrator that delegates log analysis and produces a final Markdown report.
The dependency is specified with a lower bound only, which allows installation of many different versions over time and makes builds non-reproducible. In a security-sensitive skill that fetches Jira issues and attachments over the network, this increases supply-chain risk because a vulnerable or unexpected requests release could be resolved without review.
requests>=2.28.0
python-dotenv>=1.0.0
The manifest does not pin requests, and requests has multiple known advisories across versions, so it is impossible to verify from this file whether deployment will install a safe release. Given this skill likely makes outbound HTTP requests to Jira and may handle credentials, unresolved requests version risk is more relevant than in an offline-only utility.
No suspicious patterns detected.