actions / actions/toolkit

exec.exec leaks action input parameters to subprocess

Open
#309 9 comments 7 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug exec next major version
Dominant language
TypeScript
Stars
5.9k
Forks
1.8k
PR merge metrics
No merged PRs in 30d

Description

Describe the bug
As input parameters are passed to the action as environment variables, and exec() reuses the action's environment by default, this means the input parameters will probably be visible to the subprocess. If any secrets are being passed via parameters, they will be visible too.

To Reproduce
Steps to reproduce the behavior:

  1. Write a JS action that takes a parameter named foo
  2. Have the action make a call like await exec.exec('sh', ['-c', 'echo foo==$INPUT_FOO'])
  3. Use action in a workflow that sets a value for the input parameter

Expected behavior
I would expect exec.exec() to strip input parameters from the environment used to run the subprocess by default. If there are cases where it is desirable to pass input parameters to the subprocess, this feels like it should be opt-in.
Add any other context about the problem here.

Additional context
While writing an action that took a login token for an online service as an input parameter, I was trying to be careful not to leak the secret: some commands I need to run have the secret passed via command line, and others don't need it. In retrospect it seems obvious that the secrets would be visible to all subprocesses through the environment variables, but it wasn't obvious from the toolkit documentation.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No file or test is named; begin by locating the TypeScript implementation of exec.exec and reproduce the reported sh -c example with INPUT_FOO set. Done means subprocesses no longer receive action input environment variables by default, with any intentional pass-through explicitly opt-in and covered by regression tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, typescript
Domain
devtools, security
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.