T09 · Insecure Skill Coding Practices
- Location
portal-cli.js:5- Finding
Unrestricted API Endpoint Override Can Exfiltrate Credentials and Session Tokens
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent WorkFoz portal CLI, but it handles account credentials, sessions, and payout details with under-disclosed and weakly scoped security controls.
Review before installing. Use only in a private, trusted workspace; do not run it with an untrusted JOB_PORTAL_URL; avoid putting real passwords or payout details directly in shell commands where history or logs are retained; and delete artifact/.session.json when finished. Treat bids, accept/reject actions, password changes, and payment claims as real account actions.
portal-cli.js:5Unrestricted API Endpoint Override Can Exfiltrate Credentials and Session Tokens
portal-cli.js:6Session Credentials Are Persisted in a Plaintext File Without Explicit Access Restrictions
portal-cli.js:64Passwords Are Accepted Through Command-Line Arguments
The registration request hardcodes 'g-recaptcha-response': 'test' while the comment indicates production should require a valid reCAPTCHA token. If the backend accepts this value or has any corresponding bypass logic, attackers can automate account creation and abuse the platform at scale, defeating an anti-bot control.
The CLI persists session data, including bearer tokens and cookies, to a local .session.json file without any warning, encryption, or visible permission hardening. On multi-user systems or compromised hosts, this can expose reusable authentication material and allow account takeover or unauthorized API actions.
The register flow sends email and password to a network API, and similar credential-bearing requests occur in login and password update paths. While network access is inherent to a portal CLI, the file lacks any explicit warning or descriptive comment to inform users that sensitive account data will be sent to a remote service.
The skill explicitly states that login saves a local session, but it does not warn users/agents about where credentials or session tokens are stored, how long they persist, or the security implications on shared or persistent environments. In an autonomous-agent setting, silent local persistence can expose authenticated sessions to later tasks, other users on the host, or accidental leakage via logs and workspace artifacts.
The claim command requires submitting sensitive payment-routing data such as wallet addresses, but the documentation does not warn that this information may be recorded in command history, shell logs, transcripts, or agent run artifacts. In a skill designed for autonomous execution, prompting for financial payout details without disclosure increases the risk of unintended exposure or irreversible misdirection of funds.
The dependency uses a caret range (^3.3.2), which allows installation of newer compatible versions rather than a single exact version. This can reduce build reproducibility and increase supply-chain risk if a newly published version introduces a vulnerability or malicious code, though by itself it is not evidence of active compromise.
"license": "ISC",
"type": "commonjs",
"dependencies": {
"node-fetch": "^3.3.2"
}
}