~ruther/guix-local

f2b4c18cd96a69e375d7d9b5ad1c09f8fc065571 — Jelle Licht 9 years ago e08ca4b
gnu: jq: Fix CVE-2015-8863.

* gnu/packages/patches/jq-CVE-2015-8863.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/web.scm (jq)[source]: Use it.

Signed-off-by: Leo Famulari <leo@famulari.name>
3 files changed, 51 insertions(+), 1 deletions(-)

M gnu/local.mk
A gnu/packages/patches/jq-CVE-2015-8863.patch
M gnu/packages/web.scm
M gnu/local.mk => gnu/local.mk +1 -0
@@ 595,6 595,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/jasper-CVE-2016-2089.patch		\
  %D%/packages/patches/jasper-CVE-2016-2116.patch		\
  %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
  %D%/packages/patches/jq-CVE-2015-8863.patch			\
  %D%/packages/patches/khmer-use-libraries.patch                \
  %D%/packages/patches/kmod-module-directory.patch		\
  %D%/packages/patches/laby-make-install.patch			\

A gnu/packages/patches/jq-CVE-2015-8863.patch => gnu/packages/patches/jq-CVE-2015-8863.patch +45 -0
@@ 0,0 1,45 @@
Fix CVE-2015-8863 (Off-by-one error in the tokenadd function in
jv_parse.c in jq allows remote attackers to cause a denial of service
(crash) via a long JSON-encoded number, which triggers a heap-based
buffer overflow):

<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-8863>

Copied from upstream code repository:

<https://github.com/stedolan/jq/commit/8eb1367ca44e772963e704a700ef72ae2e12babd>

From 8eb1367ca44e772963e704a700ef72ae2e12babd Mon Sep 17 00:00:00 2001
From: Nicolas Williams <nico@cryptonector.com>
Date: Sat, 24 Oct 2015 17:24:57 -0500
Subject: [PATCH] Heap buffer overflow in tokenadd() (fix #105)

This was an off-by one: the NUL terminator byte was not allocated on
resize.  This was triggered by JSON-encoded numbers longer than 256
bytes.
---
 jv_parse.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/jv_parse.c b/jv_parse.c
index 3102ed4..84245b8 100644
--- a/jv_parse.c
+++ b/jv_parse.c
@@ -383,7 +383,7 @@ static pfunc stream_token(struct jv_parser* p, char ch) {
 
 static void tokenadd(struct jv_parser* p, char c) {
   assert(p->tokenpos <= p->tokenlen);
-  if (p->tokenpos == p->tokenlen) {
+  if (p->tokenpos >= (p->tokenlen - 1)) {
     p->tokenlen = p->tokenlen*2 + 256;
     p->tokenbuf = jv_mem_realloc(p->tokenbuf, p->tokenlen);
   }
@@ -485,7 +485,7 @@ static pfunc check_literal(struct jv_parser* p) {
     TRY(value(p, v));
   } else {
     // FIXME: better parser
-    p->tokenbuf[p->tokenpos] = 0; // FIXME: invalid
+    p->tokenbuf[p->tokenpos] = 0;
     char* end = 0;
     double d = jvp_strtod(&p->dtoa, p->tokenbuf, &end);
     if (end == 0 || *end != 0)

M gnu/packages/web.scm => gnu/packages/web.scm +5 -1
@@ 3293,7 3293,11 @@ It uses the uwsgi protocol for all the networking/interprocess communications.")
                                  "/" name "-" version ".tar.gz"))
              (sha256
               (base32
                "0g29kyz4ykasdcrb0zmbrp2jqs9kv1wz9swx849i2d1ncknbzln4"))))
                "0g29kyz4ykasdcrb0zmbrp2jqs9kv1wz9swx849i2d1ncknbzln4"))
              ;; This patch has been pushed and the vulnerability will be
              ;; fixed in the next release after 1.5.
              ;; https://github.com/stedolan/jq/issues/995
              (patches (search-patches "jq-CVE-2015-8863.patch"))))
    (inputs
     `(("oniguruma" ,oniguruma)))
    (native-inputs