Title: WebRequestPSCmdlet does not check existence of Location header when Authorization is present · Issue #6543 · PowerShell/PowerShell · GitHub
Open Graph Title: WebRequestPSCmdlet does not check existence of Location header when Authorization is present · Issue #6543 · PowerShell/PowerShell
X Title: WebRequestPSCmdlet does not check existence of Location header when Authorization is present · Issue #6543 · PowerShell/PowerShell
Description: The code introduced in #3885 seems to have introduced a regression bug which was quite hard to identify as the error message points to issues with the URI and not to anything related to redirection. The code introduced in the pull reques...
Open Graph Description: The code introduced in #3885 seems to have introduced a regression bug which was quite hard to identify as the error message points to issues with the URI and not to anything related to redirection...
X Description: The code introduced in #3885 seems to have introduced a regression bug which was quite hard to identify as the error message points to issues with the URI and not to anything related to redirection...
Opengraph URL: https://github.com/PowerShell/PowerShell/issues/6543
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"WebRequestPSCmdlet does not check existence of Location header when Authorization is present","articleBody":"The code introduced in https://github.com/PowerShell/PowerShell/pull/3885 seems to have introduced a regression bug which was quite hard to identify as the error message points to issues with the URI and not to anything related to redirection. [The code introduced in the pull request initializes an URI using the Location Header, without first checking if the Location Header is present in the response of a redirect.](https://github.com/PowerShell/PowerShell/blob/d20d53eaacafd4645ea668bd46e62093d3f3e503/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs#L1310). The [HTTP RFC 7231](https://tools.ietf.org/html/rfc7231#section-6.4) does not specify the Location Header to be mandatory and thus it's existence must be checked.\r\n\r\nI discovered this while checking strange PowerShell errors when issuing a GET or HEAD request against a AWS S3 Bucket while connecting to the wrong region. AWS S3 does respond with HTTP 301 but without a Location header.\r\n\r\nThe issue only occurs if the Server responds with a redirect HTTP Status Code 3XX and without the Location header and if the client has specified the Authorization Header in the initial request.\r\n\r\nThe issue can probably be fixed by modifying [line 1290](https://github.com/PowerShell/PowerShell/blob/d20d53eaacafd4645ea668bd46e62093d3f3e503/src/Microsoft.PowerShell.Commands.Utility/commands/utility/WebCmdlet/Common/WebRequestPSCmdlet.Common.cs#L1290) to `if (stripAuthorization \u0026\u0026 IsRedirectCode(response.StatusCode) \u0026\u0026 response.Headers.Location)`.\r\n\r\nI'd be glad to create a pull request to fix this issue if my analyzis is correct and the proposed change is the correct way to fix the issue.\r\n\r\nActual behavior\r\n---------------\r\n\r\nThe following simple HEAD request demonstrates the unexpected error message:\r\n\r\n```powershell\r\nInvoke-WebRequest -Uri https://s3.amazonaws.com/test-301-redirection/ -Method HEAD -Headers @{Authorization=\"test\"} \r\nInvoke-WebRequest : Value cannot be null.\r\nParameter name: uri\r\nAt line:1 char:1\r\n+ Invoke-WebRequest -Uri https://s3.amazonaws.com/test-301-redirection/ ...\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+ CategoryInfo : NotSpecified: (:) [Invoke-WebRequest], ArgumentNullException\r\n+ FullyQualifiedErrorId : System.ArgumentNullException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand\r\n```\r\n\r\nExpected behavior\r\n-----------------\r\n\r\nThe response should be\r\n\r\n```powershell\r\nInvoke-WebRequest -Uri https://s3.amazonaws.com/test-301-redirection/ -Method HEAD -Headers @{Authorization=\"test\"} \r\nInvoke-WebRequest : Response status code does not indicate success: 301 (Moved Permanently).\r\nAt line:1 char:1\r\n+ Invoke-WebRequest -Uri https://s3.amazonaws.com/test-301-redirection/ ...\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+ CategoryInfo : InvalidOperation: (Method: HEAD, R...rShell/6.0.2\r\n}:HttpRequestMessage) [Invoke-WebRequest], HttpResponseException\r\n+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand\r\n```\r\n\r\nA workaround is, to specify the `PreserveAuthorizationOnRedirect` Parameter which will skip the section introduced in https://github.com/PowerShell/PowerShell/pull/3885 :\r\n\r\n```powershell\r\nInvoke-WebRequest -Uri https://s3.amazonaws.com/test-301-redirection/ -Method HEAD -Headers @{Authorization=\"test\"} -PreserveAuthorizationOnRedirect \r\nInvoke-WebRequest : Response status code does not indicate success: 301 (Moved Permanently).\r\nAt line:1 char:1\r\n+ Invoke-WebRequest -Uri https://s3.amazonaws.com/test-301-redirection/ ...\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+ CategoryInfo : InvalidOperation: (Method: HEAD, R...rShell/6.0.2\r\n}:HttpRequestMessage) [Invoke-WebRequest], HttpResponseException\r\n+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand\r\n```\r\n\r\nEnvironment data\r\n----------------\r\n\r\n```powershell\r\n$PSVersionTable \r\n\r\nName Value \r\n---- ----- \r\nPSVersion 6.0.2 \r\nPSEdition Core \r\nGitCommitId v6.0.2 \r\nOS Darwin 17.4.0 Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64 \r\nPlatform Unix \r\nPSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} \r\nPSRemotingProtocolVersion 2.3 \r\nSerializationVersion 1.1.0.1 \r\nWSManStackVersion 3.0 \r\n```\r\n","author":{"url":"https://github.com/ffeldhaus","@type":"Person","name":"ffeldhaus"},"datePublished":"2018-04-02T17:29:18.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/6543/PowerShell/issues/6543"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:e589f216-53f0-f014-801e-185ff022806c |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 86B4:1702DA:1FAA180:2D8C670:6A565DF0 |
| html-safe-nonce | 3ed1ea41af15bc3a7b144f7fcb6b4923dcf0a35233462072133b7507bb2ef224 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4NkI0OjE3MDJEQToxRkFBMTgwOjJEOEM2NzA6NkE1NjVERjAiLCJ2aXNpdG9yX2lkIjoiMzkwNDgyMzQ3NjYxNjU4NDY4OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | e8cb379764e07eada45f9550cd4686bc0a28404ce32bcf8d6c204221412bdd90 |
| hovercard-subject-tag | issue:310548278 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/PowerShell/PowerShell/6543/issue_layout |
| twitter:image | https://opengraph.githubassets.com/3ad701d22e2b048d4b96e066c1e388837e4c81d3f25ecbad9181fe3509dda65f/PowerShell/PowerShell/issues/6543 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/3ad701d22e2b048d4b96e066c1e388837e4c81d3f25ecbad9181fe3509dda65f/PowerShell/PowerShell/issues/6543 |
| og:image:alt | The code introduced in #3885 seems to have introduced a regression bug which was quite hard to identify as the error message points to issues with the URI and not to anything related to redirection... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | ffeldhaus |
| hostname | github.com |
| expected-hostname | github.com |
| None | 6a3afe34dff341ad10912db44becf282289d7f2af20576241738530fbb28de01 |
| turbo-cache-control | no-preview |
| go-import | github.com/PowerShell/PowerShell git https://github.com/PowerShell/PowerShell.git |
| octolytics-dimension-user_id | 11524380 |
| octolytics-dimension-user_login | PowerShell |
| octolytics-dimension-repository_id | 49609581 |
| octolytics-dimension-repository_nwo | PowerShell/PowerShell |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 49609581 |
| octolytics-dimension-repository_network_root_nwo | PowerShell/PowerShell |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | b71002134df95575e9f6c2945a64d454b0be181e |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width