Three new ruby releases today to fix CVE-2015-7551: Unsafe tainted
string usage in Fiddle and DL. Details at
https://www.ruby-lang.org/en/news/2015/12/16/unsafe-tainted-string-usage-in-fiddle-and-dl-cve-2015-7551/

Ruby 2.0.0 is out of general support, so the only patch included is the
security patch.  There are a few other improvements to Ruby 2.1 and 2.2
that have been backported from trunk.  Both Ruby 2.1.8 and 2.2.4 include
a new non-static function in the shared lib, so I'm bumping the lib
minor on both to be safe.  Both Ruby 2.1 and 2.2 include one of our local
patches, so a couple patch files can be dropped for each.

I've backported a fix for DL to ruby 1.8, and manually tested it to make
sure it works.  Fiddle wasn't added to ruby until 1.9, so we don't need
to worry about that.

This vulnerability is not likely to affect many projects. It's a rare ruby
project that uses taint checking/$SAFE >= 0, and DL/Fiddle use is not
that common either, so I'm guessing the combination is quite rare.

Tested on amd64, compiles on i386.  Will be committing in a couple days
unless I hear objections.

Thanks,
Jeremy

Index: 1.8/Makefile
===================================================================
RCS file: /cvs/ports/lang/ruby/1.8/Makefile,v
retrieving revision 1.36
diff -u -p -r1.36 Makefile
--- 1.8/Makefile        15 Apr 2015 21:58:16 -0000      1.36
+++ 1.8/Makefile        16 Dec 2015 17:13:04 -0000
@@ -20,7 +20,7 @@ PKGNAME-ri_docs=      ruby-ri_docs-${VERSION}
 PKG_ARCH-ri_docs=      *
 PKGSPEC-main=          ruby->=1.8,<1.9
 
-REVISION-main=         4
+REVISION-main=         5
 REVISION-ri_docs=      0
 
 CONFIGURE_ARGS=                --program-suffix=18 \
