Fixing command injection vulnerability in file permission handling#29350
Merged
VeryEarly merged 1 commit intoAzure:mainfrom Apr 8, 2026
Merged
Fixing command injection vulnerability in file permission handling#29350VeryEarly merged 1 commit intoAzure:mainfrom
VeryEarly merged 1 commit intoAzure:mainfrom
Conversation
| Thanks for your contribution! The pull request validation has started. Please revisit this comment for updated status. |
Contributor
There was a problem hiding this comment.
Pull request overview
This PR hardens the Az.Sftp module against command/argument injection by tightening how user-provided values are validated/escaped when launching OpenSSH tools, and by removing external process calls from file-permission handling.
Changes:
- Added command-line argument validation + centralized escaping for
ProcessStartInfo.Argumentsconstruction. - Replaced Windows/Unix permission-setting subprocesses (
powershell.exe/icacls.exe/chmod) with direct ACL APIs and a nativechmodP/Invoke. - Reduced public surface area of internal helper/model types and updated tests + changelog accordingly.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Sftp/Sftp/Sftp.csproj | Adds AccessControl dependency needed for Windows ACL APIs. |
| src/Sftp/Sftp/Properties/AssemblyInfo.cs | Adds assembly attributes + InternalsVisibleTo for test access. |
| src/Sftp/Sftp/Models/SFTPSession.cs | Adds validation before building args; narrows API visibility to internal. |
| src/Sftp/Sftp/Models/SessionConfiguration.cs | Narrows type visibility to internal. |
| src/Sftp/Sftp/Models/RuntimeState.cs | Narrows type visibility to internal. |
| src/Sftp/Sftp/Models/ConnectionInfo.cs | Narrows type visibility to internal. |
| src/Sftp/Sftp/Models/AuthenticationFIles.cs | Narrows type visibility to internal. |
| src/Sftp/Sftp/Common/SftpUtils.cs | Introduces validation + escaping helpers; uses them across process launches. |
| src/Sftp/Sftp/Common/SftpConstants.cs | Narrows type visibility to internal. |
| src/Sftp/Sftp/Common/RSAParser.cs | Narrows type visibility to internal. |
| src/Sftp/Sftp/Common/FileUtils.cs | Replaces permission subprocesses with ACL API / native chmod; validates file paths. |
| src/Sftp/Sftp/CHANGELOG.md | Documents the security fixes for upcoming release notes. |
| src/Sftp/Sftp.Test/ScenarioTests/SftpUtilsTests.cs | Adds unit tests for new validation/escaping behavior. |
8fac27e to
7e45120
Compare
Contributor
Author
|
Hey @VeryEarly , please run the checks once |
Collaborator
|
/azp run |
Contributor
|
Azure Pipelines successfully started running 3 pipeline(s). |
VeryEarly
approved these changes
Apr 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Mandatory Checklist
Please choose the target release of Azure PowerShell. (⚠️ Target release is a different concept from API readiness. Please click below links for details.)
Check this box to confirm: I have read the Submitting Changes section of
CONTRIBUTING.mdand reviewed the following information:ChangeLog.mdfile(s) appropriatelysrc/{{SERVICE}}/{{SERVICE}}/ChangeLog.md.## Upcoming Releaseheader in the past tense.ChangeLog.mdif no new release is required, such as fixing test case only.