T09 · Insecure Skill Coding Practices
- Location
run.sh:14- Finding
Authentication credentials and printer-control traffic use unencrypted HTTP by default
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This PrusaLink printer-control skill is purpose-aligned, but it should be reviewed because it can control a physical printer and sends credentials/control traffic over HTTP by default.
Install only if you intend to let an agent control your PrusaLink printer. Prefer HTTPS, avoid API keys over HTTP, use a limited printer account if available, review any upload/start/cancel action before running it, and do not pass untrusted filenames or job IDs into the wrapper.
run.sh:14Authentication credentials and printer-control traffic use unencrypted HTTP by default
run.sh:113Unvalidated URL path components can alter intended PrusaLink endpoints
run.sh:151User-controlled filenames are emitted as unescaped JSON
The skill exposes shell execution capability via a local run.sh wrapper but does not declare any tool scope such as permissions or allowed-tools. That mismatch weakens policy enforcement and reviewability, because an agent may invoke shell-backed behavior without explicit declaration, increasing the chance of unintended command execution or misuse of environment-provided secrets during operation.
The exposed command set includes state-changing operations like cancelling jobs, uploading files, and starting prints, but the described capability is framed mainly as a local status/upload/print wrapper and may not sufficiently emphasize destructive or safety-relevant actions. Understating actuator-like control can cause users or orchestrators to grant the skill broader trust than warranted, increasing the chance of unintended printer operation or job interruption.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
if [[ $OVERWRITE -eq 1 ]]; then headers+=(-H "Overwrite: ?1"); fi
if [[ $PAAU -eq 1 ]]; then headers+=(-H "Print-After-Upload: ?1"); fi
curl -sS --fail-with-body --max-time "$TIMEOUT" \
"${curl_auth_args[@]}" "${curl_header_args[@]}" \
"${headers[@]}" \
-X PUT --data-binary "@$FILE" \