Index: 1.8/patches/patch-ext_dl_handle_c
===================================================================
RCS file: 1.8/patches/patch-ext_dl_handle_c
diff -N 1.8/patches/patch-ext_dl_handle_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 1.8/patches/patch-ext_dl_handle_c   16 Dec 2015 17:12:54 -0000
@@ -0,0 +1,29 @@
+$OpenBSD$
+
+Backport fix for CVE-2009-5147 and CVE-2015-7551 from r23405.
+
+--- ext/dl/handle.c.orig       Wed Dec 16 09:07:34 2015
++++ ext/dl/handle.c    Wed Dec 16 09:11:33 2015
+@@ -5,6 +5,8 @@
+ #include <ruby.h>
+ #include "dl.h"
+ 
++#define SafeStringValuePtr(v) (rb_string_value(&v), rb_check_safe_obj(v), 
RSTRING_PTR(v))
++
+ VALUE rb_cDLHandle;
+ 
+ void
+@@ -52,11 +54,11 @@ rb_dlhandle_initialize(int argc, VALUE argv[], VALUE s
+ 
+   switch (rb_scan_args(argc, argv, "11", &lib, &flag)) {
+   case 1:
+-    clib = NIL_P(lib) ? NULL : StringValuePtr(lib);
++    clib = NIL_P(lib) ? NULL : SafeStringValuePtr(lib);
+     cflag = RTLD_LAZY | RTLD_GLOBAL;
+     break;
+   case 2:
+-    clib = NIL_P(lib) ? NULL : StringValuePtr(lib);
++    clib = NIL_P(lib) ? NULL : SafeStringValuePtr(lib);
+     cflag = NUM2INT(flag);
+     break;
+   default:
Index: 2.0/Makefile
===================================================================
RCS file: /cvs/ports/lang/ruby/2.0/Makefile,v
retrieving revision 1.23
diff -u -p -r1.23 Makefile
--- 2.0/Makefile        22 Aug 2015 15:13:05 -0000      1.23
+++ 2.0/Makefile        16 Dec 2015 16:37:19 -0000
@@ -6,7 +6,7 @@ COMMENT-tk =            tk interface for ruby
 COMMENT-ri_docs =      ri documentation files for ruby
 
 VERSION =              2.0.0
-PATCHLEVEL =           647
+PATCHLEVEL =           648
 RUBYLIBREV =           2.0
 DISTNAME =             ruby-${VERSION}-p${PATCHLEVEL}
 
Index: 2.0/distinfo
===================================================================
RCS file: /cvs/ports/lang/ruby/2.0/distinfo,v
retrieving revision 1.12
diff -u -p -r1.12 distinfo
--- 2.0/distinfo        22 Aug 2015 15:13:05 -0000      1.12
+++ 2.0/distinfo        16 Dec 2015 16:38:28 -0000
@@ -1,2 +1,2 @@
-SHA256 (ruby-2.0.0-p647.tar.gz) = yIqvW07HLiy30pD/hU8E0TWTn2E09RcAKp1l1fxeW+w=
-SIZE (ruby-2.0.0-p647.tar.gz) = 13621258
+SHA256 (ruby-2.0.0-p648.tar.gz) = hpC9a0lJwzOzkZdVxOSIhdv+1v0FX+nviZML3g0jdvg=
+SIZE (ruby-2.0.0-p648.tar.gz) = 13622628
Index: 2.1/Makefile
===================================================================
RCS file: /cvs/ports/lang/ruby/2.1/Makefile,v
retrieving revision 1.16
diff -u -p -r1.16 Makefile
--- 2.1/Makefile        22 Aug 2015 15:13:41 -0000      1.16
+++ 2.1/Makefile        16 Dec 2015 16:45:52 -0000
@@ -7,11 +7,11 @@ COMMENT-gdbm =                gdbm interface for ruby
 COMMENT-tk =           tk interface for ruby
 COMMENT-ri_docs =      ri documentation files for ruby
 
-VERSION =              2.1.7
+VERSION =              2.1.8
 RUBYLIBREV =           2.1
 DISTNAME =             ruby-${VERSION}
 
-SHARED_LIBS =          ruby21  1.1
+SHARED_LIBS =          ruby21  1.2
 PKGNAME-main =         ruby-${VERSION}
 PKGNAME-gdbm =         ruby21-gdbm-${VERSION}
 PKGNAME-tk =           ruby21-tk-${VERSION}
Index: 2.1/distinfo
===================================================================
RCS file: /cvs/ports/lang/ruby/2.1/distinfo,v
retrieving revision 1.8
diff -u -p -r1.8 distinfo
--- 2.1/distinfo        22 Aug 2015 15:13:41 -0000      1.8
+++ 2.1/distinfo        16 Dec 2015 16:46:52 -0000
@@ -1,2 +1,2 @@
-SHA256 (ruby-2.1.7.tar.gz) = 9ZwVlqw5zH5gEm59NpjBn0gvBAYGdP3+ASThdSum3YE=
-SIZE (ruby-2.1.7.tar.gz) = 15151458
+SHA256 (ruby-2.1.8.tar.gz) = r9gyuNXssuPhR37GqUCP35iY7nPkxd8XorLLNr0cNV0=
+SIZE (ruby-2.1.8.tar.gz) = 15154017
Index: 2.1/patches/patch-ext_openssl_extconf_rb
===================================================================
RCS file: 2.1/patches/patch-ext_openssl_extconf_rb
diff -N 2.1/patches/patch-ext_openssl_extconf_rb
--- 2.1/patches/patch-ext_openssl_extconf_rb    27 Aug 2015 15:55:04 -0000      
1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,13 +0,0 @@
-$OpenBSD: patch-ext_openssl_extconf_rb,v 1.1 2015/08/27 15:55:04 kili Exp $
---- ext/openssl/extconf.rb.orig        Mon Oct 28 07:32:24 2013
-+++ ext/openssl/extconf.rb     Thu Aug 27 17:21:59 2015
-@@ -103,6 +103,9 @@ have_func("OPENSSL_cleanse")
- have_func("SSLv2_method")
- have_func("SSLv2_server_method")
- have_func("SSLv2_client_method")
-+have_func("SSLv3_method")
-+have_func("SSLv3_server_method")
-+have_func("SSLv3_client_method")
- have_func("TLSv1_1_method")
- have_func("TLSv1_1_server_method")
- have_func("TLSv1_1_client_method")
Index: 2.1/patches/patch-ext_openssl_ossl_ssl_c
===================================================================
RCS file: 2.1/patches/patch-ext_openssl_ossl_ssl_c
diff -N 2.1/patches/patch-ext_openssl_ossl_ssl_c
--- 2.1/patches/patch-ext_openssl_ossl_ssl_c    27 Aug 2015 15:55:04 -0000      
1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,16 +0,0 @@
-$OpenBSD: patch-ext_openssl_ossl_ssl_c,v 1.1 2015/08/27 15:55:04 kili Exp $
---- ext/openssl/ossl_ssl.c.orig        Mon Jan 27 08:47:11 2014
-+++ ext/openssl/ossl_ssl.c     Thu Aug 27 17:22:10 2015
-@@ -134,9 +134,12 @@ struct {
-     OSSL_SSL_METHOD_ENTRY(SSLv2_server),
-     OSSL_SSL_METHOD_ENTRY(SSLv2_client),
- #endif
-+#if defined(HAVE_SSLV3_METHOD) && defined(HAVE_SSLV3_SERVER_METHOD) && \
-+        defined(HAVE_SSLV3_CLIENT_METHOD)
-     OSSL_SSL_METHOD_ENTRY(SSLv3),
-     OSSL_SSL_METHOD_ENTRY(SSLv3_server),
-     OSSL_SSL_METHOD_ENTRY(SSLv3_client),
-+#endif
-     OSSL_SSL_METHOD_ENTRY(SSLv23),
-     OSSL_SSL_METHOD_ENTRY(SSLv23_server),
-     OSSL_SSL_METHOD_ENTRY(SSLv23_client),
Index: 2.2/Makefile
===================================================================
RCS file: /cvs/ports/lang/ruby/2.2/Makefile,v
retrieving revision 1.7
diff -u -p -r1.7 Makefile
--- 2.2/Makefile        4 Dec 2015 20:47:53 -0000       1.7
+++ 2.2/Makefile        16 Dec 2015 17:28:53 -0000
@@ -8,11 +8,11 @@ COMMENT-gdbm =                gdbm interface for ruby
 COMMENT-tk =           tk interface for ruby
 COMMENT-ri_docs =      ri documentation files for ruby
 
-VERSION =              2.2.3
+VERSION =              2.2.4
 RUBYLIBREV =           2.2
 DISTNAME =             ruby-${VERSION}
 
-SHARED_LIBS =          ruby22  1.0
+SHARED_LIBS =          ruby22  1.1
 PKGNAME-main =         ruby-${VERSION}
 PKGNAME-gdbm =         ruby22-gdbm-${VERSION}
 PKGNAME-tk =           ruby22-tk-${VERSION}
Index: 2.2/distinfo
===================================================================
RCS file: /cvs/ports/lang/ruby/2.2/distinfo,v
retrieving revision 1.4
diff -u -p -r1.4 distinfo
--- 2.2/distinfo        22 Aug 2015 15:14:14 -0000      1.4
+++ 2.2/distinfo        16 Dec 2015 16:57:21 -0000
@@ -1,2 +1,2 @@
-SHA256 (ruby-2.2.3.tar.gz) = 33lfL5mGB0WkFgkqQASwFsz3fouC3slWsSDxi9xx7c4=
-SIZE (ruby-2.2.3.tar.gz) = 16626772
+SHA256 (ruby-2.2.4.tar.gz) = tu/1aLSOD9p25aNjMxdd8EmyBOkSF6oyplFTzAzct2E=
+SIZE (ruby-2.2.4.tar.gz) = 16638151
Index: 2.2/patches/patch-ext_openssl_extconf_rb
===================================================================
RCS file: 2.2/patches/patch-ext_openssl_extconf_rb
diff -N 2.2/patches/patch-ext_openssl_extconf_rb
--- 2.2/patches/patch-ext_openssl_extconf_rb    27 Aug 2015 15:55:04 -0000      
1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,13 +0,0 @@
-$OpenBSD: patch-ext_openssl_extconf_rb,v 1.1 2015/08/27 15:55:04 kili Exp $
---- ext/openssl/extconf.rb.orig        Mon Oct 28 07:32:24 2013
-+++ ext/openssl/extconf.rb     Thu Aug 27 15:41:31 2015
-@@ -103,6 +103,9 @@ have_func("OPENSSL_cleanse")
- have_func("SSLv2_method")
- have_func("SSLv2_server_method")
- have_func("SSLv2_client_method")
-+have_func("SSLv3_method")
-+have_func("SSLv3_server_method")
-+have_func("SSLv3_client_method")
- have_func("TLSv1_1_method")
- have_func("TLSv1_1_server_method")
- have_func("TLSv1_1_client_method")
Index: 2.2/patches/patch-ext_openssl_ossl_ssl_c
===================================================================
RCS file: 2.2/patches/patch-ext_openssl_ossl_ssl_c
diff -N 2.2/patches/patch-ext_openssl_ossl_ssl_c
--- 2.2/patches/patch-ext_openssl_ossl_ssl_c    27 Aug 2015 15:55:04 -0000      
1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,16 +0,0 @@
-$OpenBSD: patch-ext_openssl_ossl_ssl_c,v 1.1 2015/08/27 15:55:04 kili Exp $
---- ext/openssl/ossl_ssl.c.orig        Fri Dec 12 22:58:34 2014
-+++ ext/openssl/ossl_ssl.c     Thu Aug 27 15:42:58 2015
-@@ -138,9 +138,12 @@ static const struct {
-     OSSL_SSL_METHOD_ENTRY(SSLv2_server),
-     OSSL_SSL_METHOD_ENTRY(SSLv2_client),
- #endif
-+#if defined(HAVE_SSLV3_METHOD) && defined(HAVE_SSLV3_SERVER_METHOD) && \
-+        defined(HAVE_SSLV3_CLIENT_METHOD)
-     OSSL_SSL_METHOD_ENTRY(SSLv3),
-     OSSL_SSL_METHOD_ENTRY(SSLv3_server),
-     OSSL_SSL_METHOD_ENTRY(SSLv3_client),
-+#endif
-     OSSL_SSL_METHOD_ENTRY(SSLv23),
-     OSSL_SSL_METHOD_ENTRY(SSLv23_server),
-     OSSL_SSL_METHOD_ENTRY(SSLv23_client),

Reply via email to