T05 · Unauthorized Access and Privilege Escalation
- Location
references/ram-policies.md:7- Finding
Unnecessary Alibaba Cloud RAM permissions exceed the Skill's declared functionality
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is mostly a coherent Elasticsearch log-configuration generator, but it includes unrelated Alibaba Cloud permissions and unsafe open-listener templates that users should review before installing.
Install only after reviewing whether any Alibaba Cloud RAM permissions will actually be granted; this skill should not need offline-task permissions for local config generation. Do not deploy the webhook or OTLP templates as-is: bind to loopback or a private interface, enable TLS and authentication for remote ingestion, restrict network access, and avoid Docker socket/root guidance unless explicitly required and isolated.
references/ram-policies.md:7Unnecessary Alibaba Cloud RAM permissions exceed the Skill's declared functionality
assets/templates/filebeat-http_endpoint-to-es.yaml:7Filebeat webhook template exposes an unauthenticated plaintext listener on all interfaces
assets/templates/otel-otlp-to-es.yaml:8OpenTelemetry OTLP template exposes unauthenticated plaintext receivers on all interfaces
Referenced artifact was not completely inspected
t.** Authoritative references live in the `references/` directory next to this `SKILL.md`. When a component option is covered locally, do not search the web; re
Referenced artifact was not completely inspected
- `01-configuration-basics.md` - top-level structure, pipelines, environment variables, TLS.
Referenced artifact was not completely inspected
- `03-elasticsearchexporter.md` - `endpoint`/`endpoints`/`cloudid`, authentication, mapping mode, index, sending_queue.
Referenced artifact was not completely inspected
- `04-kafkareceiver.md` - Kafka log ingestion, SASL, encoding.
Referenced artifact was not completely inspected
- `12-internal-queue.md` - `queue.mem` default and `queue.disk` settings, capacity tuning knobs.
Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.
| Blindly use `mapping.mode: ecs` | The default is `otel`; switch only when the user asks. |
| Set `setup.ilm.enabled: false` because the initial prompt asked for a custom index | Ask a separate ILM/custom-index confirmation after the stack is confirmed. |
| Use Filebeat ILM while also setting `index:` | Either confirm disabling ILM for the custom index or omit the custom index; choose one. |
| Use `verification_mode: none` without warning | Warn the user and prefer `full` with a CA file. |
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
| `node` | string | — | Set when host network mode breaks auto-detection. |
| `scope` | enum | `node` | Or `cluster`. |
| `namespace` | string | — | Restrict watch to one namespace. |
| `kube_config` | path | `$KUBECONFIG` then in-cluster | Kubeconfig path. |
| `use_kubeadm` | bool | `true` | Read `kubeadm-config` ConfigMap for cluster name. |
| `kube_client_options.qps` / `.burst` | number | — | Tune client throughput. |
| `cleanup_timeout` | duration | `60s` | Stop a container's running config after inactivity. |
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
- add_kubernetes_metadata:
node: ${NODE_NAME}
kube_config: ~/.kube/config
default_indexers.enabled: false
default_matchers.enabled: false
indexers:
Documenting /var/run/docker.sock as the default daemon socket is operationally accurate, but in a skill that generates deployment configs it normalizes a highly privileged integration point without surrounding cautions. Docker socket access can allow an attacker or compromised agent to control containers and potentially the host.
| Field | Type | Default | Notes |
|---|---|---|---|
| `host` | string | `unix:///var/run/docker.sock` | Daemon socket. |
| `ssl` | object | — | TLS to a TCP socket. |
| `match_fields` | []string | — | Field names checked for a container ID. |
| `match_pids` | []string | `["process.pid","process.parent.pid"]` | Used when the producer runs in Docker. |
The instruction to mount /var/run/docker.sock together with running as root creates a severe privilege-escalation path: anyone who can influence Filebeat or its container can often control the Docker daemon and escape to host-level actions. In this skill context, that guidance is especially risky because users may treat generated configs as best practice and deploy them directly.
| `cleanup_timeout` | duration | `60s` | Drop cached metadata after inactivity. |
| `labels.dedot` | bool | `true` | `.` → `_` in labels. |
Mount `/var/run/docker.sock` and run as root when Filebeat itself runs in a container.
## decode_json_fields
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
| Field | Default | Description |
|---|---|---|
| `auth_type` | `serviceAccount` | `serviceAccount`, `kubeConfig`, or `none`. |
| `context` | — | Kubeconfig context (only with `kubeConfig`). |
| `passthrough` | `false` | Skip K8s API; only forward pod IP. Use on agent → gateway pattern. |
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
| Field | Default | Description |
|---|---|---|
| `auth_type` | `serviceAccount` | `serviceAccount`, `kubeConfig`, or `none`. |
| `context` | — | Kubeconfig context (only with `kubeConfig`). |
| `passthrough` | `false` | Skip K8s API; only forward pod IP. Use on agent → gateway pattern. |
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
| Field | Default | Description |
|---|---|---|
| `auth_type` | `serviceAccount` | `serviceAccount`, `kubeConfig`, or `none`. |
| `context` | — | Kubeconfig context (only with `kubeConfig`). |
| `passthrough` | `false` | Skip K8s API; only forward pod IP. Use on agent → gateway pattern. |
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
| Field | Default | Description |
|---|---|---|
| `auth_type` | `serviceAccount` | `serviceAccount`, `kubeConfig`, or `none`. |
| `context` | — | Kubeconfig context (only with `kubeConfig`). |
| `passthrough` | `false` | Skip K8s API; only forward pod IP. Use on agent → gateway pattern. |
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
| Field | Default | Description |
|---|---|---|
| `auth_type` | `serviceAccount` | `serviceAccount`, `kubeConfig`, or `none`. |
| `context` | — | Kubeconfig context (only with `kubeConfig`). |
| `passthrough` | `false` | Skip K8s API; only forward pod IP. Use on agent → gateway pattern. |
## Default extracted metadata
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
| Field | Default | Description |
|---|---|---|
| `auth_type` | `serviceAccount` | `serviceAccount`, `kubeConfig`, or `none`. |
| `context` | — | Kubeconfig context (only with `kubeConfig`). |
| `passthrough` | `false` | Skip K8s API; only forward pod IP. Use on agent → gateway pattern. |
## Default extracted metadata
Code deploys a privileged Kubernetes workload (privileged container, hostPath mount, or host namespaces). This grants root on the node and is a node/cluster takeover vector.
## Caveats
- **Memory**: each watched pod is cached. On agent deployments, *always* filter to the local node.
- **`hostNetwork: true`** pods can't be matched by IP.
- **Sidecar deployment is unsupported** — use the K8s downward API instead.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- The initial user request never counts as the Step 1 technology stack confirmation. Only a later direct answer to the Step 1 question counts.
- Do not proceed past Step 1 in the same assistant response that asks for the technology stack.
- Do not pick an OTel ES exporter mapping mode when the ES version is unknown.
- Do not enable `start_at: beginning` without confirmation, because it changes which lines are sent.
- Do not disable ILM or set a custom index without a separate confirmation. The initial request does not count as confirmation to disable ILM or use a custom index, even when it explicitly asks to turn ILM off.
- Do not choose a TLS verification mode, `full` or `none`, without confirmation.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- The initial user request never counts as the Step 1 technology stack confirmation. Only a later direct answer to the Step 1 question counts.
- Do not proceed past Step 1 in the same assistant response that asks for the technology stack.
- Do not pick an OTel ES exporter mapping mode when the ES version is unknown.
- Do not enable `start_at: beginning` without confirmation, because it changes which lines are sent.
- Do not disable ILM or set a custom index without a separate confirmation. The initial request does not count as confirmation to disable ILM or use a custom index, even when it explicitly asks to turn ILM off.
- Do not choose a TLS verification mode, `full` or `none`, without confirmation.
The template binds OTLP gRPC and HTTP receivers to 0.0.0.0, which exposes log-ingestion endpoints on all network interfaces by default. In the context of a config generator skill, users may deploy this verbatim, unintentionally creating externally reachable ingestion surfaces that can enable unauthorized log injection, resource abuse, or amplification of downstream Elasticsearch indexing costs.
The documentation presents delete.enabled: true as a normal configuration option without an explicit warning that it permanently deletes source log files after ingestion. In a config-generation skill, users may copy this directly into production, causing irreversible data loss, broken forensic retention, or loss of recovery paths if ingestion is partial, misrouted, or later found incomplete.
The documentation explicitly recommends preserve_original_event and include_headers capabilities without any warning that request bodies and headers often contain secrets, tokens, cookies, API keys, PII, or other sensitive webhook metadata. In this skill context, users are generating Elasticsearch ingestion configs, so normalizing insecure examples can directly lead to sensitive data being indexed, retained, and broadly searchable.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- **full** — CA chain + hostname/IP. **Recommended for production.**
- **strict** — Like full, but rejects empty SAN.
- **certificate** — CA chain only.
- **none** — No verification (strongly discouraged in production).
## Client (output) sample
Telling users to run the collector as root increases the blast radius of any Filebeat compromise, parser bug, or misconfiguration, especially when paired with Docker socket access. Because this is prescriptive operational guidance rather than incidental mention, it meaningfully promotes an unsafe privilege model.
| `cleanup_timeout` | duration | `60s` | Drop cached metadata after inactivity. |
| `labels.dedot` | bool | `true` | `.` → `_` in labels. |
Mount `/var/run/docker.sock` and run as root when Filebeat itself runs in a container.
## decode_json_fields
The documentation explicitly instructs users to mount the Docker socket and run Filebeat as root in a container, but omits any warning that this grants broad control over the host Docker daemon and effectively host-level privilege. In a configuration-generation skill, users may copy this verbatim, making the unsafe deployment guidance materially dangerous.
Detected: suspicious.exposed_secret_literal