Trust Assessment
audit-case-rag received a trust score of 10/100, placing it in the Untrusted category. This skill has significant security findings that require attention before use in production.
SkillShield's automated analysis identified 12 findings: 3 critical, 1 high, 8 medium, and 0 low severity. Key findings include Arbitrary command execution, Dangerous call: subprocess.run(), Unpinned Python dependency version.
The analysis covered 4 layers: Manifest Analysis, Static Code Analysis, Dependency Graph, LLM Behavioral Safety. The LLM Behavioral Safety layer scored lowest at 40/100, indicating areas for improvement.
Last analyzed on February 14, 2026 (commit 13146e6a). SkillShield performs automated 4-layer security analysis on AI skills and MCP servers.
Layer Breakdown
Behavioral Risk Signals
Security Findings12
| Severity | Finding | Layer | Location | |
|---|---|---|---|---|
| CRITICAL | Arbitrary command execution Python shell execution (os.system, subprocess) Review all shell execution calls. Ensure commands are static (not built from user input), use absolute paths, and are strictly necessary. Prefer library APIs over shell commands. | Manifest | skills/jack4world/audit-case-rag/scripts/audit_case_rag.py:120 | |
| CRITICAL | Arbitrary command execution via user-provided soffice path The `convert_to_pdf` function executes an external `soffice` command using `subprocess.run`. The path to the `soffice` executable is taken directly from user input (`--soffice` argument) after `os.path.expandvars` and `os.path.expanduser` expansion. An attacker can specify a path to an arbitrary executable or a malicious script, leading to arbitrary command execution on the host system. Validate the `soffice` path to ensure it points to a known, trusted LibreOffice executable. Consider using a whitelist of allowed paths or verifying the executable's signature if possible. Avoid allowing arbitrary executable paths from user input. | LLM | scripts/audit_case_rag.py:121 | |
| CRITICAL | Arbitrary code execution via untrusted joblib index deserialization The `cmd_query` function loads a `joblib` index file using `joblib.load`. The path to this index file (`--index-path` argument) is directly controlled by the user. `joblib.load` (which uses `pickle` internally) is known to be unsafe when deserializing data from untrusted sources, as a malicious `.joblib` file can contain arbitrary Python code that will be executed upon loading. An attacker could craft a malicious index file and provide its path, leading to arbitrary code execution. Do not load `joblib` files from untrusted sources. If the index file must be user-specified, implement strict validation or consider alternative, safer serialization formats. If the skill is designed to only load indices it *itself* created, ensure that the creation process is secure and that the index files are stored in a protected location. | LLM | scripts/audit_case_rag.py:230 | |
| HIGH | Dangerous call: subprocess.run() Call to 'subprocess.run()' detected in function 'convert_to_pdf'. This can execute arbitrary code. Avoid using dangerous functions like exec/eval/os.system. Use safer alternatives. | Static | skills/jack4world/audit-case-rag/scripts/audit_case_rag.py:120 | |
| MEDIUM | Unpinned Python dependency version Requirement 'fastembed>=0.3.0' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | skills/jack4world/audit-case-rag/scripts/requirements.txt:2 | |
| MEDIUM | Unpinned Python dependency version Requirement 'scikit-learn>=1.5.0' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | skills/jack4world/audit-case-rag/scripts/requirements.txt:3 | |
| MEDIUM | Unpinned Python dependency version Requirement 'pypdf>=4.2.0' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | skills/jack4world/audit-case-rag/scripts/requirements.txt:4 | |
| MEDIUM | Unpinned Python dependency version Requirement 'pandas>=2.2.0' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | skills/jack4world/audit-case-rag/scripts/requirements.txt:5 | |
| MEDIUM | Unpinned Python dependency version Requirement 'openpyxl>=3.1.2' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | skills/jack4world/audit-case-rag/scripts/requirements.txt:6 | |
| MEDIUM | Unpinned Python dependency version Requirement 'pyyaml>=6.0.1' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | skills/jack4world/audit-case-rag/scripts/requirements.txt:7 | |
| MEDIUM | Unpinned Python dependency version Requirement 'joblib>=1.3.0' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | skills/jack4world/audit-case-rag/scripts/requirements.txt:8 | |
| MEDIUM | Unpinned Python dependency version Requirement 'numpy>=1.26.0' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | skills/jack4world/audit-case-rag/scripts/requirements.txt:9 |
Scan History
Embed Code
[](https://skillshield.io/report/d3653e8561c7b80b)
Powered by SkillShield