Re: PATCH: warn about, and deprecate, clear text passwords

From: Guillaume Lelarge <guillaume(dot)lelarge(at)dalibo(dot)com>
To: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: PATCH: warn about, and deprecate, clear text passwords
Date: 2025-02-22 12:53:08
Message-ID: 99ba5653-b234-48b4-9bc5-4d2fad13eac4@dalibo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 22/02/2025 09:07, Guillaume Lelarge wrote:
> On 21/02/2025 23:33, Greg Sabino Mullane wrote:
>> There have been a few complaints lately about the fact that we
>> cavalierly allow clear text passwords to be sent when doing CREATE
>> USER or ALTER USER. These, of course, can end up in many places, such
>> as pg_stat_activity, pg_stat_statements, .psql_history, and the server
>> logs. It is a genuinely valid complaint, and for security purposes,
>> there is little recourse other than telling users "don't do that". The
>> canonical recommendation is to use psql's awesome \password feature.
>> Second best is to use your application/driver of choice, which
>> hopefully has support for not sending passwords in the clear.
>>
>> Please find attached a patch to implement a new GUC called
>> cleartext_passwords_action as an attempt to solve these problems. It
>> is an enum and accepts one of three values:
>>
>> 1. "warn" (the new default)
>>
>> This issues a warning if a clear text password is used, but allows the
>> change to proceed. The hint can change to recommend \password if the
>> current application_name is 'psql'. By keeping this as a warning, we
>> let people know this is a bad idea, and give people time to modify
>> their applications.
>>
>> Examples:
>>
>> ALTER USER alice PASSWORD 'mynewpass';
>> WARNING:  using a clear text password
>> DETAIL:  Sending a password using plain text is deprecated and may be
>> removed in a future release of PostgreSQL.
>> HINT:  Use a client that can change the password without sending it in
>> clear text
>>
>> ALTER USER eve PASSWORD 'anothernewpass';
>> WARNING:  using a clear text password
>> DETAIL:  Sending a password using plain text is deprecated and may be
>> removed in a future release of PostgreSQL.
>> HINT:  If using psql, you can set the password with \password
>>
>> 2. "allow"
>> This does nothing, and thus emulates the historical behavior.
>>
>> 3. "disallow"
>> This prevents the use of plain old text completely, by throwing an
>> error if a password set or change is attempted. So people who want to
>> prevent clear text can do so right away, and at some point we can make
>> this the default (and people can always change to hint or allow if
>> desired)
>>
>> Bike shedding welcome. I realize the irony that 'disallow' means valid
>> attempts will now show up in the database logs that otherwise would
>> not, but I'm not sure how to work around that (or if we should).
>>
>
> I'm obviously +1 on this patch since I sent kinda the same patch two
> weeks ago (https://www.postgresql.org/message-
> id/8f17493f-0886-406d-8573-0fadcb998b1d%40dalibo.co). The only major
> difference is that your patch can completely disable plain text
> passwords. More options, that sounds better to me.
>

It applies cleanly, compiles without errors or even warnings.

I did some tests, and I only found one small issue:

set password_encryption to 'md5';
create user u4 password 'md5u1';

WARNING: using a clear text password
DETAIL: Sending a password using plain text is deprecated and may be
removed in a future release of PostgreSQL.
HINT: If using psql, you can set the password with \password
WARNING: setting an MD5-encrypted password
DETAIL: MD5 password support is deprecated and will be removed in a
future release of PostgreSQL.
HINT: Refer to the PostgreSQL documentation for details about migrating
to another password type.
CREATE ROLE

It complains that I'm using a plain text password and a MD5-encrypted
password. Can't be both. (Probably not an issue with this patch, but
rather an issue with the commit that implemented MD5-password warnings.)

If I use a real md5 password, it only complains about MD5 encrypted
password:

create user u5 password 'md58026a39c502750413402a90d9d8bae3c';

WARNING: setting an MD5-encrypted password
DETAIL: MD5 password support is deprecated and will be removed in a
future release of PostgreSQL.
HINT: Refer to the PostgreSQL documentation for details about migrating
to another password type.
CREATE ROLE

Other tests were successful.

Thanks Greg!

--
Guillaume Lelarge
Consultant
https://dalibo.com

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message jian he 2025-02-22 14:17:18 Re: Non-text mode for pg_dumpall
Previous Message Zharkov Roman 2025-02-22 11:33:18 Re: TAP test started using meson, can get a tcp port already used by another test.