Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

[SECURITY] Organization Variables Exposed in Plain Text to All Repository Users

未关闭
#529 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
github-actions, typescript, vscode

调研方向

从 src/treeViews/settings/orgVariablesNode.ts 和 src/treeViews/settings/variableNode.ts 开始,然后使用非管理员账户重现组织变量请求。将扩展的 endpoint 和 auth flow 与 REST、CLI 和 web 的文档化行为进行比较。当非管理员用户无法查看组织变量值,并且行为符合预期的权限模型时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

bug

[SECURITY] VS Code GitHub Actions extension exposes organization variables to non-admin users

Summary

The GitHub Actions extension for VS Code exposes organization-level Actions variable values (names + values) to non-admin users via the “Settings → Variables → Organization Variables” view.

This is a privilege escalation:

  • GitHub Web UI correctly blocks non-admins from viewing org variables
  • gh api repos/{owner}/{repo}/actions/organization-variables correctly fails for non-admins
  • Direct REST calls with a non-admin token also fail
  • But the VS Code extension shows the full values to the same non-admin users

Impact

Severity: Critical – privilege escalation & credential disclosure

For any repo where org variables are shared:

  • Non-admin users with only read access to the repo can see:
    • All shared org variable names
    • Their plain-text values in the VS Code sidebar
  • In our case this exposed (now rotated and moved to Secrets):
    • GITLAB_API_TOKEN (full access to GitLab Package Registry)
    • GITLAB_API_READ_TOKEN
    • Multiple third‑party service passwords

How to Reproduce

  1. Setup

    • In a GitHub organization:
      • Create organization-level Actions variables with sensitive values
      • Share them with a repository
    • Add a non-admin user with read access to that repository
  2. As the non-admin user

    • Confirm that the org variables are not visible elsewhere:

      • Web: Org Settings → Actions → Variables → access denied

      • CLI:

        gh api repos/{owner}/{repo}/actions/organization-variables
        # => “Must have admin rights to Repository”
        
    • In VS Code:

      • Install github.vscode-github-actions
      • Open the repo
      • Open “GitHub Actions” view → “Settings” → “Variables” → “Organization Variables”

    Observed: All organization variables and their values appear in plain text.

Suspected Source

From the public repo:

  • src/treeViews/settings/orgVariablesNode.ts:

    variables = await this.gitHubRepoContext.client.paginate(
      "GET /repos/{owner}/{repo}/actions/organization-variables",
      { owner: this.gitHubRepoContext.owner, repo: this.gitHubRepoContext.name, per_page: 100 }
    );
    return variables.map(v => new VariableNode(this.gitHubRepoContext, v, undefined, true));
    
  • src/treeViews/settings/variableNode.ts:

    export class VariableNode extends vscode.TreeItem {
      constructor(/* ... */, public readonly variable: OrgVariable, /* ... */) {
        super(variable.name);
        this.description = variable.value; // shown directly in tree view
      }
    }
    

So the extension:

  1. Calls the org variables API for the current repo
  2. Wraps each result in a VariableNode
  3. Sets description = variable.value, which is rendered in the tree view

The critical question: why does this succeed for non-admin users when the same endpoint fails via gh api and curl?

Expected Behavior

  • For non-admins:
    • Either:
      • Do not show “Organization Variables” at all, or
      • Show only names, with values masked / hidden
  • Enforce the same permission checks as:
    • GitHub Web UI
    • GitHub CLI
    • Direct REST calls

Mitigations (for other users)

Until fixed, organizations should:

  • Rotate any secrets stored in organization variables that may have been exposed
  • Move sensitive values to GitHub Secrets
  • Avoid using this extension, or at least hide “Settings → Variables” from non-admins

Request

Can the team:

  1. Confirm the behavior with a non-admin test account?
  2. Clarify which endpoint + auth flow the extension uses here?
  3. Align the extension’s behavior with GitHub’s documented and enforced permission model for org variables?
主要语言
TypeScript
星标
661
派生
214
PR 合并指标
30 天内没有已合并 PR

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

github/vscode-github-actions 的其他 Issue

查看 github/vscode-github-actions 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。