[ 
https://issues.apache.org/jira/browse/KNOX-3037?focusedWorklogId=918314&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-918314
 ]

ASF GitHub Bot logged work on KNOX-3037:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 08/May/24 13:24
            Start Date: 08/May/24 13:24
    Worklog Time Spent: 10m 
      Work Description: smolnar82 opened a new pull request, #906:
URL: https://github.com/apache/knox/pull/906

   ## What changes were proposed in this pull request?
   
   As described in the [corresponding 
JIRA](https://issues.apache.org/jira/browse/KNOX-3037), Knox no longer accepts 
the `grant_type` and `client_secret` as query parameters. Instead, they should 
be passed in the request body.
   
   For reviewers: I'm not satisfied with the `WARN` message I added in case the 
client secret is passed as a query param.  I'm hoping for a better sentence 
from someone :)
   
   ## How was this patch tested?
   
   Added JUnit tests and conducted manual testing:
   
   1. Using the request body:
   ```
   $ curl -ik -X GET -H "Content-Type: application/x-www-form-urlencoded" 
--data "grant_type=client_credentials" --data "client_id=$CLIENT_ID" 
--data-urlencode "client_secret=$CLIENT_SECRET" 
https://localhost:8443/gateway/tokenbased/oauth/v1/token
   HTTP/1.1 200 OK
   Date: Wed, 08 May 2024 11:19:06 GMT
   Content-Type: application/json
   Content-Length: 1061
   
   
{"access_token":"eyJqa3UiOiJodHRwczpcL1wvbG9jYWxob3N0Ojg0NDNcL2dhdGV3YXlcL3Rva2VuYmFzZWRcL29hdXRoXC92MVwvandrcy5qc29uIiwia2lkIjoiQ2t3dkZFY1VBbkpUbGtyWWhjazk1RHdIYU5GeGkzdER4S2JxQ2VTWE8yOCIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJhZG1pbiIsImprdSI6Imh0dHBzOlwvXC9sb2NhbGhvc3Q6ODQ0M1wvZ2F0ZXdheVwvdG9rZW5iYXNlZFwvb2F1dGhcL3YxXC9qd2tzLmpzb24iLCJraWQiOiJDa3d2RkVjVUFuSlRsa3JZaGNrOTVEd0hhTkZ4aTN0RHhLYnFDZVNYTzI4IiwiaXNzIjoiS05PWFNTTyIsImV4cCI6MTAzNjgsIm1hbmFnZWQudG9rZW4iOiJ0cnVlIiwia25veC5pZCI6ImNlNzA2MDZlLTk1OWQtNDQ5NC1hOWFiLWU3OGEyY2IwYzQ4YyJ9.fVa9Uy2UwXzl-kTJcVCaSBpXpUbs9pK5GZyU3BjyZPkkqAruo-eGJIHnkP8TP5bbiGQh2eNjKiaIUd32apXt-164IcwU3QSg7f95pYCC6XCY8g5Lcsk3rFfs-o55oaV8Uo21CJ4N762taC2sC8xKUXDWaOxttcc2uIufy_VBebCR1S2itlCgGREqL-amxeUtKs3_UQ-7ZcBTxDLO_iC5T1tlFSqdQuvW0puWTsjc8iUQ19WgvDiMqOO2MBt9aE96fUNZN41h9Vy3Y6eNWuQVv_qptRgi_Ib8G76ktjMB_PGcft4M9FuUwLyofbAKWqVVsDKUlcWoBakJ5cfRjzpK3Q","refresh_token":"b8987378-b016-4a78-99d8-5b73fcf59449","issued_token_type":"urn:ietf:params:oauth:token-type:access_token","token_type":"Bearer","expires_in":10368000}
   ```
   
   2. Using query params (achieved by adding the `-G` option in the `curl` 
command:
   ```
   $ curl -G -ik -X GET -H "Content-Type: application/x-www-form-urlencoded" 
--data "grant_type=client_credentials" --data "client_id=$CLIENT_ID" 
--data-urlencode "client_secret=$CLIENT_SECRET" 
https://localhost:8443/gateway/tokenbased/oauth/v1/token
   HTTP/1.1 401 Unauthorized
   Cache-Control: must-revalidate,no-cache,no-store
   Content-Type: text/html;charset=iso-8859-1
   Content-Length: 429
   
   <html>
   <head>
   <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
   <title>Error 401 Unauthorized</title>
   </head>
   <body><h2>HTTP ERROR 401 Unauthorized</h2>
   <table>
   <tr><th>URI:</th><td>/gateway/tokenbased/oauth/v1/token</td></tr>
   <tr><th>STATUS:</th><td>401</td></tr>
   <tr><th>MESSAGE:</th><td>Unauthorized</td></tr>
   <tr><th>SERVLET:</th><td>tokenbased-knox-gateway-servlet</td></tr>
   </table>
   
   </body>
   </html>
   ```
   Relevant gateway.log:
   ```
   2024-05-08 13:19:15,474 e63dfff7-f444-449a-9e11-69a742a89ba1 WARN  
federation.jwt (JWTFederationFilter.java:parseFromClientCredentialsFlow(276)) - 
Client secret passed as a query parameter and exposed in the logs.
   2024-05-08 13:19:15,474 e63dfff7-f444-449a-9e11-69a742a89ba1 INFO  
federation.jwt (JWTFederationFilter.java:doFilter(223)) - Missing token: null
   ```




Issue Time Tracking
-------------------

            Worklog Id:     (was: 918314)
    Remaining Estimate: 0h
            Time Spent: 10m

> Exposed client secret in gateway-audit.log
> ------------------------------------------
>
>                 Key: KNOX-3037
>                 URL: https://issues.apache.org/jira/browse/KNOX-3037
>             Project: Apache Knox
>          Issue Type: Bug
>            Reporter: Sandor Molnar
>            Priority: Critical
>             Fix For: 2.1.0
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> KNOX-3016 added the ability to support OAuth client credentials flow in Knox. 
> However, the current implementation expects those new parameters to be added 
> as query parameters. This approach can lead to a serious security issue 
> because it means the client secret would be logged in gateway-audit.log.
> In the scope of this item, we should update the existing implementation to 
> accept the grant type and client secret parameters in the request body only.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to