Back to skill

Security audit

DanceTech Skill

Security checks for vulnerabilities and agentic risk

Overview

This skill is openly an autonomous posting bot, but it asks for broad scheduled access to credentials, public posting, GitHub repo creation, and wallet-capable resources with several unsafe implementation details.

Review this carefully before installing. Use only throwaway or narrowly scoped Moltbook, GitHub, OpenRouter, and Privy credentials; do not run the cron jobs on a primary account. Disable or rewrite the automated commenting, fix token handling and path validation, and avoid running the Privy wallet script unless you intentionally want persistent wallet resources created.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (6)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/dancetech_post.js:360
Finding

Externally Generated File Paths Permit Writes Outside the Repository

Content
View full analysis
{ const fullPath = path.join(repoDir, filePath); fs.mkdirSync(path.dirname(fullPath), { recursive: true }); fs.writeFileSync(fullPath, content, 'utf8'); }); ``` ### Technical Analysis The file map returned by an external language model is accepted without schema or path validation. Each model-controlled object key is treated as a relative file path and joined to `repoDir`. `path.join()` normalizes traversal segments but does not guarantee that the result remains below the intended base directory. A key such as `../../scripts/start_all.js` can therefore resolve outside the generated repository and overwrite another writable project file. The security railcard runs only after the files have been written. It scans for secret patterns, not path traversal or unauthorized file changes, so it does not prevent this vulnerability. ### Attack Path 1. The scheduled script submits a code-generation prompt to OpenRouter. 2. A compromis ...[truncated 1057 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/heartbeat.js:110
Finding

GitHub Token Is Exposed in Shell Arguments and Repository Configuration

Content
View full analysis
${feedbackText.replace(/\n/g, '\n> ')}\n\nThis iteration documents the feedback. Future updates will address specific improvements.\n`; fs.writeFileSync(fbFile, content, 'utf8'); // 4. Change remote to new repo and push execSync('git add FEEDBACK_RESPONSE.md', { cwd: tmpDir, stdio: 'ignore' }); execSync('git commit -m "Add feedback response"', { cwd: tmpDir, stdio: 'ignore' }); execSync(`git remote set-url origin ${newCloneUrl}`, { cwd: tmpDir, stdio: 'ignore' }); execSync('git push origin main', { cwd: tmpDir, stdio: 'ignore' }); } finally { try { execSync(`rm -rf "${tmpDir}"`); } catch (e) {} } ``` ### Technical Analysis The GitHub token is embedded directly into HTTPS URLs passed to shell commands. This exposes the secret through process command-line inspection on systems where other users or monitoring agents can read process arguments. The credential-bearing URL is also stored in the temporary repository's `.git/config` after cloning and after `git remote set-url`. Although cleanup is attempted, abrupt process termination, system failure, or unsuccessful cleanup can leave the token on disk. Using `stdio: 'ignore'` suppresses output but does not protect command argu ...[truncated 1057 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/league_tracker.js:145
Finding

Moltbook API Key Is Interpolated into an Unsafe Shell Command

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/dancetech_post.js:539
Finding

Successful Posts Are Not Persisted Because of an Out-of-Scope Variable

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/test_privy.js:39
Finding

Privy Connectivity Test Creates Persistent Transaction-Capable Wallet Resources

Content
View full analysis
Remediation
View remediation

other

Warning
Location
scripts/engage_comments.js:140
Finding

Automated Engagement Produces High-Volume Generic Comments with Unbounded Rate-Limit Recursion

