T09 · Insecure Skill Coding Practices
- Location
SKILL.md:78- Finding
Plaintext PostgreSQL Administrator Credentials Exposed in Skill Documentation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a form builder, but it publishes PostgreSQL credentials and describes writing new records to a RoadFlow database without clear safeguards.
Review carefully before installing. Do not use this package with the published database credentials; treat that password as compromised and rotate it. Use only dedicated least-privilege credentials from a secret manager or environment variables, and require a dry-run plus explicit confirmation before any rf_form database writes.
SKILL.md:78Plaintext PostgreSQL Administrator Credentials Exposed in Skill Documentation
scripts/html_form_generator.js:55HTML Injection and Cross-Site Scripting in Generated Forms
The skill embeds live PostgreSQL connection details, including host, port, username, and password, directly in documentation. Hardcoded credentials expose unauthorized access to the roadflow database and can enable data theft, tampering, or destructive writes, especially because the skill explicitly supports reading and saving forms to persistent storage.
Publishing database credentials and internal connection details without any security boundary or warning materially increases the likelihood of compromise. Because the same section identifies the specific target database and the skill’s ability to modify rf_form records, an attacker or misused agent has everything needed to connect and alter sensitive application data.
The skill describes a workflow that queries existing database records, copies form definitions, modifies them, and saves new records without any approval, confirmation, or warning about persistent side effects. In an agent setting, this can lead to unauthorized or accidental writes to production data, cloning of sensitive form contents, and integrity issues in the rf_form table.
The markdown states that filled form data may be stored in sessionStorage/localStorage, which can retain user-entered information on the client device. There is no warning about privacy implications, sensitive data handling, or advising when not to use browser storage.
The help text states --framework Bootstrap|Tailwind, implying users can choose between two output frameworks. However, all generation paths call generateBootstrapForm and there is no Tailwind-specific renderer or framework selection logic anywhere in the file, so the documentation materially overstates the implemented behavior.
The file’s descriptive text and generated validation messages are written in Chinese, and the phone validation is also tailored to a China-specific locale. Because the skill does not offer any user opt-in or language/locale selection, it enforces a specific language/locale by default, which matches the natural-language policy violation criteria.
The manifest includes author-identifying text entirely in Chinese characters, which is a natural-language locale signal in a user-facing metadata field. Because there is no indication elsewhere in the file that language choice is optional or user-selectable, this can conflict with the policy against forcing a specific language or locale without opt-in.
The generated document always uses <html lang="en"> even though the tool’s surrounding help text and comments are in Chinese and there is no option for users to choose or override the locale. This is a natural-language locale policy issue because it forces a specific language setting without opt-in or documented justification.