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:11 +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 9e19916d6d4bd72726d686d2e512fe11ecb468c8..3fabc320554cf837915976d58fa37118d0ddf193 100644 (file)
@@ -6461,6 +6461,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);