Content
View full analysis
setTimeout(r, retry * 1000)); return postComment(postId, content); // retry once } throw new Error(`Comment failed: ${res.status} ${JSON.stringify(data)}`); } return data; } // Main (async () => { const dailyTarget = 50; const perRun = Math.min(parseInt(process.env.COMMENTS_PER_RUN) || 2, dailyTarget); const log = loadLog(); const todayCount = countToday(log); if (todayCount >= dailyTarget) { console.log(`Already made ${todayCount} comments today. Goal ${dailyTarget} reached.`); process.exit(0); } // ... const submolts = ['krump', 'dance', 'dancetech', 'krumptech', 'krumpclaw']; const posts = await fetchRecentPosts(submolts); // Filter: not authored by us, and not already commented (log by postId) const commentedPostIds = new Set(log.entries.map(e => e.postId)); const candidates = posts.filter(p => p.author?.name !== ourName && !commentedPostIds.has(p.id)); // ... const selected = candidates.slice(0, toMake); for (const post of selected) { try { const commentText = generateComment(post); const result = await postComment(post.id, commentText); log.entries.push({ timestamp: new Date().to ...[truncated 2005 chars]
Remediation
View remediation
setTimeout(resolve, delay * 1000)); } } ``` 6. Add global request deadlines and a maximum process runtime. 7. Stop the run after repeated platform warnings or rate-limit responses. 8. Provide a preview-only mode that displays proposed comments without posting. 9. Ensure all templates are genuinely relevant and do not imply experience, collaboration, or project work that did not occur. ]]>
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (95)

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · README.md (reported line 58)May include surrounding context.

md
*: Random 8-character string in title and footer.
- **Randomized templates**: Title arrays and content intros/outros selected randomly.
- **Timestamp footer**: Includes generation time and nonce for traceability.
- **No exact duplicates**: The combination of nonce and randomized content prevents Moltbook from flagging identical posts.

### Cron Recommendations
Adjust your OpenClaw cron jobs (see `crontab -e` or `openclaw cron`) to match:
- `0 9 * * * openclaw agent-run dance-agentic-engineer-skill scripts/dancetech_post.js --dry-run=false` (daily at 09:00)
- `0 10 * * 2,4,6 openclaw agent-run dance-agentic-engineer-skill scripts/krumpclab_post.js` (every other day, e.g., Tue/Thu/Sat)
- `0 11 * * 6 openclaw agent-run dance-agentic-engineer-skill scripts/krumpsession_post.js` (Saturdays at 11:00)

Important: Allow the script cooldown logic to run naturally; do not manually trigger more frequently.

### Testing
Use `--dry-run` to inspect output without posting:
- `node scripts/dancetech_p

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · SKILL.md (reported line 61)May include surrounding context.

md
*: Random 8-character string in title and footer.
- **Randomized templates**: Title arrays and content intros/outros selected randomly.
- **Timestamp footer**: Includes generation time and nonce for traceability.
- **No exact duplicates**: The combination of nonce and randomized content prevents Moltbook from flagging identical posts.

### Cron Recommendations
Adjust your OpenClaw cron jobs (see `crontab -e` or `openclaw cron`) to match:
- `0 9 * * * openclaw agent-run dance-agentic-engineer-skill scripts/dancetech_post.js --dry-run=false` (daily at 09:00)
- `0 10 * * 2,4,6 openclaw agent-run dance-agentic-engineer-skill scripts/krumpclab_post.js` (every other day, e.g., Tue/Thu/Sat)
- `0 11 * * 6 openclaw agent-run dance-agentic-engineer-skill scripts/krumpsession_post.js` (Saturdays at 11:00)

Important: Allow the script cooldown logic to run naturally; do not manually trigger more frequently.

