T03 · Remote Payload Retrieval and Execution
- Location
INSTALL.md:6- Finding
Unverified Remote Script Is Downloaded and Executed
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears to do Notion-to-Obsidian syncing as advertised, but its installation and credential-handling guidance expose users to avoidable high-impact risk.
Review this carefully before installing. Avoid the curl-to-bash installer unless you separately trust and verify it, store the Notion token outside shared or backed-up directories, do not run scripts in logged/recorded environments until token-prefix printing is removed, test with a disposable Obsidian vault first, and grant the Notion integration access only to the pages/databases you actually want synced.
INSTALL.md:6Unverified Remote Script Is Downloaded and Executed
scripts/stop_timer.sh:22Unvalidated PID File Can Terminate an Unrelated Process
config.json:1Notion Token Is Stored in Plaintext and Partially Disclosed
INSTALL.md:168Python Dependencies Are Installed Without Version or Integrity Pinning
The installation instructions fetch and immediately execute a remote script from clawhub.com, creating a direct arbitrary code execution path. If the remote script or hosting infrastructure is compromised, users who follow the recommended install path will run attacker-controlled code on their systems.
# 安装 ClawHub CLI(如果尚未安装)
curl -fsSL https://clawhub.com/install.sh | bash
# 搜索技能
clawhub search notion-sync
Piping network output directly into bash removes the user's opportunity to review the fetched content and magnifies the danger of script substitution or transient compromise. This pattern is especially risky in installation documentation because it normalizes unsafe command chaining for all users of the skill.
# 安装 ClawHub CLI(如果尚未安装)
curl -fsSL https://clawhub.com/install.sh | bash
# 搜索技能
clawhub search notion-sync
If the actual behavior includes API account probing and creation of test files rather than article synchronization, the skill is performing actions outside its stated purpose. Unexpected probing and filesystem changes are security-relevant because they can reveal account metadata, create persistence artifacts, or normalize unsafe trust in undocumented behavior.
If the actual behavior includes API account probing and creation of test files rather than article synchronization, the skill is performing actions outside its stated purpose. Unexpected probing and filesystem changes are security-relevant because they can reveal account metadata, create persistence artifacts, or normalize unsafe trust in undocumented behavior.
If the actual behavior includes API account probing and creation of test files rather than article synchronization, the skill is performing actions outside its stated purpose. Unexpected probing and filesystem changes are security-relevant because they can reveal account metadata, create persistence artifacts, or normalize unsafe trust in undocumented behavior.
If the actual behavior includes API account probing and creation of test files rather than article synchronization, the skill is performing actions outside its stated purpose. Unexpected probing and filesystem changes are security-relevant because they can reveal account metadata, create persistence artifacts, or normalize unsafe trust in undocumented behavior.
The natural-language content forces a specific language for all installation and operating instructions. Under the stated policy, a skill should not impose a language or locale without user opt-in or a clearly documented justification.
The guide explicitly recommends a curl ... | bash installer without any warning, pinning, checksum verification, or instruction to inspect the script first. This trains users to execute unaudited remote code directly in their shell, which could lead to arbitrary code execution if the remote host, CDN, or delivery path is compromised.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
ls -la /path/to/your/obsidian
chmod 755 /path/to/your/obsidian
## 📊 监控和维护
The README promotes automatic syncing and full local export into an Obsidian directory but does not clearly warn users that the skill will create and potentially overwrite large numbers of local markdown files. In a note-taking context, this can cause unintended data loss, vault clutter, or syncing propagation across the user's broader Obsidian/cloud workflow if users assume the operation is read-only or low-impact.
The skill advertises and instructs use of network access, shell scripts, and local file writes, yet the manifest does not declare any tool scope such as permissions or allowed-tools. This creates a transparency and containment failure: users and the hosting agent cannot accurately constrain what the skill may do, increasing the risk of unintended file modification or outbound API use with sensitive tokens.
The documentation asks users to export remote Notion content into a local Obsidian vault and to provide an API key, but it does not clearly warn about continuous local writes, retention of synced content, or privacy implications. In a note-taking context this is especially relevant because vaults often contain sensitive personal or business information, so quiet background syncing can expand exposure without informed consent.
The guide explicitly shows placing a live Notion API token in a plain-text config.json file and does not warn about secure storage, file permissions, or excluding the file from version control. This increases the risk of credential leakage through backups, screenshots, logs, repository commits, or local compromise, which could allow unauthorized access to synced Notion content.
The testing and manual sync commands can trigger network access to Notion and write exported content into the user's Obsidian vault, but the guide does not clearly warn about those side effects. This can lead to unintended data import, overwriting expectations, or privacy surprises when users run commands believing they are harmless diagnostics.
The file's docstrings and all user-facing messages are written in Chinese, which effectively constrains the interaction language. There is no indication that the tool is intentionally region-specific or that users can opt into another language, so this appears to violate the language/locale choice policy.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
print("=" * 60)
try:
response = requests.post(
"https://api.notion.com/v1/search",
headers=HEADERS,
json={
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
print("=" * 60)
try:
response = requests.post(
"https://api.notion.com/v1/search",
headers=HEADERS,
json={
This code performs authenticated HTTP requests to the Notion API and then displays returned page metadata and text snippets. While it logs that an API key is being used, it does not warn the user that page titles, URLs, properties, and block text will be fetched from Notion and echoed to stdout, which can expose sensitive workspace content during debugging.
The script prints the first 10 characters of the Notion API key to stdout, unnecessarily disclosing credential material during a routine listing operation. Even partial secrets can be captured in terminal history, CI logs, screenshots, or support transcripts and may aid correlation or partial-secret recovery.
This output exposes part of the Notion API key without warning the user that credential material will be shown in the terminal. In shared shells, logs, or recorded sessions, this can leak sensitive authentication data beyond the intended operator.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 搜索最近的文章
echo "🔍 搜索最近编辑的文章..."
RESPONSE=$(curl -s -X POST "https://api.notion.com/v1/search" \
-H "Authorization: Bearer $API_KEY" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 搜索最近的文章
echo "🔍 搜索最近编辑的文章..."
RESPONSE=$(curl -s -X POST "https://api.notion.com/v1/search" \
-H "Authorization: Bearer $API_KEY" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 搜索最近的文章
echo "🔍 搜索最近编辑的文章..."
RESPONSE=$(curl -s -X POST "https://api.notion.com/v1/search" \
-H "Authorization: Bearer $API_KEY" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 搜索最近的文章
echo "🔍 搜索最近编辑的文章..."
RESPONSE=$(curl -s -X POST "https://api.notion.com/v1/search" \
-H "Authorization: Bearer $API_KEY" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 搜索最近的文章
echo "🔍 搜索最近编辑的文章..."
RESPONSE=$(curl -s -X POST "https://api.notion.com/v1/search" \
-H "Authorization: Bearer $API_KEY" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
No suspicious patterns detected.