Published: 21 March 2019
A vulnerability in the seccomp filters of Canonical snapd before version 2.37.4 allows a strict mode snap to insert characters into a terminal on a 64-bit host. The seccomp rules were generated to match 64-bit ioctl(2) commands on a 64-bit platform; however, the Linux kernel only uses the lower 32 bits to determine which ioctl(2) commands to run. This issue affects: Canonical snapd versions prior to 2.37.4.
this is a kernel limitation that is documented in the seccomp man page, but arguably the kernel should perform the seccomp filter check on the value that it is ultimately going to process (which likely means an improvement to libseccomp to generate the appropriate BPF to do this) this was further complicated by the fact that the kernel and glibc disagree on the function prototype of ioctl, where the glibc man page documents it as unsigned long and the kernel treats it as int (note, the tty_ioctl man page (which is the one that documents TIOCSTI) lists the ioctl second argument as an int) due to miscoordination, 2.37.4 is going to -updates first as part of the regular SRU cycle. Once that passes, we'll rebuild and publish to the security pocket and issue a USN. once this issue is public, the global profile initialization code that is used to address this issue will also be made public
Launchpad, Ubuntu, Debian
upstream: https://github.com/snapcore/snapd/pull/6516 (part 1)
upstream: https://github.com/snapcore/snapd/pull/6533 (part 2)
Severity score breakdown