禅道自动报告

WarnAudited by ClawScan on May 10, 2026.

Overview

The skill’s ZenTao time-reporting purpose is coherent, but it exposes reusable session cookies and includes an unsafe shell helper that can turn a work description into Python code.

Review or patch the scripts before installing. Only use this with a trusted ZenTao account, remove zentaosid/token logging, secure the ~/.config/zentao/.env file, avoid the shell matcher until its quoting bug is fixed, and manually confirm every task and hour entry before recording.

Findings (6)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

A valid session ID may appear in agent transcripts, terminal output, or logs and could let someone act as the user in ZenTao while the session is valid.

Why it was flagged

After logging in with the user’s ZenTao account/password, the preferred Python reporter prints the fresh session cookie to stdout instead of redacting it.

Skill content
zentaosid = relogin(zentao_url, zentao_account, zentao_password)
print(f">>> Got fresh zentaosid: {zentaosid}")
Recommendation

Remove session-token printing, redact debug output, and keep credentials/session material only in protected storage.

What this means

Other local processes, shared machines, or retained logs may gain access to a reusable ZenTao session cookie.

Why it was flagged

The shell reporter stores login cookies in a predictable /tmp path and then echoes the extracted session ID.

Skill content
curl -c /tmp/cookies.txt "$ZENTAO_URL/user-login.html" -s > /dev/null
curl -b /tmp/cookies.txt -c /tmp/cookies.txt "$ZENTAO_URL/index.php?m=user&f=login&t=json" ...
ZENTAO_SID=$(grep 'zentaosid' /tmp/cookies.txt | tail -1 | awk '{print $7}')
echo ">>> Got fresh zentaosid: $ZENTAO_SID"
Recommendation

Use a securely created private temp file or in-memory cookie jar, set restrictive permissions, clean it up, and never echo the session value.

What this means

If the shell helper is used with untrusted or pasted text, that text could run local Python commands on the user’s machine.

Why it was flagged

The shell helper interpolates the work description directly into a python3 -c program instead of passing it as data, so crafted quotes in the description can break out into executable Python.

Skill content
user_desc = '''$USER_DESC'''.lower()
Recommendation

Pass the description via sys.argv, stdin, or a safely encoded JSON value; avoid constructing executable code from user-controlled text.

What this means

A wrong task match or wrong hour amount would create incorrect business time records.

Why it was flagged

The skill is explicitly designed to make a state-changing ZenTao API call after user confirmation.

Skill content
向用户确认:匹配结果是否正确
...
确认后自动记录工时
...
调用 `recordworkhour` 接口提交
Recommendation

Confirm the task ID, work description, date, and hours before allowing the report script to run.

What this means

Project/task names and workload details may enter chat transcripts or logs during matching.

Why it was flagged

The matcher prints all fetched task names, IDs, consumed hours, and remaining hours into the agent-visible output.

Skill content
lines.append(f'# Found {len(tasks)} tasks:')
lines.append('| Task ID | Task Name | Consumed | Left |')
lines.append(f'| {tid} | {name} | {consumed}h | {left}h |')
Recommendation

Use this only in trusted workspaces, and consider limiting output to the top matches instead of the full task list.

What this means

Users may not realize before reading the full skill that it needs ZenTao account credentials and local credential storage.

Why it was flagged

Registry metadata does not advertise the credential/config requirements that SKILL.md and the scripts actually rely on.

Skill content
Source: unknown; Homepage: none; Required env vars: none; Primary credential: none; Required config paths: none
Recommendation

Declare the ZenTao credential, config path, network/API capability, and provenance clearly in metadata.