hive-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Karen Coppage (JIRA)" <>
Subject [jira] [Updated] (HIVE-20544) TOpenSessionReq logs password and username
Date Tue, 18 Sep 2018 08:54:02 GMT


Karen Coppage updated HIVE-20544:
    Attachment: non-solution.patch

> TOpenSessionReq logs password and username
> ------------------------------------------
>                 Key: HIVE-20544
>                 URL:
>             Project: Hive
>          Issue Type: Bug
>          Components: Hive
>    Affects Versions: 4.0.0
>            Reporter: Karen Coppage
>            Assignee: Karen Coppage
>            Priority: Major
>              Labels: beginner, patch, security
>         Attachments: HIVE-20544.1.patch, HIVE-20544.patch, non-solution.patch
> In service-rpc/src/gen/thrift/gen-javabean/org/apache/hive/service/rpc/thrift/TOpenSessionReq,
if client protocol is unset, validate() and toString() prints both username and password to
> Logging a password is a security risk. We should hide the *******.
> ===Edit===
> This issue is tricky since it is caused in a fully generated class. I've been playing
around and have found one working solution, butI'd truly appreciate ideas for a more elegant
solution or input.
> The problem:
> TCLIService.thrift is the template for generating all classes in service-rpc. Struct
TOpenSessionReq is OpenSession()'s one parameter and is defined thus:
> {noformat}
> struct TOpenSessionReq {
>   1: required TProtocolVersion client_protocol = TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V10
>   2: optional string username
>   3: optional string password
>   4: optional map<string, string> configuration
> }
> {noformat}
> In the generated class, client_protocol is checked by a validate()
method, which is called quite a few times; if client_protocol is not set, it throws a TProtocolException,
passing along a toString(). This toString() gets the names and values of all fields, including
username and password. 
> Working solution:
> Create a separate struct containing only the username and password, and pass it to OpenSession()
as a second paramater. Since all fields are "optional", the generated validate() is empty
– toString() is never used. This involves changing core classes and breaks the "Each function
should take exactly one parameter" coding convention (at service-rpc/if/TCLIService.thrift:27).
> See working-solution.patch.
> What doesn't work:
> -Making client_protocol optional instead of required. Apparently this will break everything.
> -Overwriting toString() – TOpenSessionReq is a struct.
> -Creating two Thrift structs, one struct for required (TRequiredReq) and one for optional
(TOptionalReq) fields, and nesting them in struct TOpenSessionReq. This doesn't work because
valiate() in TOpenSessionReq can call TOptionalReq.toString(), which prints the password to
logs. This will happen if TRequiredReq.client_protocol isn't set.
> See non-solution.patch
> -Asking Thrift devs to change their code. I wrote them an email but have no expectations.

This message was sent by Atlassian JIRA

View raw message