CVE-2025-55192 Overview
CVE-2025-55192 is a code injection vulnerability [CWE-94] in the HomeAssistant-Tapo-Control project, which provides control of Tapo cameras as a Home Assistant component. The flaw resides in the GitHub Actions workflow .github/workflows/issues.yml. The workflow inserts user-controlled content from github.event.issue.body directly into a Bash conditional without sanitization. A malicious GitHub user can craft an issue body that executes arbitrary commands on the GitHub Actions runner in a privileged context when an issue is opened. The vulnerability does not affect users of the Home Assistant integration itself — it only impacts the repository's CI/CD environment. The issue was fixed in commit 2a3b80f.
Critical Impact
Attackers can execute arbitrary commands on the GitHub Actions runner, potentially exposing repository contents and GitHub Actions secrets.
Affected Products
- HomeAssistant-Tapo-Control repository GitHub Actions workflow (.github/workflows/issues.yml)
- All commits prior to 2a3b80f
- CI/CD environment only — Home Assistant integration runtime is not affected
Discovery Timeline
- 2025-08-14 - CVE-2025-55192 published to NVD
- 2026-04-15 - Last updated in NVD database
Technical Details for CVE-2025-55192
Vulnerability Analysis
The vulnerable workflow triggers on issue creation events. It evaluates the issue body within a Bash conditional expression. Because github.event.issue.body is interpolated directly into the shell command at template expansion time, any shell metacharacters or command substitution syntax in the issue body becomes part of the executed script. The runner then executes attacker-supplied commands with the permissions assigned to the workflow's GITHUB_TOKEN.
The issue maps to [CWE-94] Improper Control of Generation of Code (Code Injection). It is a well-known class of GitHub Actions vulnerability driven by unsafe ${{ }} interpolation of untrusted event data into run: steps.
Root Cause
The root cause is direct interpolation of untrusted input from github.event.issue.body into a Bash if comparison without quoting or sanitization. GitHub Actions expands ${{ ... }} expressions before the shell sees the command, so the attacker-controlled string becomes literal script content rather than data. Standard shell quoting cannot defend against this because the substitution occurs before the shell parses its input.
Attack Vector
An unauthenticated GitHub user opens a new issue on the repository. The issue body contains shell metacharacters such as backticks, $(...) command substitution, or statement separators like ; and &&. When the issues.yml workflow fires on the issues: opened event, the runner expands the malicious body into the Bash conditional and executes the embedded commands. The attacker can then exfiltrate the GITHUB_TOKEN, repository secrets accessible to the workflow, or modify repository contents if the token has write scope.
No proof-of-concept code is referenced in the advisory. See the GitHub Security Lab Advisory and the GitHub Security Advisory GHSA-xccg-43hx-c846 for technical details.
Detection Methods for CVE-2025-55192
Indicators of Compromise
- Unexpected outbound network connections from GitHub Actions runners triggered by issues.yml
- Workflow run logs containing shell errors or unexpected command output during issue triage steps
- Issue bodies containing shell metacharacters such as backticks, $(...), ;, &&, or | in repositories using the vulnerable workflow
- Unauthorized repository writes, new tags, or modified secrets following an issue creation event
Detection Strategies
- Audit GitHub Actions workflow files for direct interpolation of github.event.issue.*, github.event.pull_request.*, or github.event.comment.* fields into run: steps
- Use static analysis tools such as actionlint or GitHub's CodeQL Actions queries to flag unsafe ${{ }} expressions in shell contexts
- Review issue creation events that immediately precede unusual workflow behavior or secret access patterns
Monitoring Recommendations
- Enable GitHub Actions audit logging and forward runner telemetry to a centralized analytics platform for review
- Alert on workflow runs that access secrets shortly after issue or pull request events from external contributors
- Monitor repository secret rotation events and GITHUB_TOKEN usage anomalies
How to Mitigate CVE-2025-55192
Immediate Actions Required
- Update the HomeAssistant-Tapo-Control repository to commit 2a3b80f or later, which contains the patch
- Rotate any secrets that were exposed to the issues.yml workflow, including third-party tokens referenced by the runner
- Review historical workflow run logs for evidence of exploitation prior to patching
- Audit other workflows in the repository for similar unsafe interpolation patterns
Patch Information
The fix is applied in commit 2a3b80f. The patch replaces the unsafe Bash conditional with a safe comparison that does not allow shell expansion of the issue body. Repository maintainers should pull the latest main branch to apply the fix.
Workarounds
- Disable the affected workflow by removing or renaming .github/workflows/issues.yml until the patch is applied
- Replace the unsafe Bash comparison with a quoted grep invocation or a pure GitHub Actions expression check that does not pass untrusted input to a shell
- Pass untrusted event data through environment variables instead of direct ${{ }} interpolation, for example env: BODY: ${{ github.event.issue.body }} and then reference "$BODY" in the shell step
- Apply minimal permissions: blocks in workflows to restrict GITHUB_TOKEN scope and limit blast radius
# Configuration example: safe handling of untrusted issue body
jobs:
triage:
runs-on: ubuntu-latest
permissions:
issues: read
steps:
- name: Inspect issue body safely
env:
BODY: ${{ github.event.issue.body }}
run: |
if echo "$BODY" | grep -qF "expected-string"; then
echo "matched"
fi
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

