T09 · Insecure Skill Coding Practices
- Location
scripts/emporia_cloud.py:47- Finding
Undocumented Arbitrary-Host Simulator Connection
- Content
View full analysis
Vulnerability Details
File Location:
scripts/emporia_cloud.py, lines 47–51
Vulnerability Type: Arbitrary outbound network connection / insufficient destination validation
Risk Level: Mediumpython def login(vue, email, password): if email.startswith("vue_simulator@"): host = email.split("@", 1)[1] return vue.login_simulator(host) return vue.login(email, password)Technical Analysis
The cloud login function interprets an
EMPORIA_EMAILvalue beginning withvue_simulator@as a request to connect to a simulator at the hostname following the@character. The destination is passed toPyEmVue.login_simulator()without validation or an allowlist.This simulator behavior is not documented in
SKILL.mdand is not required for the declared functionality of querying the Emporia cloud service. It therefore expands the Skill's network reach beyond the minimum destination scope needed for normal cloud mode. Depending on the behavior of the installedPyEmVueimplementation, this can provide an SSRF-like network reachability primitive.The reviewed code does not pass
EMPORIA_PASSWORDtologin_simulator(). Consequently, the available evidence does not establish password exfiltration through this path.Attack Path
- An attacker or untrusted configuration source controls the Skill's
EMPORIA_EMAILenvironment variable. - The attacker sets it to a value such as
vue_simulator@attacker-controlled.exampleor a hostname resolving to an internal service. - The user or agent invokes any cloud command, such as
summary. login()extracts the attacker-selected hostname.vue.login_simulator(host)initiates a network connection to that destination.- The destination can observe the connection, or the behavior can be used to attempt access to hosts reachable from the Skill's execution environment.
Impact Assessment
Exploitation permits attacker-dire ...[truncated 356 chars]
- An attacker or untrusted configuration source controls the Skill's
- Remediation
View remediation
Remediation Suggestions
- Remove simulator support from the production Skill if it is not required by the declared functionality.
- If simulator support is necessary, expose it through an explicit mode such as
EMPORIA_MODE=simulatorrather than overloading the email field. - Restrict simulator destinations to a strict allowlist or, for development-only use, loopback addresses.
- Resolve hostnames and reject private, link-local, loopback, multicast, and metadata-service addresses unless a narrowly defined use case explicitly requires them.
- Apply connection timeouts and avoid following destination redirects.
- Document the simulator mode, its network behavior, and its trust assumptions.
- Keep cloud mode restricted to the expected Emporia service endpoints.
