T09 · Insecure Skill Coding Practices
- Location
scripts/elderly_care.py:172- Finding
Sensitive credentials exposed through command-line arguments
- Content
View full analysis
Vulnerability Details
File Locations:
scripts/elderly_care.py:172-178scripts/config_manager.py:141-146scripts/alarm_query.py:137-142scripts/stats_query.py:211-216- Supporting usage example:
SKILL.md:447-454
Vulnerability Type: Sensitive credential exposure through process arguments
Risk Level: HighVulnerable Code
scripts/elderly_care.py:172-178:python parser.add_argument("--sn", required=True, help="Device serial number") parser.add_argument("--user", required=True, help="User ID") parser.add_argument("--uuid", required=True, help="Open-platform user UUID") parser.add_argument("--appkey", required=True, help="Application appKey") parser.add_argument("--secret", required=True, help="Application secret") parser.add_argument("--auth", required=True, help="User token (Authorization)") parser.add_argument("--movecard", type=int, default=7, help="Move-card identifier used for signing")scripts/config_manager.py:141-146:python parser.add_argument("--sn", required=True, help="Device serial number") parser.add_argument("--user", required=True, help="User ID") parser.add_argument("--uuid", required=True, help="Open-platform user UUID") parser.add_argument("--appkey", required=True, help="Application appKey") parser.add_argument("--secret", required=True, help="Application secret") parser.add_argument("--auth", required=True, help="User token")scripts/alarm_query.py:137-142:python parser.add_argument("--sn", required=True, help="Device serial number") parser.add_argument("--user", required=True, help="User ID") parser.add_argument("--uuid", required=True, help="Open-platform user UUID") parser.add_argument("--appkey", required=True, help="Application appKey") parser.add_argument("--secret", required=True, help="Application secret") parser.add_argument("--auth", required=True, help="User token")`scripts/stats_query.py: ...[truncated 4135 chars]
- Remediation
View remediation
Remediation Suggestions
- Remove
--secretand--authfrom the normal command-line interface. - Read these values directly from protected environment variables such as
JF_APP_SECRETandJF_AUTHORIZATION, without expanding them into command arguments. - Prefer an operating-system credential store, secret manager, or configuration file with restrictive permissions when available.
- If interactive use is required, obtain secrets with
getpass.getpass()so they are neither echoed nor stored in the argument vector. - Keep non-sensitive parameters separate from credentials and ensure debug, verbose, error, and JSON-output paths never print authorization headers, secrets, or complete signed requests.
- Update
SKILL.mdso examples no longer pass credentials through command-line options. - Add centralized credential loading and validation shared by all scripts.
- Add and validate the missing
movecardconfiguration inconfig_manager.py,alarm_query.py, andstats_query.pythrough the protected configuration mechanism rather than another sensitive command argument. - Restrict credential scope and lifetime where supported, and rotate application secrets and authorization tokens that may previously have been exposed through process arguments or logs.
- Add automated tests that verify secrets do not appear in process arguments, normal output, verbose output, exception messages, or logs.
- Remove
