T08 · Insecure Dependencies
- Location
SKILL.md:17- Finding
Unpinned Global Installation of an External CLI Dependency
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is purpose-built for TronClass LMS automation, but it asks an agent to handle real account sessions, passwords, downloads, and homework submissions with overly broad activation and weak install/credential safeguards.
Review this carefully before installing. Use it only for TronClass/FJU accounts you intend the agent to access, avoid giving passwords in chat or command-line arguments, prefer interactive login where possible, verify course IDs and file paths before downloads or submissions, and pin or independently review the tronclass-cli package version before installation.
SKILL.md:17Unpinned Global Installation of an External CLI Dependency
references/auth.md:25LMS Password Exposed Through Command-Line Arguments
```
```
`references/auth.md:57-72`:
```markdown
## Captcha
```bash
tronclass auth captcha --password
```
Completes a pending FJU login that was paused on a CAPTCHA challenge.
- `` — the captcha ID printed by `auth login --fju --non-interactive`.
- `` — the characters read from the saved CAPTCHA image.
- `--password
` — the user's password (not stored from step 1).
On success, the pending-state file and CAPTCHA image are removed and the session is saved as usual. On failure (wrong code, expired state, network error), the pending state is also cleared (the CAS `execution` token is single-use) — the caller must re-run `auth login --fju --non-interactive` to start over.
```bash
tronclass auth captcha --password 'my_password' abc123def456 3xyz
```
```
### Technical Analysis
The documented non-interactive authentication flows place the user's LMS password directly in
...[truncated 2358 chars]
The skill description instructs activation for broadly defined 'school' or 'assignment' requests even when the user does not explicitly mention TronClass. That can cause the agent to invoke this skill for unrelated education contexts and potentially access, reveal, download, or modify a user's live LMS data without sufficiently clear intent tied to TronClass.
The README explicitly encourages workflows that upload local files and perform remote actions in a live LMS account, but it does not warn that these operations can modify course state, submit the wrong file, or disclose local documents if the agent misinterprets a prompt. In an agent-driven context, this omission is security-relevant because users may not realize that natural-language requests can trigger real submissions or downloads against sensitive academic data.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- **Authentication**: Most commands require a saved session. If a command fails, tell the user to run `tronclass auth login <username>`. The session is reused automatically; `tronclass auth check` probes a live TronClass endpoint to confirm whether it's still valid.
- **FJU users**: Use `tronclass auth login --fju <student_id>` for the CAS flow with CAPTCHA support.
- **Non-interactive login (agents/scripts)**: Pass `--password <p>` (and `--base-url <u>` for generic deployments) to skip prompts. For FJU, where a human must solve the CAPTCHA, use the two-step deferred flow: `tronclass auth login --fju --non-interactive <user>` prints a captcha ID and opens the captcha image; then `tronclass auth captcha --password <p> <captcha_id> <code>` completes the login. The password is never written to disk — it is supplied only at resume time.
- **Finding IDs**: The typical lookup chain is `courses list` → `activities list <course_id>` → `activities view <activity_id>`. The `todo` command shows activity IDs directly in the first column.
- **Aliases**: `activities` → `a`, `courses` → `c`, `homework` → `hw`/`h`, `todo` → `td`/`t`, `announcements` → `ann`. Subcommands also have short aliases (`list`→`l`/`ls`, `view`→`v`, `download`→`d`/`dl`, `submit`→`s`).
The workflow demonstrates final homework submission as a routine command sequence without a prominent warning that it changes the user's official LMS record. In an agent setting, this increases the risk of unintended real-world actions such as accidental submission of the wrong file or premature finalization.
The documentation explicitly demonstrates supplying passwords as command-line arguments, which commonly exposes secrets via shell history, process listings, audit logs, or orchestration metadata. In an agent-oriented skill, this is more dangerous because automated systems may routinely construct and log full commands, causing credential leakage beyond the local terminal session.
The status field is documented as using Chinese labels only, which may impose a specific language/locale without user opt-in. The file does not mention that this is locale-specific, configurable, or intentionally limited to a particular audience.
This markdown file documents a command that saves downloaded content to a local path, which can affect user data and filesystem state. While it explains where files are saved, it does not include a user-facing warning about the write operation or advise caution when specifying output paths.
SQP-3 applies to natural-language policy issues across all file types, including locale constraints. The sentence fixes date formatting to Taiwan locale and does not mention configurability, user preference, or a documented region-specific justification, which can violate language/locale choice policy.
This markdown file documents that ann download saves a file to ~/Downloads/<filename> when no output path is provided, which is a user-data-affecting file write. Although the behavior is described, there is no explicit warning or cautionary note about writing to disk or overwriting/where files will be stored, which is the kind of disclosure SQP-2 asks for in markdown skill descriptions.
The file documents local storage of cookies, config, student/account metadata, and pending authentication state without clearly warning that these artifacts are sensitive and should be protected. Although some permissions are mentioned for pending CAPTCHA state, the broader session storage description may lead users or agent implementers to back up, share, or expose ~/.tronclass-cli/ contents, enabling session hijacking or privacy leakage.
The file hardcodes user-facing status labels such as 已繳交, 草稿, 待繳交, and 未繳 without indicating that the skill is intentionally Chinese-only or giving users a language option. This can violate language/locale policy when a specific language is imposed without opt-in or justification.
The documentation states that rendered homework status is shown using Chinese labels only. Because no language choice or locale justification is provided in the file, this is a natural-language locale policy concern.
The --raw option is documented as printing raw JSON from underlying endpoints, including a resolved user_id and submission-related data. This exposes potentially sensitive account and coursework information, but the reference text does not warn users about privacy implications or advise caution when sharing terminal output.
No suspicious patterns detected.