Security Audit
dkyazzentwatwa/chatgpt-skills:expense-report-generator
github.com/dkyazzentwatwa/chatgpt-skillsTrust Assessment
dkyazzentwatwa/chatgpt-skills:expense-report-generator received a trust score of 51/100, placing it in the Caution category. This skill has some security considerations that users should review before deployment.
SkillShield's automated analysis identified 6 findings: 0 critical, 2 high, 3 medium, and 0 low severity. Key findings include Unpinned Python dependency version, Arbitrary file read via input parameters, Arbitrary file write via output parameter.
The analysis covered 4 layers: Manifest Analysis, Static Code Analysis, Dependency Graph, LLM Behavioral Safety. All layers scored 70 or above, reflecting consistent security practices.
Last analyzed on February 24, 2026 (commit d4bad335). SkillShield performs automated 4-layer security analysis on AI skills and MCP servers.
Layer Breakdown
Behavioral Risk Signals
Security Findings6
| Severity | Finding | Layer | Location | |
|---|---|---|---|---|
| HIGH | Arbitrary file read via input parameters The skill allows reading arbitrary files from the filesystem through user-controlled `filepath` arguments for loading expense data (CSV/JSON) and policy data (JSON). An attacker could specify paths to sensitive system files (e.g., `/etc/passwd`, `~/.ssh/id_rsa`) as input, causing the skill to read their contents into memory. Additionally, the `receipt` field within expense data, if user-controlled, can lead to attempts to load arbitrary files as images during PDF/HTML generation, confirming the ability to read arbitrary files. Implement strict input validation for file paths. Restrict file access to a designated, sandboxed directory. Avoid directly using user-provided paths for file operations. Consider using a file picker interface or requiring files to be uploaded to a secure storage location rather than directly referencing local paths. For receipts, validate file types and potentially sanitize paths. | LLM | scripts/expense_report.py:96 | |
| HIGH | Arbitrary file write via output parameter The skill allows writing generated reports (PDF, HTML, CSV, JSON) to arbitrary locations on the filesystem specified by the user-controlled `output` argument. An attacker could specify paths to sensitive system files (e.g., `/etc/hosts`, `/etc/crontab`) or user configuration files, potentially overwriting them with report data or creating new files in sensitive directories, leading to denial of service or privilege escalation if the process has sufficient permissions. Implement strict output path validation. Restrict output file creation to a designated, sandboxed directory (e.g., a temporary directory or a user-specific output folder). Prevent writing to absolute paths or paths outside the designated output directory. | LLM | scripts/expense_report.py:180 | |
| MEDIUM | Unpinned Python dependency version Requirement 'pandas>=2.0.0' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | expense-report-generator/scripts/requirements.txt:1 | |
| MEDIUM | Unpinned Python dependency version Requirement 'reportlab>=4.0.0' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | expense-report-generator/scripts/requirements.txt:2 | |
| MEDIUM | Unpinned Python dependency version Requirement 'matplotlib>=3.7.0' is not pinned to an exact version. Pin Python dependencies with '==<exact version>'. | Dependencies | expense-report-generator/scripts/requirements.txt:3 | |
| INFO | Unpinned dependencies in requirements.txt The `requirements.txt` file specifies dependencies using `>=` (e.g., `pandas>=2.0.0`), which allows for automatic updates to newer minor or patch versions. While this can provide bug fixes, it also introduces a risk of unexpected changes, new vulnerabilities, or breaking compatibility if a new version introduces regressions. For production environments, pinning exact versions (`==`) is generally recommended for reproducibility and stability. Pin dependencies to exact versions (e.g., `pandas==2.2.0`) to ensure reproducible builds and prevent unexpected changes from upstream updates. Regularly review and update dependencies to incorporate security patches. | LLM | scripts/requirements.txt:1 |
Scan History
Embed Code
[](https://skillshield.io/report/3c0456da10babc12)
Powered by SkillShield