GHSA-6P2J-742G-835F

Vulnerability from github – Published: 2026-04-04 06:03 – Updated: 2026-04-04 06:03
VLAI
Summary
actions-mkdocs: Command Injection via issue title in internal GitHub Actions workflow
Details

Summary

External input from github.event.issue.title is used unsafely in a shell command in .github/workflows/release-candidate.yaml, allowing command injection during workflow execution.

Details

In .github/workflows/release-candidate.yaml, the issue title is interpolated directly into a shell command:

export VERSION=$(echo ${{ github.event.issue.title }} | sed -E 's/Release v?([0-9\.]*)/\1/g')

Because the issue title is attacker-controlled and is embedded directly into a shell command, shell metacharacters such as command substitution ($()) and command separators (;) can be interpreted by the shell.

Although the workflow checks that the title starts with Release, this condition can still be satisfied by a maliciously crafted input.

PoC

  1. Create or edit an issue with the following title:

Release v1.2.3 $(whoami)

  1. Trigger the workflow that processes the issue.

  2. Observe that the injected command is executed on the runner.

The workflow logs show that $(whoami) is evaluated and its output (runner) appears in the command result, confirming that attacker-controlled input is executed within the shell.

스크린샷 2026-03-27 오후 8 33 43

Impact

This vulnerability allows command injection in the GitHub Actions runner through attacker-controlled issue titles. An attacker may be able to execute arbitrary commands within the context of the affected workflow job.

Depending on the workflow configuration (such as permissions and available secrets), successful exploitation could lead to:

  • Unauthorized command execution in the CI environment
  • Misuse of the GITHUB_TOKEN
  • Modification of repository state, release artifacts, or other workflow outputs

If the repository is public and allows untrusted users to create or reopen issues that trigger the workflow, this may be exploitable by external users.

This issue is limited to the repository's internal workflow configuration and does not directly affect downstream users of the published actions-mkdocs GitHub Action.

Show details on source website

{
  "affected": [
    {
      "database_specific": {
        "last_known_affected_version_range": "\u003c= 0.24.0"
      },
      "package": {
        "ecosystem": "GitHub Actions",
        "name": "Tiryoh/actions-mkdocs"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            },
            {
              "fixed": "0.25.0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [],
  "database_specific": {
    "cwe_ids": [
      "CWE-77"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-04-04T06:03:06Z",
    "nvd_published_at": null,
    "severity": "MODERATE"
  },
  "details": "### Summary\n\nExternal input from `github.event.issue.title` is used unsafely in a shell command in `.github/workflows/release-candidate.yaml`, allowing command injection during workflow execution.\n\n### Details\n\nIn `.github/workflows/release-candidate.yaml`, the issue title is interpolated directly into a shell command:\n\n```\nexport VERSION=$(echo ${{ github.event.issue.title }} | sed -E \u0027s/Release v?([0-9\\.]*)/\\1/g\u0027)\n```\n\nBecause the issue title is attacker-controlled and is embedded directly into a shell command, shell metacharacters such as command substitution (`$()`) and command separators (`;`) can be interpreted by the shell.\n\nAlthough the workflow checks that the title starts with `Release `, this condition can still be satisfied by a maliciously crafted input.\n\n### PoC\n\n1. Create or edit an issue with the following title:\n\n   ```\n   Release v1.2.3 $(whoami)\n   ```\n\n2. Trigger the workflow that processes the issue.\n\n3. Observe that the injected command is executed on the runner.\n\nThe workflow logs show that `$(whoami)` is evaluated and its output (`runner`) appears in the command result, confirming that attacker-controlled input is executed within the shell.\n\n\u003cimg width=\"633\" height=\"380\" alt=\"\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba 2026-03-27 \u110b\u1169\u1112\u116e 8 33 43\" src=\"https://github.com/user-attachments/assets/90b38dab-8c53-4a13-8302-158ac5acf051\" /\u003e\n\n\n### Impact\n\nThis vulnerability allows command injection in the GitHub Actions runner through attacker-controlled issue titles. An attacker may be able to execute arbitrary commands within the context of the affected workflow job.\n\nDepending on the workflow configuration (such as permissions and available secrets), successful exploitation could lead to:\n\n* Unauthorized command execution in the CI environment\n* Misuse of the `GITHUB_TOKEN`\n* Modification of repository state, release artifacts, or other workflow outputs\n\nIf the repository is public and allows untrusted users to create or reopen issues that trigger the workflow, this may be exploitable by external users.\n\nThis issue is limited to the repository\u0027s internal workflow configuration and does not directly affect downstream users of the published `actions-mkdocs` GitHub Action.",
  "id": "GHSA-6p2j-742g-835f",
  "modified": "2026-04-04T06:03:06Z",
  "published": "2026-04-04T06:03:06Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/Tiryoh/actions-mkdocs/security/advisories/GHSA-6p2j-742g-835f"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/Tiryoh/actions-mkdocs"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N",
      "type": "CVSS_V3"
    }
  ],
  "summary": "actions-mkdocs: Command Injection via issue title in internal GitHub Actions workflow"
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…