T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/workflow_manager_ui.py:212- Finding
Fail-Open Management API Exposed on All Network Interfaces
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill matches its Zrise automation purpose, but it exposes high-impact task automation with weak network, credential, and permission safeguards.
Install only in a controlled environment with a least-privileged Zrise account. Before use, require WORKFLOW_UI_TOKEN, bind the UI to 127.0.0.1, remove Claude permission bypass, restore TLS certificate verification, avoid installing executables from /tmp or mutable latest dependencies, and test against non-production Zrise tasks first.
scripts/workflow_manager_ui.py:212Fail-Open Management API Exposed on All Network Interfaces
scripts/zrise_utils.py:17Zrise Credentials Transmitted Without TLS Certificate Verification
scripts/execute_task.py:69Indirect Prompt Injection Through Zrise Task Content
scripts/run_workflow_pipeline.py:174Claude Workflow Execution Explicitly Bypasses Permission Controls
scripts/workflow_manager_ui.py:757Missing Task-Level Authorization for Direct Object Operations
scripts/workflow_manager_ui.py:182Automatic Removal of macOS Quarantine and Provenance Metadata
SKILL.md:78Unpinned Remote Dependency Installation and Execution from a Predictable Temporary Directory
The webhook reply handler performs sensitive actions like approve_task() and reject_task() based solely on message text and chat context, without calling verify_employee() or enforcing authorization. Any Telegram user or spoofed webhook payload that reaches this handler could trigger workflow approvals or rejections, causing unauthorized business actions.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
- files_changed: list of files (if any)
"""
return prompt
def call_agent(task_id, prompt, session_id, agent_id='zrise'):
The workflow runner invokes claude with --permission-mode bypassPermissions, while the prompt is built from work item data, prior outputs, and workflow configuration that should all be treated as potentially untrusted. That creates a dangerous privilege boundary failure: prompt-injected instructions could cause the agent to perform local or external actions without normal approval safeguards.
The code clones the full parent environment into the workflow subprocess (env = {**os.environ}), which can expose secrets such as API tokens, credentials, and internal configuration to any executed workflow or child script. In this skill context, the subprocess target is a workflow pipeline that may process untrusted task/workflow content, so broad environment inheritance increases secret exposure risk.
item_file.write_text(json.dumps(item, indent=2, ensure_ascii=False), encoding='utf-8')
try:
env = {**os.environ}
env['PYTHONPATH'] = str(SCRIPTS_DIR)
env['PATH'] = '/opt/homebrew/bin:' + env.get('PATH', '')
env['ZRISE_JSON_OUTPUT'] = '1'
TLS verification is explicitly disabled by setting check_hostname to False and verify_mode to CERT_NONE, so the XML-RPC client will trust any certificate. This enables man-in-the-middle interception or modification of traffic, including theft of Zrise credentials and tampering with authenticated RPC requests.
The skill description states it can post HTML comments, update task stages, and save conversation history in Zrise, which are actions that can affect user data and remote system state. The README presents these capabilities as features and usage examples but does not include any caution, confirmation expectation, or warning about making persistent changes.
The configuration section instructs users to provide ZRISE_API_KEY and GEMINI_API_KEY and describes AI agents processing tasks, but it does not warn that task content and related system data may be transmitted to external services. For a markdown skill description, omission of privacy and credential-handling warnings is a missing user warning under the rule.
The skill instructions and examples are written entirely in Vietnamese, including operational guidance and sample user messages, with no indication that users may choose another language. This can violate a language/locale policy when a specific language is imposed without explicit opt-in or justification.
The setup instructions execute tooling via an unpinned package invocation (npx tsc) after cloning a repository from the internet into /tmp. Unpinned transient tool execution weakens supply-chain integrity because different compiler/package versions could be fetched or resolved over time, enabling unexpected or malicious code execution during installation/build.
Line L005 presents core skill behavior documentation in Vietnamese while the rest of the document is in English, with no indication that the locale is optional or region-specific. This creates a language/locale policy concern because users are implicitly forced into a specific language without opt-in.
The documented approval flow allows certain agents to be auto-approved while require_user_selection is set to false, enabling autonomous execution without explicit human confirmation. In an agent-routing system, this reduces oversight and can permit unsafe, unintended, or policy-violating actions to proceed automatically if routing is incorrect or an agent is over-privileged.
"approval_flow": {
"auto_approve_agents": ["demo-be", "demo-fe"],
"manual_approve_agents": ["demo-architect"],
"require_user_selection": false
}
This markdown file documents a flow where pressing a UI trigger spawns an agent process, executes work, writes results back to Zrise, and updates the task stage to Done. The description presents these actions as normal workflow steps but does not include any caution about subprocess execution, external system writeback, or automatic state changes that could affect user data or system integrity.
The guide explicitly describes an agent that will generate code, write to files, and write back results automatically, but it does not warn operators that these actions mutate local and remote system state. In an agent skill context, undocumented autonomous write behavior can lead to unintended code changes, accidental data corruption, or unauthorized updates if users assume the workflow is informational or review-gated.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
This section encourages use of a workflow where the agent autonomously decides, spawns subagents, and performs writeback without highlighting that these actions can trigger side effects beyond the original user expectation. Autonomous delegation plus state-changing operations increases the risk of uncontrolled execution, expanded permissions use, and unexpected modifications across multiple components.
The guide tells users how to post content back to Zrise but does not clearly warn that the action publishes data to an external tasking system where others may see or retain it. In a workflow that processes AI-generated output and task data, this increases the risk of accidental disclosure of sensitive, incorrect, or unreviewed information.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
# 1. Open Telegram, search @BotFather
The documentation encourages storing bot tokens and sending employee/task data to Telegram, a third-party platform, but does not prominently warn about privacy, data handling, retention, or compliance implications. The token example is realistic enough to normalize secret placement in config files and may lead users to mishandle credentials or disclose operational metadata externally.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
'parse_mode': 'HTML' }
requests.post(url, json=data)
### Handle Reply
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
python3 send_telegram_message.py --chat-id 123456789 --message "Test message"
curl -X POST https://your-domain.com/telegram/webhook
-H "Content-Type: application/json"
-d '{"message":{"chat":{"id":123},"text":"test"}}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Method 1: Use @userinfobot
# Method 2: Use API
curl https://api.telegram.org/bot<TOKEN>/getUpdates
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Method 1: Use @userinfobot
# Method 2: Use API
curl https://api.telegram.org/bot<TOKEN>/getUpdates
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Method 1: Use @userinfobot
# Method 2: Use API
curl https://api.telegram.org/bot<TOKEN>/getUpdates
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Method 1: Use @userinfobot
# Method 2: Use API
curl https://api.telegram.org/bot<TOKEN>/getUpdates
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Method 1: Use @userinfobot
# Method 2: Use API
curl https://api.telegram.org/bot<TOKEN>/getUpdates