Force certain "pljava" custom GUCs to be PGC_SUSET.
authorNoah Misch <noah@leadboat.com>
Sat, 6 Feb 2016 01:22:51 +0000 (20:22 -0500)
committerNoah Misch <noah@leadboat.com>
Sat, 6 Feb 2016 01:23:07 +0000 (20:23 -0500)
Future PL/Java versions will close CVE-2016-0766 by making these GUCs
PGC_SUSET.  This PostgreSQL change independently mitigates that PL/Java
vulnerability, helping sites that update PostgreSQL more frequently than
PL/Java.  Back-patch to 9.1 (all supported versions).

src/backend/utils/misc/guc.c

index 406e859ca2de6b926b41f62b777b49786afe0004..14d016d29a7fa995cc1f398f1dc52caf5f20fd8a 100644 (file)
@@ -7076,6 +7076,17 @@ init_custom_variable(const char *name,
        !process_shared_preload_libraries_in_progress)
        elog(FATAL, "cannot create PGC_POSTMASTER variables after startup");
 
+   /*
+    * Before pljava commit 398f3b876ed402bdaec8bc804f29e2be95c75139
+    * (2015-12-15), two of that module's PGC_USERSET variables facilitated
+    * trivial escalation to superuser privileges.  Restrict the variables to
+    * protect sites that have yet to upgrade pljava.
+    */
+   if (context == PGC_USERSET &&
+       (strcmp(name, "pljava.classpath") == 0 ||
+        strcmp(name, "pljava.vmoptions") == 0))
+       context = PGC_SUSET;
+
    gen = (struct config_generic *) guc_malloc(ERROR, sz);
    memset(gen, 0, sz);