summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDivya Chellam <divya.chellam@windriver.com>2025-06-05 16:30:59 +0530
committerSteve Sakoman <steve@sakoman.com>2025-06-11 08:17:34 -0700
commitfa0fef4a3d5081c7ed300cb5d02286675aabece0 (patch)
tree71a45c7f71b56f65819ab29cb817b2e5296fe2b3
parent33fc46afb7e433f6f70b3c2312b52f6215952a49 (diff)
downloadpoky-fa0fef4a3d5081c7ed300cb5d02286675aabece0.tar.gz
screen: fix CVE-2025-46802
For a short time they PTY is set to mode 666, allowing any user on the system to connect to the screen session. Reference: https://security-tracker.debian.org/tracker/CVE-2025-46802 Upstream-patch: https://cgit.git.savannah.gnu.org/cgit/screen.git/commit/?id=049b26b22e197ba3be9c46e5c193032e01a4724a (From OE-Core rev: b17e091eb4681b69c5a050d3fa0f9289f524e205) Signed-off-by: Divya Chellam <divya.chellam@windriver.com> Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r--meta/recipes-extended/screen/screen/CVE-2025-46802.patch146
-rw-r--r--meta/recipes-extended/screen/screen_4.9.1.bb1
2 files changed, 147 insertions, 0 deletions
diff --git a/meta/recipes-extended/screen/screen/CVE-2025-46802.patch b/meta/recipes-extended/screen/screen/CVE-2025-46802.patch
new file mode 100644
index 0000000000..e46affc480
--- /dev/null
+++ b/meta/recipes-extended/screen/screen/CVE-2025-46802.patch
@@ -0,0 +1,146 @@
1From 049b26b22e197ba3be9c46e5c193032e01a4724a Mon Sep 17 00:00:00 2001
2From: Matthias Gerstner <matthias.gerstner@suse.de>
3Date: Mon, 12 May 2025 15:15:38 +0200
4Subject: [PATCH] fix CVE-2025-46802: attacher.c - prevent temporary 0666 mode
5 on PTYs
6
7This temporary chmod of the PTY to mode 0666 is most likely a remnant of
8past times, before the PTY file descriptor was passed to the target
9session via the UNIX domain socket.
10
11This chmod() causes a race condition during which any other user in the
12system can open the PTY for reading and writing, and thus allows PTY
13hijacking.
14
15Simply remove this logic completely.
16
17CVE: CVE-2025-46802
18
19Upstream-Status: Backport [https://cgit.git.savannah.gnu.org/cgit/screen.git/commit/?id=049b26b22e197ba3be9c46e5c193032e01a4724a]
20
21Signed-off-by: Divya Chellam <divya.chellam@windriver.com>
22---
23 attacher.c | 27 ---------------------------
24 screen.c | 19 -------------------
25 2 files changed, 46 deletions(-)
26
27diff --git a/attacher.c b/attacher.c
28index c35ae7a..16b151e 100644
29--- a/attacher.c
30+++ b/attacher.c
31@@ -73,7 +73,6 @@ extern int MasterPid, attach_fd;
32 #ifdef MULTIUSER
33 extern char *multi;
34 extern int multiattach, multi_uid, own_uid;
35-extern int tty_mode, tty_oldmode;
36 # ifndef USE_SETEUID
37 static int multipipe[2];
38 # endif
39@@ -160,9 +159,6 @@ int how;
40
41 if (pipe(multipipe))
42 Panic(errno, "pipe");
43- if (chmod(attach_tty, 0666))
44- Panic(errno, "chmod %s", attach_tty);
45- tty_oldmode = tty_mode;
46 eff_uid = -1; /* make UserContext fork */
47 real_uid = multi_uid;
48 if ((ret = UserContext()) <= 0)
49@@ -174,11 +170,6 @@ int how;
50 Panic(errno, "UserContext");
51 close(multipipe[1]);
52 read(multipipe[0], &dummy, 1);
53- if (tty_oldmode >= 0)
54- {
55- chmod(attach_tty, tty_oldmode);
56- tty_oldmode = -1;
57- }
58 ret = UserStatus();
59 #ifdef LOCK
60 if (ret == SIG_LOCK)
61@@ -224,9 +215,6 @@ int how;
62 xseteuid(multi_uid);
63 xseteuid(own_uid);
64 #endif
65- if (chmod(attach_tty, 0666))
66- Panic(errno, "chmod %s", attach_tty);
67- tty_oldmode = tty_mode;
68 }
69 # endif /* USE_SETEUID */
70 #endif /* MULTIUSER */
71@@ -423,13 +411,6 @@ int how;
72 ContinuePlease = 0;
73 # ifndef USE_SETEUID
74 close(multipipe[1]);
75-# else
76- xseteuid(own_uid);
77- if (tty_oldmode >= 0)
78- if (chmod(attach_tty, tty_oldmode))
79- Panic(errno, "chmod %s", attach_tty);
80- tty_oldmode = -1;
81- xseteuid(real_uid);
82 # endif
83 }
84 #endif
85@@ -505,14 +486,6 @@ AttacherFinit SIGDEFARG
86 close(s);
87 }
88 }
89-#ifdef MULTIUSER
90- if (tty_oldmode >= 0)
91- {
92- if (setuid(own_uid))
93- Panic(errno, "setuid");
94- chmod(attach_tty, tty_oldmode);
95- }
96-#endif
97 exit(0);
98 SIGRETURN;
99 }
100diff --git a/screen.c b/screen.c
101index 7653cd1..1a23e1a 100644
102--- a/screen.c
103+++ b/screen.c
104@@ -230,8 +230,6 @@ char *multi_home;
105 int multi_uid;
106 int own_uid;
107 int multiattach;
108-int tty_mode;
109-int tty_oldmode = -1;
110 #endif
111
112 char HostName[MAXSTR];
113@@ -1009,9 +1007,6 @@ int main(int ac, char** av)
114
115 /* ttyname implies isatty */
116 SetTtyname(true, &st);
117-#ifdef MULTIUSER
118- tty_mode = (int)st.st_mode & 0777;
119-#endif
120
121 fl = fcntl(0, F_GETFL, 0);
122 if (fl != -1 && (fl & (O_RDWR|O_RDONLY|O_WRONLY)) == O_RDWR)
123@@ -2170,20 +2165,6 @@ DEFINE_VARARGS_FN(Panic)
124 if (D_userpid)
125 Kill(D_userpid, SIG_BYE);
126 }
127-#ifdef MULTIUSER
128- if (tty_oldmode >= 0) {
129-
130-# ifdef USE_SETEUID
131- if (setuid(own_uid))
132- xseteuid(own_uid); /* may be a loop. sigh. */
133-# else
134- setuid(own_uid);
135-# endif
136-
137- debug1("Panic: changing back modes from %s\n", attach_tty);
138- chmod(attach_tty, tty_oldmode);
139- }
140-#endif
141 eexit(1);
142 }
143
144--
1452.40.0
146
diff --git a/meta/recipes-extended/screen/screen_4.9.1.bb b/meta/recipes-extended/screen/screen_4.9.1.bb
index 96f8021255..bc4928ff77 100644
--- a/meta/recipes-extended/screen/screen_4.9.1.bb
+++ b/meta/recipes-extended/screen/screen_4.9.1.bb
@@ -22,6 +22,7 @@ SRC_URI = "${GNU_MIRROR}/screen/screen-${PV}.tar.gz \
22 file://0001-fix-for-multijob-build.patch \ 22 file://0001-fix-for-multijob-build.patch \
23 file://0001-Remove-more-compatibility-stuff.patch \ 23 file://0001-Remove-more-compatibility-stuff.patch \
24 file://CVE-2025-46805.patch \ 24 file://CVE-2025-46805.patch \
25 file://CVE-2025-46802.patch \
25 " 26 "
26 27
27SRC_URI[sha256sum] = "26cef3e3c42571c0d484ad6faf110c5c15091fbf872b06fa7aa4766c7405ac69" 28SRC_URI[sha256sum] = "26cef3e3c42571c0d484ad6faf110c5c15091fbf872b06fa7aa4766c7405ac69"