T09 · Insecure Skill Coding Practices
- Location
SKILL.md:67- Finding
Shell Command Injection Through Untrusted Image Arguments
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This appears to be a genuine Quark OCR skill, but it needs Review because crafted image inputs could be run unsafely as shell commands and sensitive uploads are not tightly scoped.
Install only if you are comfortable sending submitted images, including sensitive documents, to Quark's remote OCR service using your configured API key. Before routine use, the maintainer should change the run instructions to invoke Python with a non-shell argument array and disable or constrain redirects for OCR POST requests. Avoid processing untrusted image URLs, paths, or base64 strings with the current command template.
SKILL.md:67Shell Command Injection Through Untrusted Image Arguments
scripts/common/ocr_client.py:158Sensitive API Key and Image Data May Be Replayed Across Redirects
The skill is presented as an OCR service, but the analyzed behavior indicates additional local file write and path-handling capabilities that are not clearly disclosed in the description. Hidden or under-documented file persistence is risky because users may submit highly sensitive documents like IDs, licenses, invoices, and medical reports, assuming only transient OCR processing rather than local storage.
The skill is presented as an OCR service, but the analyzed behavior indicates additional local file write and path-handling capabilities that are not clearly disclosed in the description. Hidden or under-documented file persistence is risky because users may submit highly sensitive documents like IDs, licenses, invoices, and medical reports, assuming only transient OCR processing rather than local storage.
Referenced artifact was not completely inspected
- `SKILL.md` — 本文档(意图分析 + 通用规范)
The skill declares use of environment variables and a third-party network service, but does not define an explicit tool/permission scope such as allowed tools or permissions. This weakens least-privilege controls and makes it harder for a runtime or reviewer to constrain network access and sensitive env exposure, especially since the skill processes potentially sensitive identity and medical images.
The file forces a specific language/locale for all user-facing instructions and examples, and does not indicate that users may choose another language. Under the policy, fixed language behavior without user opt-in is a natural-language policy violation unless clearly justified as region-specific.
This code reads a local file, base64-encodes its full contents, and submits that data to a remote OCR service. In an OCR skill this is expected functionality, but it still creates a real data-exfiltration risk if users are not clearly informed that local documents, IDs, invoices, or medical records will leave the local environment and be sent to a third-party service.
The HTTP client sends OCR payloads and the API key to an external endpoint, which means user-provided image data and secrets are transmitted off-host. Even though this is core to the service design, the risk is real because the module itself provides no visible notice, consent flow, or safeguards around sensitive content being sent to a third party.
The runner accepts user-supplied image URLs, local file paths, or base64 data and sends them to QuarkOCRClient.recognize(), which likely transmits the content to a remote OCR service. Because this file provides no explicit user-facing warning, consent check, or data-sensitivity guard, users may unintentionally upload sensitive documents such as IDs, invoices, or medical records described in the skill metadata.
This Python file contains human-readable docstrings, comments, and an error message exclusively in Chinese. Under the language/locale policy, forcing a specific language without documented user choice or clear region-specific justification can be a policy concern.
This Python file contains natural-language documentation entirely in Chinese, including the module description and later user-facing success/error messages, with no indication that Chinese is optional or required for a specific regional context. Under the policy, forcing a specific language without user opt-in is a locale/language policy concern.
The module description is written entirely in Chinese, and the surrounding user-facing strings in comments/docstrings are also Chinese-only. Under the stated policy, language-specific behavior or presentation should not be forced without opt-in or clear justification.
This code file contains natural-language documentation exclusively in Chinese, including the module and function docstrings. Under the stated policy, forcing a specific language without user opt-in or documented justification is a locale/language policy issue.
The module docstring and inline help text are presented in Chinese only, which can constitute a language policy violation when no opt-in, localization choice, or scope justification is provided. There is no indication that this skill is intentionally limited to a Chinese-speaking or region-specific context.
This Python file contains natural-language documentation and comments only in Chinese, including the module docstring and descriptive comments. Under the stated policy, forcing a specific language without offering a user choice or documenting a justified locale constraint is a natural-language policy concern.
This code file contains user- and developer-facing natural-language strings and docstrings in Chinese, including the module and validator descriptions. Under the language/locale policy rule, forcing a specific language without opt-in can be a policy concern when no alternative or language choice is offered.
The natural-language description is entirely in Chinese ('夸克扫描王 OCR 识别服务') with no indication that users can choose another language or locale. The policy calls for flagging language or locale constraints when they are imposed without opt-in or justification.
No suspicious patterns detected.