diff options
author | Divya Chellam <divya.chellam@windriver.com> | 2025-02-04 12:25:28 +0000 |
---|---|---|
committer | Armin Kuster <akuster808@gmail.com> | 2025-02-09 07:55:22 -0800 |
commit | e80164edccb6d3722ba04243c44fea06b44ae880 (patch) | |
tree | 562039d0e40bd6195edd40bb63d2fe2c7196c01d | |
parent | d9340d705d8f01beb4e935dbdc20ddfde98e784b (diff) | |
download | meta-openembedded-e80164edccb6d3722ba04243c44fea06b44ae880.tar.gz |
redis: fix CVE-2024-51741
Redis is an open source, in-memory database that persists on disk.
An authenticated with sufficient privileges may create a malformed
ACL selector which, when accessed, triggers a server panic and
subsequent denial of service. The problem is fixed in Redis 7.2.7
and 7.4.2.
Reference:
https://nvd.nist.gov/vuln/detail/CVE-2024-51741
Upstream-patch:
https://github.com/redis/redis/commit/15e212bf69de28d2b4585aa79cc2a40f49e4a94d
Signed-off-by: Divya Chellam <divya.chellam@windriver.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
-rw-r--r-- | meta-oe/recipes-extended/redis/redis-7.0.13/CVE-2024-51741.patch | 89 | ||||
-rw-r--r-- | meta-oe/recipes-extended/redis/redis_7.0.13.bb | 1 |
2 files changed, 90 insertions, 0 deletions
diff --git a/meta-oe/recipes-extended/redis/redis-7.0.13/CVE-2024-51741.patch b/meta-oe/recipes-extended/redis/redis-7.0.13/CVE-2024-51741.patch new file mode 100644 index 0000000000..e3a43fe896 --- /dev/null +++ b/meta-oe/recipes-extended/redis/redis-7.0.13/CVE-2024-51741.patch | |||
@@ -0,0 +1,89 @@ | |||
1 | From 15e212bf69de28d2b4585aa79cc2a40f49e4a94d Mon Sep 17 00:00:00 2001 | ||
2 | From: YaacovHazan <yaacov.hazan@redis.com> | ||
3 | Date: Sun, 15 Dec 2024 11:27:48 +0200 | ||
4 | Subject: [PATCH] Fix Read/Write key pattern selector (CVE-2024-51741) | ||
5 | |||
6 | The '%' rule must contain one or both of R/W | ||
7 | |||
8 | CVE: CVE-2024-51741 | ||
9 | |||
10 | Upstream-Status: Backport [https://github.com/redis/redis/commit/15e212bf69de28d2b4585aa79cc2a40f49e4a94d] | ||
11 | |||
12 | Signed-off-by: Divya Chellam <divya.chellam@windriver.com> | ||
13 | --- | ||
14 | src/acl.c | 11 ++++++++--- | ||
15 | tests/unit/acl-v2.tcl | 26 ++++++++++++++++++++++++++ | ||
16 | 2 files changed, 34 insertions(+), 3 deletions(-) | ||
17 | |||
18 | diff --git a/src/acl.c b/src/acl.c | ||
19 | index 6b53d90..ed6dc97 100644 | ||
20 | --- a/src/acl.c | ||
21 | +++ b/src/acl.c | ||
22 | @@ -1031,19 +1031,24 @@ int ACLSetSelector(aclSelector *selector, const char* op, size_t oplen) { | ||
23 | int flags = 0; | ||
24 | size_t offset = 1; | ||
25 | if (op[0] == '%') { | ||
26 | + int perm_ok = 1; | ||
27 | for (; offset < oplen; offset++) { | ||
28 | if (toupper(op[offset]) == 'R' && !(flags & ACL_READ_PERMISSION)) { | ||
29 | flags |= ACL_READ_PERMISSION; | ||
30 | } else if (toupper(op[offset]) == 'W' && !(flags & ACL_WRITE_PERMISSION)) { | ||
31 | flags |= ACL_WRITE_PERMISSION; | ||
32 | - } else if (op[offset] == '~' && flags) { | ||
33 | + } else if (op[offset] == '~') { | ||
34 | offset++; | ||
35 | break; | ||
36 | } else { | ||
37 | - errno = EINVAL; | ||
38 | - return C_ERR; | ||
39 | + perm_ok = 0; | ||
40 | + break; | ||
41 | } | ||
42 | } | ||
43 | + if (!flags || !perm_ok) { | ||
44 | + errno = EINVAL; | ||
45 | + return C_ERR; | ||
46 | + } | ||
47 | } else { | ||
48 | flags = ACL_ALL_PERMISSION; | ||
49 | } | ||
50 | diff --git a/tests/unit/acl-v2.tcl b/tests/unit/acl-v2.tcl | ||
51 | index d836f9c..0b83b89 100644 | ||
52 | --- a/tests/unit/acl-v2.tcl | ||
53 | +++ b/tests/unit/acl-v2.tcl | ||
54 | @@ -107,6 +107,32 @@ start_server {tags {"acl external:skip"}} { | ||
55 | assert_match "*NOPERM*keys*" $err | ||
56 | } | ||
57 | |||
58 | + test {Validate read and write permissions format - empty permission} { | ||
59 | + catch {r ACL SETUSER key-permission-RW %~} err | ||
60 | + set err | ||
61 | + } {ERR Error in ACL SETUSER modifier '%~': Syntax error} | ||
62 | + | ||
63 | + test {Validate read and write permissions format - empty selector} { | ||
64 | + catch {r ACL SETUSER key-permission-RW %} err | ||
65 | + set err | ||
66 | + } {ERR Error in ACL SETUSER modifier '%': Syntax error} | ||
67 | + | ||
68 | + test {Validate read and write permissions format - empty pattern} { | ||
69 | + # Empty pattern results with R/W access to no key | ||
70 | + r ACL SETUSER key-permission-RW on nopass %RW~ +@all | ||
71 | + $r2 auth key-permission-RW password | ||
72 | + catch {$r2 SET x 5} err | ||
73 | + set err | ||
74 | + } {NOPERM No permissions to access a key} | ||
75 | + | ||
76 | + test {Validate read and write permissions format - no pattern} { | ||
77 | + # No pattern results with R/W access to no key (currently we accept this syntax error) | ||
78 | + r ACL SETUSER key-permission-RW on nopass %RW +@all | ||
79 | + $r2 auth key-permission-RW password | ||
80 | + catch {$r2 SET x 5} err | ||
81 | + set err | ||
82 | + } {NOPERM No permissions to access a key} | ||
83 | + | ||
84 | test {Test separate read and write permissions on different selectors are not additive} { | ||
85 | r ACL SETUSER key-permission-RW-selector on nopass "(%R~read* +@all)" "(%W~write* +@all)" | ||
86 | $r2 auth key-permission-RW-selector password | ||
87 | -- | ||
88 | 2.40.0 | ||
89 | |||
diff --git a/meta-oe/recipes-extended/redis/redis_7.0.13.bb b/meta-oe/recipes-extended/redis/redis_7.0.13.bb index 3535da9664..e7bff9b4ec 100644 --- a/meta-oe/recipes-extended/redis/redis_7.0.13.bb +++ b/meta-oe/recipes-extended/redis/redis_7.0.13.bb | |||
@@ -22,6 +22,7 @@ SRC_URI = "http://download.redis.io/releases/${BP}.tar.gz \ | |||
22 | file://CVE-2024-31228.patch \ | 22 | file://CVE-2024-31228.patch \ |
23 | file://CVE-2024-31449.patch \ | 23 | file://CVE-2024-31449.patch \ |
24 | file://CVE-2024-46981.patch \ | 24 | file://CVE-2024-46981.patch \ |
25 | file://CVE-2024-51741.patch \ | ||
25 | " | 26 | " |
26 | SRC_URI[sha256sum] = "97065774d5fb8388eb0d8913458decfcb167d356e40d31dd01cd30c1cc391673" | 27 | SRC_URI[sha256sum] = "97065774d5fb8388eb0d8913458decfcb167d356e40d31dd01cd30c1cc391673" |
27 | 28 | ||