microsoft / microsoft/Extension-UtilitiesPack
Shell++ task relies on `/tmp` for temporary storage of script to execute.
Nobody has claimed this yet.
- Dominant language
- PowerShell
- Stars
- 6
- Forks
- 4
- PR merge metrics
- No merged PRs in 30d
Description
There is a small security risk here, where people can overwrite the file since it's in a shared, well known, location. In the Azure-DevOps-Extension-Tasks we switched to using the tmp package to generate a unique path name and used the Agent's temp directory instead of /tmp as a better, more secure location. As part of creating the temporary file, we also stripped its permissions.
function writeBuildTempFile(taskName: string, data: any): string {
const tempDir = tl.getVariable("Agent.TempDirectory");
const tempFile = tmp.tmpNameSync({ prefix: taskName, postfix: ".tmp", tmpdir: tempDir });
tl.debug(`Generating Build temp file: ${tempFile}`);
tl.writeFile(tempFile, data, { mode: 0o600, encoding: "utf8", flag: "wx+" });
return tempFile;
}
And made sure to delete the file after execution:
async function deleteBuildTempFile(tempFile: string) {
if (tempFile && tl.exist(tempFile)) {
tl.debug(`Deleting temp file: ${tempFile}`);
await fs.unlink(tempFile);
}
}
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No source file or test is named. Locate the Shell++ task code that writes the script to /tmp, then inspect how the Agent.TempDirectory and temporary-file creation are handled. Done means using a unique agent-scoped file with restrictive permissions and removing it after execution, with tests covering creation and cleanup.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- devops, security
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100