Skip to content
Snippets Groups Projects
  1. Apr 20, 2017
  2. Apr 07, 2017
    • Heikki Linnakangas's avatar
      Use SASLprep to normalize passwords for SCRAM authentication. · 60f11b87
      Heikki Linnakangas authored
      An important step of SASLprep normalization, is to convert the string to
      Unicode normalization form NFKC. Unicode normalization requires a fairly
      large table of character decompositions, which is generated from data
      published by the Unicode consortium. The script to generate the table is
      put in src/common/unicode, as well test code for the normalization.
      A pre-generated version of the tables is included in src/include/common,
      so you don't need the code in src/common/unicode to build PostgreSQL, only
      if you wish to modify the normalization tables.
      
      The SASLprep implementation depends on the UTF-8 functions from
      src/backend/utils/mb/wchar.c. So to use it, you must also compile and link
      that. That doesn't change anything for the current users of these
      functions, the backend and libpq, as they both already link with wchar.o.
      It would be good to move those functions into a separate file in
      src/commmon, but I'll leave that for another day.
      
      No documentation changes included, because there is no details on the
      SCRAM mechanism in the docs anyway. An overview on that in the protocol
      specification would probably be good, even though SCRAM is documented in
      detail in RFC5802. I'll write that as a separate patch. An important thing
      to mention there is that we apply SASLprep even on invalid UTF-8 strings,
      to support other encodings.
      
      Patch by Michael Paquier and me.
      
      Discussion: https://www.postgresql.org/message-id/CAB7nPqSByyEmAVLtEf1KxTRh=PWNKiWKEKQR=e1yGehz=wbymQ@mail.gmail.com
      60f11b87
  3. Mar 07, 2017
    • Heikki Linnakangas's avatar
      Support SCRAM-SHA-256 authentication (RFC 5802 and 7677). · 818fd4a6
      Heikki Linnakangas authored
      This introduces a new generic SASL authentication method, similar to the
      GSS and SSPI methods. The server first tells the client which SASL
      authentication mechanism to use, and then the mechanism-specific SASL
      messages are exchanged in AuthenticationSASLcontinue and PasswordMessage
      messages. Only SCRAM-SHA-256 is supported at the moment, but this allows
      adding more SASL mechanisms in the future, without changing the overall
      protocol.
      
      Support for channel binding, aka SCRAM-SHA-256-PLUS is left for later.
      
      The SASLPrep algorithm, for pre-processing the password, is not yet
      implemented. That could cause trouble, if you use a password with
      non-ASCII characters, and a client library that does implement SASLprep.
      That will hopefully be added later.
      
      Authorization identities, as specified in the SCRAM-SHA-256 specification,
      are ignored. SET SESSION AUTHORIZATION provides more or less the same
      functionality, anyway.
      
      If a user doesn't exist, perform a "mock" authentication, by constructing
      an authentic-looking challenge on the fly. The challenge is derived from
      a new system-wide random value, "mock authentication nonce", which is
      created at initdb, and stored in the control file. We go through these
      motions, in order to not give away the information on whether the user
      exists, to unauthenticated users.
      
      Bumps PG_CONTROL_VERSION, because of the new field in control file.
      
      Patch by Michael Paquier and Heikki Linnakangas, reviewed at different
      stages by Robert Haas, Stephen Frost, David Steele, Aleksander Alekseev,
      and many others.
      
      Discussion: https://www.postgresql.org/message-id/CAB7nPqRbR3GmFYdedCAhzukfKrgBLTLtMvENOmPrVWREsZkF8g%40mail.gmail.com
      Discussion: https://www.postgresql.org/message-id/CAB7nPqSMXU35g%3DW9X74HVeQp0uvgJxvYOuA4A-A3M%2B0wfEBv-w%40mail.gmail.com
      Discussion: https://www.postgresql.org/message-id/55192AFE.6080106@iki.fi
      818fd4a6
  4. May 20, 2015
    • Tom Lane's avatar
      Revert error-throwing wrappers for the printf family of functions. · 0c071936
      Tom Lane authored
      This reverts commit 16304a01, except
      for its changes in src/port/snprintf.c; as well as commit
      cac18a76 which is no longer needed.
      
      Fujii Masao reported that the previous commit caused failures in psql on
      OS X, since if one exits the pager program early while viewing a query
      result, psql sees an EPIPE error from fprintf --- and the wrapper function
      thought that was reason to panic.  (It's a bit surprising that the same
      does not happen on Linux.)  Further discussion among the security list
      concluded that the risk of other such failures was far too great, and
      that the one-size-fits-all approach to error handling embodied in the
      previous patch is unlikely to be workable.
      
      This leaves us again exposed to the possibility of the type of failure
      envisioned in CVE-2015-3166.  However, that failure mode is strictly
      hypothetical at this point: there is no concrete reason to believe that
      an attacker could trigger information disclosure through the supposed
      mechanism.  In the first place, the attack surface is fairly limited,
      since so much of what the backend does with format strings goes through
      stringinfo.c or psprintf(), and those already had adequate defenses.
      In the second place, even granting that an unprivileged attacker could
      control the occurrence of ENOMEM with some precision, it's a stretch to
      believe that he could induce it just where the target buffer contains some
      valuable information.  So we concluded that the risk of non-hypothetical
      problems induced by the patch greatly outweighs the security risks.
      We will therefore revert, and instead undertake closer analysis to
      identify specific calls that may need hardening, rather than attempt a
      universal solution.
      
      We have kept the portion of the previous patch that improved snprintf.c's
      handling of errors when it calls the platform's sprintf().  That seems to
      be an unalloyed improvement.
      
      Security: CVE-2015-3166
      0c071936
  5. May 18, 2015
    • Noah Misch's avatar
      Add error-throwing wrappers for the printf family of functions. · 16304a01
      Noah Misch authored
      All known standard library implementations of these functions can fail
      with ENOMEM.  A caller neglecting to check for failure would experience
      missing output, information exposure, or a crash.  Check return values
      within wrappers and code, currently just snprintf.c, that bypasses the
      wrappers.  The wrappers do not return after an error, so their callers
      need not check.  Back-patch to 9.0 (all supported versions).
      
      Popular free software standard library implementations do take pains to
      bypass malloc() in simple cases, but they risk ENOMEM for floating point
      numbers, positional arguments, large field widths, and large precisions.
      No specification demands such caution, so this commit regards every call
      to a printf family function as a potential threat.
      
      Injecting the wrappers implicitly is a compromise between patch scope
      and design goals.  I would prefer to edit each call site to name a
      wrapper explicitly.  libpq and the ECPG libraries would, ideally, convey
      errors to the caller rather than abort().  All that would be painfully
      invasive for a back-patched security fix, hence this compromise.
      
      Security: CVE-2015-3166
      16304a01
  6. May 08, 2014
  7. Mar 17, 2013
    • Tom Lane's avatar
      Re-include pqsignal() in libpq. · b1fae823
      Tom Lane authored
      We need this in non-ENABLE_THREAD_SAFETY builds, and also to satisfy
      the exports.txt entry; while it might be a good idea to remove the
      latter, I'm hesitant to do so except in the context of an intentional
      ABI break.  At least we don't have a separately maintained source file
      for it anymore.
      b1fae823
  8. Jun 18, 2011
  9. Jun 03, 2011
  10. Apr 19, 2011
  11. Feb 19, 2011
    • Peter Eisentraut's avatar
      Set psql client encoding from locale by default · 02e14562
      Peter Eisentraut authored
      Add a new libpq connection option client_encoding (which includes the
      existing PGCLIENTENCODING environment variable), which besides an
      encoding name accepts a special value "auto" that tries to determine
      the encoding from the locale in the client's environment, using the
      mechanisms that have been in use in initdb.
      
      psql sets this new connection option to "auto" when running from a
      terminal and not overridden by setting PGCLIENTENCODING.
      
      original code by Heikki Linnakangas, with subsequent contributions by
      Jaime Casanova, Peter Eisentraut, Stephen Frost, Ibrar Ahmed
      02e14562
  12. Nov 25, 2010
  13. Sep 23, 2010
    • Tom Lane's avatar
      More fixes for libpq's .gitignore file. · 804b2761
      Tom Lane authored
      The previous patches failed to cover a lot of symlinks that are only
      added in platform-specific cases.  Make the lists match what's in the
      Makefile for each branch.
      804b2761
  14. Sep 22, 2010
Loading