T09 · Insecure Skill Coding Practices
- Location
scripts/send_ntfy.sh:4- Finding
Predictable Shared Default Topic May Expose Notifications
- Content
View full analysis
Vulnerability Details
File Location:
scripts/send_ntfy.sh:4, 61-63
Vulnerability Type: Predictable public notification topic
Risk Level: MediumVulnerable Code
bash TOPIC="CaptainDragonflyBot-TopicTest001"bash CMD+=("https://ntfy.sh/$TOPIC") "${CMD[@]}" echoThe same default topic is disclosed in
SKILL.md:17-20:markdown ## Default topic - `CaptainDragonflyBot-TopicTest001`Technical Analysis
The script sends notification bodies and metadata to the public
ntfy.shservice. If the caller does not supply--topic, it uses a fixed, predictable topic whose value is published in the project documentation.A topic name may function as the practical access boundary for an unauthenticated ntfy channel. Because this default is neither secret nor high entropy, unauthorized parties can discover it and attempt to subscribe or publish to the same channel. The script does not require authentication, require an explicit topic, or warn callers that notification data is transmitted to a third-party service.
This is not shell command injection: the script constructs
curlarguments with a Bash array and does not evaluate user input as shell code.Attack Path
- An attacker obtains the default topic from
SKILL.md, the script source, or another public copy of the package. - The attacker subscribes to
CaptainDragonflyBot-TopicTest001through the public ntfy service. - A user invokes
send_ntfy.shwithout specifying--topic. - The script sends the notification to the documented default topic.
- If the public service permits unauthenticated access to that topic, the attacker receives the notification and its associated metadata.
- The attacker may also attempt to publish deceptive notifications to the same topic, potentially misleading legitimate subscribers.
Impact Assessment
Exploitation does not grant local code execution, operating-syst ...[truncated 673 chars]
- An attacker obtains the default topic from
- Remediation
View remediation
Remediation Suggestions
- Remove the built-in public topic and require callers to provide
--topicexplicitly. - Validate that the topic is nonempty and reject execution when it is omitted.
- Recommend a cryptographically random, high-entropy topic rather than a human-readable shared identifier.
- Prefer an authenticated private ntfy deployment or authenticated access controls for sensitive notifications.
- Clearly document that message bodies and metadata are transmitted to an external service.
- Warn users not to send credentials, access tokens, personal data, or other secrets through public topics.
- Consider allowing the server URL and authentication credentials to be supplied securely through protected configuration, while ensuring credentials are not exposed in logs or command output.
- Rotate and discontinue the documented default topic because its value should be considered publicly known.
- Remove the built-in public topic and require callers to provide