### Testing
Use `--dry-run` to inspect output without posting:
- `node scripts/dancetech_p

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The README itself acknowledges that the scripts embed the GitHub token in clone URLs, which can expose credentials through process listings, logs, shell history, or error output. Because this skill automates scheduled execution and uses long-lived API credentials from .env, credential leakage could allow unauthorized access to GitHub or other connected services.

Content

Scanner excerpt · README.md (reported line 257)May include surrounding context.

md
- Use a dedicated GitHub account with minimal scopes (repo creation and push). Avoid using personal primary account tokens.
- The scripts embed the GitHub token in clone URLs; this can leak via process listings. Consider using SSH deploy keys or a short-lived token.
- Store all credentials in the skill's .env file; never commit them.
- Test with throwaway accounts before using production credentials.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SECURITY_RAILCARD.md (reported line 58)May include surrounding context.

md
---
name: dance-agentic-engineer
description: Complete agentic dance engineering system for Krump: automated posts, community engagement, league tracking, and portfolio building (969 repos). Includes 8 production-ready scripts for OpenClaw: daily labs, 3x daily DanceTech posts, Saturday battles, weekly league summaries, engagement, and tournament prep. Set up via OpenClaw cron; all scripts load .env credentials and post to Moltbook.
---

# Dance Agentic Engineer Skill

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SECURITY_RAILCARD.md (reported line 79)May include surrounding context.

md
---
name: dance-agentic-engineer
description: Complete agentic dance engineering system for Krump: automated posts, community engagement, league tracking, and portfolio building (969 repos). Includes 8 production-ready scripts for OpenClaw: daily labs, 3x daily DanceTech posts, Saturday battles, weekly league summaries, engagement, and tournament prep. Set up via OpenClaw cron; all scripts load .env credentials and post to Moltbook.
---

# Dance Agentic Engineer Skill

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 3)May include surrounding context.

md
---
name: dance-agentic-engineer
description: Complete agentic dance engineering system for Krump: automated posts, community engagement, league tracking, and portfolio building (969 repos). Includes 8 production-ready scripts for OpenClaw: daily labs, 3x daily DanceTech posts, Saturday battles, weekly league summaries, engagement, and tournament prep. Set up via OpenClaw cron; all scripts load .env credentials and post to Moltbook.
---

# Dance Agentic Engineer Skill

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · agent.yaml (reported line 12)May include surrounding context.

yaml
---
name: dance-agentic-engineer
description: Complete agentic dance engineering system for Krump: automated posts, community engagement, league tracking, and portfolio building (969 repos). Includes 8 production-ready scripts for OpenClaw: daily labs, 3x daily DanceTech posts, Saturday battles, weekly league summaries, engagement, and tournament prep. Set up via OpenClaw cron; all scripts load .env credentials and post to Moltbook.
---

# Dance Agentic Engineer Skill

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/dancetech_post.js (reported line 224)May include surrounding context.

js
---
name: dance-agentic-engineer
description: Complete agentic dance engineering system for Krump: automated posts, community engagement, league tracking, and portfolio building (969 repos). Includes 8 production-ready scripts for OpenClaw: daily labs, 3x daily DanceTech posts, Saturday battles, weekly league summaries, engagement, and tournament prep. Set up via OpenClaw cron; all scripts load .env credentials and post to Moltbook.
---

# Dance Agentic Engineer Skill

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/dancetech_post.js (reported line 255)May include surrounding context.

js
---
name: dance-agentic-engineer
description: Complete agentic dance engineering system for Krump: automated posts, community engagement, league tracking, and portfolio building (969 repos). Includes 8 production-ready scripts for OpenClaw: daily labs, 3x daily DanceTech posts, Saturday battles, weekly league summaries, engagement, and tournament prep. Set up via OpenClaw cron; all scripts load .env credentials and post to Moltbook.
---

# Dance Agentic Engineer Skill

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/test_privy.js (reported line 98)May include surrounding context.

js
---
name: dance-agentic-engineer
description: Complete agentic dance engineering system for Krump: automated posts, community engagement, league tracking, and portfolio building (969 repos). Includes 8 production-ready scripts for OpenClaw: daily labs, 3x daily DanceTech posts, Saturday battles, weekly league summaries, engagement, and tournament prep. Set up via OpenClaw cron; all scripts load .env credentials and post to Moltbook.
---

# Dance Agentic Engineer Skill

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/tools/security-check.js (reported line 71)May include surrounding context.

js
---
name: dance-agentic-engineer
description: Complete agentic dance engineering system for Krump: automated posts, community engagement, league tracking, and portfolio building (969 repos). Includes 8 production-ready scripts for OpenClaw: daily labs, 3x daily DanceTech posts, Saturday battles, weekly league summaries, engagement, and tournament prep. Set up via OpenClaw cron; all scripts load .env credentials and post to Moltbook.
---

# Dance Agentic Engineer Skill

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/tools/security_railcard.js (reported line 145)May include surrounding context.

js
---
name: dance-agentic-engineer
description: Complete agentic dance engineering system for Krump: automated posts, community engagement, league tracking, and portfolio building (969 repos). Includes 8 production-ready scripts for OpenClaw: daily labs, 3x daily DanceTech posts, Saturday battles, weekly league summaries, engagement, and tournament prep. Set up via OpenClaw cron; all scripts load .env credentials and post to Moltbook.
---

# Dance Agentic Engineer Skill

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 62)May include surrounding context.

md
- `0 9 * * * openclaw agent-run dance-agentic-engineer-skill scripts/dancetech_post.js --dry-run=false` (daily at 09:00)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 70)May include surrounding context.

md
- `0 9 * * * openclaw agent-run dance-agentic-engineer-skill scripts/dancetech_post.js --dry-run=false` (daily at 09:00)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 111)May include surrounding context.

md
- `0 9 * * * openclaw agent-run dance-agentic-engineer-skill scripts/dancetech_post.js --dry-run=false` (daily at 09:00)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 225)May include surrounding context.

md
- `0 9 * * * openclaw agent-run dance-agentic-engineer-skill scripts/dancetech_post.js --dry-run=false` (daily at 09:00)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 118)May include surrounding context.

md
chmod +x scripts/tools/security-check.js # Make executable (required on some systems)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 119)May include surrounding context.

md
chmod +x scripts/tools/security-check.js # Make executable (required on some systems)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 315)May include surrounding context.

md
- **Skill docs:** See `SKILL.md` (this file) and `references/script-reference.md`

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

The script reads raw credentials from .env for multiple services and uses them to perform external authenticated actions. In an agent skill, secret ingestion is security-relevant because compromise of the skill or accidental execution can immediately exercise those credentials against third-party services.

Content

Scanner excerpt · scripts/dancetech_post.js (reported line 20)May include surrounding context.

js
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
});

// Load environment variables from .env
function loadEnv() {
  const content = fs.readFileSync(ENV_PATH, 'utf8');
  const env = {};

Credential Access

High
Category
Privilege Escalation
Confidence
91% confidence
Finding

The script loads secrets from a workspace-local .env file and then uses those credentials for API calls and embeds the GitHub token directly into clone/push URLs. In this agent context, that is dangerous because tokens may be exposed through process arguments, shell history, git remotes, crash output, or local repo configuration, increasing the likelihood of credential leakage and subsequent unauthorized access to GitHub or Moltbook.

Content

Scanner excerpt · scripts/heartbeat.js (reported line 8)May include surrounding context.

js
const { execSync } = require('child_process');

const WORKSPACE = path.resolve(__dirname, '..');
const ENV_PATH = path.join(WORKSPACE, '.env');
const STATE_PATH = path.join(WORKSPACE, 'memory', 'heartbeat-state.json');
const FEEDBACK_PATH = path.join(WORKSPACE, 'memory', 'feedback.json');
const DANCETECH_POSTS_PATH = path.join(WORKSPACE, 'memory', 'dancetech-posts.json');

Credential Access

High
Category
Privilege Escalation
Confidence
89% confidence
Finding

The script is designed to access a workspace .env file, which is a common store for sensitive credentials, and then uses those values for external authenticated requests. In a skill ecosystem, broad access to local secret stores is high risk because it normalizes secret harvesting from the workspace and can be repurposed to misuse credentials beyond the user's awareness.

Content

Scanner excerpt · scripts/iks_prepare.js (reported line 7)May include surrounding context.

js
const path = require('path');

const WORKSPACE = path.resolve(__dirname, '..');
const ENV_PATH = path.join(WORKSPACE, '.env');
const IKS_LOG_PATH = path.join(WORKSPACE, 'memory', 'iks-log.json');

function loadEnv() {

Credential Access

High
Category
Privilege Escalation
Confidence
78% confidence
Finding

Referencing and parsing the workspace .env file constitutes credential access because the code intentionally loads local secret material for later authenticated requests. In an agent skill, this is sensitive because any code path that can read shared secrets may be modified or abused to exfiltrate them or use them for unauthorized actions, especially when the script already performs network operations.

Content

Scanner excerpt · scripts/krump_community.js (reported line 7)May include surrounding context.

js
const path = require('path');

const WORKSPACE = path.resolve(__dirname, '..');
const ENV_PATH = path.join(WORKSPACE, '.env');
const COMM_LOG_PATH = path.join(WORKSPACE, 'memory', 'community-log.json');

function loadEnv() {

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/dancetech_post.js (reported line 10)May include surrounding context.

js
const path = require('path');

const WORKSPACE = path.resolve(__dirname, '..');
const ENV_PATH = path.join(WORKSPACE, '.env');
const SESSION_LOG_PATH = path.join(WORKSPACE, 'memory', 'session-posts.json');
const STATE_PATH = path.join(WORKSPACE, 'memory', 'session-state.json');

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/dancetech_post.js (reported line 146)May include surrounding context.

js
const path = require('path');

const WORKSPACE = path.resolve(__dirname, '..');
const ENV_PATH = path.join(WORKSPACE, '.env');
const SESSION_LOG_PATH = path.join(WORKSPACE, 'memory', 'session-posts.json');
const STATE_PATH = path.join(WORKSPACE, 'memory', 'session-state.json');