Is ferreirafabio/dropbox-kb-auto safe?
https://github.com/openclaw/skills/tree/main/skills/ferreirafabio/dropbox-kb-auto
The dropbox-kb-auto skill contains no malicious code, no prompt injection in its SKILL.md, and no unauthorized network activity during installation—all monitored canary files remain intact and the sole external connection during install was to GitHub. Its primary risks are structural rather than malicious: the OCR and text extraction pipeline places all Dropbox document content—including potential adversarial payloads embedded in files from shared folders or external downloads—directly into the agent's persistent knowledge base without sanitization, and a persistent cron job runs every 6 hours with full Dropbox read credentials that survives skill file removal. Users who index Dropbox folders containing documents from untrusted third parties should be aware that those documents become part of the agent's context and could influence agent behavior.
Category Scores
Findings (12)
HIGH Indirect Prompt Injection via OCR'd and Extracted Dropbox Content -12 ▶
The skill extracts text from all configured Dropbox files—including OCR of scanned PDFs and images via tesseract—and stores the raw extracted text in the agent's persistent knowledge base as markdown files. Any adversarially crafted document in the user's Dropbox (planted via shared folder, unknowingly downloaded, or received as an email attachment) could contain prompt injection payloads that get indexed into the agent's memory and influence future agent responses when users query the knowledge base. The extraction pipeline performs no sanitization of document content before writing to memory.
MEDIUM Structural Indirect Prompt Injection Cannot Be Mitigated by User Behavior Alone -30 ▶
Unlike a skill that reads specific named files on request, this skill's automated delta-sync design means adversarial content from any document that enters the user's Dropbox is automatically ingested into the agent's knowledge base without user awareness or review. The user cannot prevent this without manually auditing every indexed file. A threat actor with access to any Dropbox folder shared with the victim (including read-only shared folders) can plant injection payloads that persist in agent memory across sessions.
MEDIUM Persistent Cron Job Survives Skill Removal with Ongoing Credential Access -20 ▶
The openclaw cron create command in install.sh registers a system-level scheduled task that runs dropbox-sync.py every 6 hours with a 4-hour timeout. This scheduled job retains access to Dropbox API credentials stored in ~/.openclaw/.env and continues executing indefinitely. Deleting the skill's files from ~/.openclaw/workspace/skills/dropbox-kb-auto/ does not automatically remove the cron job, creating a persistence mechanism that outlives the user's intent to uninstall.
MEDIUM Entire Dropbox Document Library Indexed into Agent-Accessible Memory -12 ▶
All documents from configured Dropbox folders (PDFs, Office files, images, text files up to 20MB) are downloaded, text-extracted, and written to the agent's knowledge base as searchable markdown files. This gives the agent persistent, unscoped access to potentially sensitive business documents, financial records, contracts, personal data, and proprietary information from the user's Dropbox across all future agent sessions, not just those explicitly about Dropbox.
MEDIUM Persistent Background Cron Job with Extended Execution Window -15 ▶
The skill registers an OpenClaw cron job with a 14400-second (4-hour) execution timeout running every 6 hours. This is a long-running background process with full Dropbox read access that executes without user interaction, downloading and indexing new content continuously across the lifetime of the installation.
LOW Broad Document Access Scope May Leak Sensitive Content in Agent Responses -10 ▶
With all configured Dropbox folders indexed into the agent's knowledge base, the agent may surface sensitive information (financial data, personal communications, confidential business documents) when users make queries that trigger retrieval from the Dropbox knowledge base. Users may not realize how broadly the agent can draw on this indexed content or that documents they didn't intend to share with the agent are now in its context.
LOW Full Dropbox OAuth Scope Exceeds Minimum Required Access -10 ▶
The skill requires 'Full Dropbox' access scope (files.metadata.read + files.content.read) rather than folder-specific scoped OAuth tokens. These broad credentials are stored in ~/.openclaw/.env and read by dropbox-sync.py at every execution. While no unauthorized transmission of these credentials was observed, the credential scope grants access to the user's entire Dropbox rather than only the configured folders.
LOW Background Cron Job Maintains Continuous Credential Exposure to Dependency Chain -6 ▶
The persistent cron job reads Dropbox API credentials from ~/.openclaw/.env at every 6-hour execution, meaning the credentials are in active use continuously. Any future vulnerability in dropbox-sync.py's dependencies (pypdf, python-docx, openpyxl, python-pptx, Pillow/tesseract) or in the OCR pipeline processing attacker-controlled document content could expose these credentials.
LOW install.sh Rewrites dropbox-sync.py Using Inline Python Heredoc -10 ▶
The install.sh embeds a Python heredoc that reads user-provided config values (folder names, skip paths, file extensions) from a JSON file and writes them directly into dropbox-sync.py via string replacement using script.replace(). While the values are read from JSON and the replacement targets specific constant strings, this is a pattern of a shell script dynamically rewriting Python source code based on external input. If config values contained escape sequences or Python syntax that broke the string context, code could be injected into the running script.
LOW setup.sh Escalates to Root via sudo for Package Installation -8 ▶
The setup.sh calls 'sudo apt-get install' or 'sudo yum install' to install system packages (tesseract-ocr, tesseract-ocr-eng, tesseract-ocr-deu, poppler-utils, python3-pip) requiring root privileges. While standard practice for system dependencies, this grants the installer script root-level access to the system package manager and should be reviewed before execution.
LOW Installation Requires External Network Connection to GitHub -5 ▶
The skill is installed via git sparse-checkout from github.com, requiring an outbound HTTPS connection to 140.82.121.3:443. The installed code is fetched from an external server at install time. No unexpected secondary connections were observed beyond this expected GitHub connection.
INFO Honeypot Credential Files Accessed Only by Monitoring Infrastructure, Not Skill Code 0 ▶
Six sensitive credential honeypot files were accessed during the audit window, but timing analysis confirms these accesses occurred in two clusters consistent with monitoring system baseline collection: before skill installation at audit timestamps 1771917407.909-910 (git clone did not begin until 1771917413.408) and after skill teardown at 1771917425.357. No skill source code contains logic to read SSH keys, AWS credentials, Docker configs, npmrc, or cloud provider credential files. All canary files remain unmodified.