[SECURITY] Organization Variables Exposed in Plain Text to All Repository Users
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- github-actions, typescript, vscode
- Domínio
- authorization, devtools, security
Direção de pesquisa
Comece com src/treeViews/settings/orgVariablesNode.ts e src/treeViews/settings/variableNode.ts e, em seguida, reproduza a solicitação de variáveis da organização usando uma conta que não seja de administrador. Compare o endpoint e o fluxo de autenticação da extensão com o comportamento documentado de REST, CLI e web. O trabalho estará concluído quando usuários não administradores não puderem visualizar os valores das variáveis da organização e o comportamento corresponder ao modelo de permissões esperado.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
[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-variablescorrectly 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
-
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
- In a GitHub organization:
-
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”
- Install
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:
- Calls the org variables API for the current repo
- Wraps each result in a
VariableNode - 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
- Either:
- 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:
- Confirm the behavior with a non-admin test account?
- Clarify which endpoint + auth flow the extension uses here?
- Align the extension’s behavior with GitHub’s documented and enforced permission model for org variables?
- Linguagem predominante
- TypeScript
- Estrelas
- 661
- Forks
- 214
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de github/vscode-github-actions
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
github/vscode-github-actions#627 · 1 reação ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 20/100
github/vscode-github-actions#630 ·
-
long work Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 25/100
github/vscode-github-actions#628 ·
-
bug
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
github/vscode-github-actions#625 ·
-
bug
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 64/100
github/vscode-github-actions#621 · 3 comentários ·
Todas as issues de github/vscode-github-actions
Issues semelhantes
-
VerificationGate: ATTRIBUTION quote guard never matches a normal quotation (\b around the quote) Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
danielmiessler/LifeOS#2234 ·
-
T: Bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
-
Mend: dependency security vulnerability untriaged
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100