https://www.openwall.com/lists/oss-security/2022/12/21/6 * Products + Openwall GNU/*/Linux server OS + Linux Kernel Runtime Guard + John the Ripper password cracker o Free & Open Source for any platform o in the cloud o Pro for Linux o Pro for macOS + Wordlists for password cracking + passwdqc policy enforcement o Free & Open Source for Unix o Pro for Windows (Active Directory) + yescrypt KDF & password hashing + yespower Proof-of-Work (PoW) + crypt_blowfish password hashing + phpass ditto in PHP + tcb better password shadowing + Pluggable Authentication Modules Openwall + scanlogd port scan detector + popa3d tiny POP3 daemon + blists web interface to mailing lists + msulogin single user mode login + php_mt_seed mt_rand() cracker * Services * Publications + Articles + Presentations * Resources + Mailing lists + Community wiki + Source code repositories (GitHub) + Source code repositories (CVSweb) + File archive & mirrors + How to verify digital signatures + OVE IDs * What's new Follow @Openwall on Twitter for new release announcements and other news [] [thread-next>] [day] [month] [year] [list] Date: Wed, 21 Dec 2022 18:13:17 +0100 From: Dmitry Vyukov To: oss-security@...ts.openwall.com Subject: [Linux] /proc/pid/stat parsing bugs Hello, This is not a single vulnerability, the list of affected software is large, but it's not a security issue for all of it. It occurred to me that most of the Linux procfs /proc/pid/stat and /proc/pid/task/tid/stat parsing code out there is buggy. The fine contains a set of numbers about the task: https://man7.org/linux/man-pages/man5/proc.5.html e.g. $ cat /proc/self/stat 1715376 (cat) R 1544883 1715376 1544883 34819 1715376 4194304 106 0 0 0 0 0 0 0 20 0 1 0 42505561 9207808 237 18446744073709551615 93955355631616 93955355651497 140737444557056 0 0 0 0 0 0 0 0 0 17 36 0 0 0 0 0 93955355667504 93955355669120 93955385581568 140737444559745 140737444559765 140737444559765 140737444564971 0 Most of the code splits it by space and takes an N-th field. The problem is that the process name "(cat)" can contain spaces (and brackets). Potentially some important software (containers/sandboxes) can be tricked into getting wrong data, and I've seen cases close to stack overflows (buffer for a fixed number of fields is allocated on stack). Some examples: OpenJDK: https://sourcegraph.com/github.com/openjdk/jdk/-/blob/src/jdk.management/unix/native/libmanagement_ext/OperatingSystemImpl.c?L133-139 https://sourcegraph.com/github.com/openjdk/jdk8u/-/blob/jdk/src/solaris/native/sun/management/OperatingSystemImpl.c?L223-229 Ansible: https://sourcegraph.com/github.com/ansible/ansible/-/blob/lib/ansible/modules/yum.py?L507-510 Libuv: https://sourcegraph.com/github.com/libuv/libuv/-/blob/src/unix/linux.c?L674-701 bdwgc: https://sourcegraph.com/github.com/mono/linux-packaging-mono/-/blob/external/bdwgc/os_dep.c?L1138-1155 But really most of the code that does it: https://sourcegraph.com/search?q=context:global+/%5C%22%5C/proc%5C/.*%5C/stat%5C%22/ The only way to parse it is to do strrchr(')') first (fortunately it contains just one unescaped string). Thanks Powered by blists - more mailing lists Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list. Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.