mirror of
https://github.com/postgres/postgres.git
synced 2025-07-23 03:21:12 +03:00
Secure Unix-domain sockets of "make check" temporary clusters.
Any OS user able to access the socket can connect as the bootstrap superuser and proceed to execute arbitrary code as the OS user running the test. Protect against that by placing the socket in a temporary, mode-0700 subdirectory of /tmp. The pg_regress-based test suites and the pg_upgrade test suite were vulnerable; the $(prove_check)-based test suites were already secure. Back-patch to 8.4 (all supported versions). The hazard remains wherever the temporary cluster accepts TCP connections, notably on Windows. As a convenient side effect, this lets testing proceed smoothly in builds that override DEFAULT_PGSOCKET_DIR. Popular non-default values like /var/run/postgresql are often unwritable to the build user. Security: CVE-2014-0067
This commit is contained in:
@ -17,15 +17,43 @@ set -e
|
||||
unset MAKEFLAGS
|
||||
unset MAKELEVEL
|
||||
|
||||
# Set listen_addresses desirably
|
||||
# Establish how the server will listen for connections
|
||||
testhost=`uname -s`
|
||||
|
||||
case $testhost in
|
||||
MINGW*) LISTEN_ADDRESSES="localhost" ;;
|
||||
*) LISTEN_ADDRESSES="" ;;
|
||||
MINGW*)
|
||||
LISTEN_ADDRESSES="localhost"
|
||||
PGHOST=""; unset PGHOST
|
||||
;;
|
||||
*)
|
||||
LISTEN_ADDRESSES=""
|
||||
# Select a socket directory. The algorithm is from the "configure"
|
||||
# script; the outcome mimics pg_regress.c:make_temp_sockdir().
|
||||
PGHOST=$PG_REGRESS_SOCK_DIR
|
||||
if [ "x$PGHOST" = x ]; then
|
||||
{
|
||||
dir=`(umask 077 &&
|
||||
mktemp -d /tmp/pg_upgrade_check-XXXXXX) 2>/dev/null` &&
|
||||
[ -d "$dir" ]
|
||||
} ||
|
||||
{
|
||||
dir=/tmp/pg_upgrade_check-$$-$RANDOM
|
||||
(umask 077 && mkdir "$dir")
|
||||
} ||
|
||||
{
|
||||
echo "could not create socket temporary directory in \"/tmp\""
|
||||
exit 1
|
||||
}
|
||||
|
||||
PGHOST=$dir
|
||||
trap 'rm -rf "$PGHOST"' 0
|
||||
trap 'exit 3' 1 2 13 15
|
||||
fi
|
||||
export PGHOST
|
||||
;;
|
||||
esac
|
||||
|
||||
POSTMASTER_OPTS="-F -c listen_addresses=$LISTEN_ADDRESSES"
|
||||
POSTMASTER_OPTS="-F -c listen_addresses=$LISTEN_ADDRESSES -k \"$PGHOST\""
|
||||
|
||||
temp_root=$PWD/tmp_check
|
||||
|
||||
@ -86,7 +114,6 @@ PGSERVICE=""; unset PGSERVICE
|
||||
PGSSLMODE=""; unset PGSSLMODE
|
||||
PGREQUIRESSL=""; unset PGREQUIRESSL
|
||||
PGCONNECT_TIMEOUT=""; unset PGCONNECT_TIMEOUT
|
||||
PGHOST=""; unset PGHOST
|
||||
PGHOSTADDR=""; unset PGHOSTADDR
|
||||
|
||||
# Select a non-conflicting port number, similarly to pg_regress.c
|
||||
|
Reference in New Issue
Block a user