From: "Zac Medico" <zmedico@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:master commit in: bin/install-qa-check.d/
Date: Tue, 7 Aug 2018 18:49:03 +0000 (UTC) [thread overview]
Message-ID: <1533667166.807ac3d9d6eecead73f59d399b30559e5c731587.zmedico@gentoo> (raw)
commit: 807ac3d9d6eecead73f59d399b30559e5c731587
Author: Michael Orlitzky <mjo <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 7 16:46:04 2018 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Aug 7 18:39:26 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=807ac3d9
bin/install-qa-check.d: add new 90bad-bin-group-write QA check.
System executables that are writable by a non-root user pose a
security risk. Anyone who can write to an executable can change its
behavior. If that executable is later run with elevated privileges
(say, by root, when the machine starts), then the non-root user can
escalate his own privileges to those of the person running the
modified executable.
The 90bad-bin-owner check already addresses one cause for a non-root
user to be able to modify an executable: because he owns it. This
commit adds another check, to ensure that no non-root *groups* have
write access to any system executables. On a "normal" system, all
system executables should be writable only by the super-user's group,
if any. To avoid false-positives, non-"normal" systems (like prefix)
are skipped.
Closes: https://bugs.gentoo.org/629398
bin/install-qa-check.d/90bad-bin-group-write | 55 ++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/bin/install-qa-check.d/90bad-bin-group-write b/bin/install-qa-check.d/90bad-bin-group-write
new file mode 100644
index 000000000..786dde712
--- /dev/null
+++ b/bin/install-qa-check.d/90bad-bin-group-write
@@ -0,0 +1,55 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+bad_bin_group_write_check() {
+ # Warn about globally-installed executables (in /bin, /usr/bin, /sbin,
+ # /usr/sbin, or /opt/bin) that are group-writable by a nonzero GID.
+
+ # This check doesn't work on non-root prefix installations at
+ # the moment, because every executable therein is owned by a
+ # nonzero GID.
+ [[ "${EUID}" -ne "0" || "${PORTAGE_INST_UID}" -ne "0" ]] && return
+
+ local d f found=()
+
+ for d in "${ED%/}/opt/bin" "${ED%/}/bin" "${ED%/}/usr/bin" \
+ "${ED%/}/sbin" "${ED%/}/usr/sbin"; do
+ [[ -d "${d}" ]] || continue
+
+ # Read the results of the "find" command into the "found" array.
+ #
+ # Use -L to catch symlinks whose targets are vulnerable,
+ # even though it won't catch ABSOLUTE symlinks until the package
+ # is RE-installed (the first time around, the target won't exist).
+ #
+ # We match the GID and not the name "root" here because (for
+ # example) on FreeBSD, the superuser group is "wheel".
+ #
+ # We don't make an exception for setguid executables here, because
+ # a group-writable setguid executable is likely a mistake. By
+ # altering the contents of the executable, a member of the group
+ # can allow everyone (i.e. the people running it) to obtain the
+ # full privileges available to that group. While only existing
+ # group members can make that choice, it's a decision usually
+ # limited to the system administrator.
+ while read -r -d '' f; do
+ found+=( "${f}" )
+ done < <(find -L "${d}" \
+ -maxdepth 1 \
+ -type f \
+ -perm /g+w \
+ ! -gid 0 \
+ -print0)
+ done
+
+ if [[ ${found[@]} ]]; then
+ eqawarn "system executables group-writable by nonzero gid:"
+ for f in "${found[@]}"; do
+ # Strip off the leading destdir before outputting the path.
+ eqawarn " ${f#${D%/}}"
+ done
+ fi
+}
+
+bad_bin_group_write_check
+:
next reply other threads:[~2018-08-07 18:49 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-07 18:49 Zac Medico [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-01-06 10:19 [gentoo-commits] proj/portage:master commit in: bin/install-qa-check.d/ Ulrich Müller
2024-09-17 14:32 Matt Turner
2024-09-17 14:32 Matt Turner
2024-09-17 14:32 Matt Turner
2024-09-17 14:32 Matt Turner
2024-09-09 23:49 Sam James
2024-05-22 16:56 Sam James
2024-05-17 6:28 Sam James
2024-04-25 2:59 Mike Gilbert
2023-07-29 3:57 Sam James
2023-06-29 8:22 Sam James
2023-05-11 1:24 Sam James
2023-05-11 1:24 Sam James
2023-05-11 1:24 Sam James
2023-05-11 1:24 Sam James
2023-05-11 1:24 Sam James
2023-05-11 1:24 Sam James
2023-04-07 10:41 Sam James
2023-02-28 3:10 Sam James
2023-02-27 4:43 Sam James
2023-02-26 20:22 Sam James
2023-02-19 12:23 Sam James
2023-02-17 9:12 Sam James
2023-02-17 9:12 Sam James
2022-11-09 2:29 Sam James
2022-11-09 2:25 Sam James
2022-11-09 2:25 Sam James
2022-11-09 2:25 Sam James
2022-11-09 2:25 Sam James
2022-11-09 2:25 Sam James
2022-11-08 23:51 Sam James
2022-10-27 23:37 Sam James
2022-10-27 23:37 Sam James
2022-10-27 23:37 Sam James
2022-10-11 19:18 Sam James
2022-10-11 19:18 Sam James
2022-10-11 19:18 Sam James
2022-08-19 0:09 Sam James
2022-08-14 20:43 Sam James
2022-08-13 17:30 Sam James
2022-08-10 4:36 Sam James
2022-08-10 4:36 Sam James
2022-08-01 22:39 Sam James
2022-08-01 22:39 Sam James
2022-08-01 22:39 Sam James
2022-07-28 6:32 Fabian Groffen
2022-07-27 8:18 Fabian Groffen
2022-07-27 8:18 Fabian Groffen
2022-05-15 1:02 Sam James
2022-05-15 1:02 Sam James
2022-05-07 17:15 Mike Gilbert
2022-04-28 15:50 Sam James
2022-04-12 2:00 Sam James
2022-04-12 2:00 Sam James
2022-04-12 2:00 Sam James
2022-04-12 2:00 Sam James
2022-04-12 2:00 Sam James
2022-04-12 2:00 Sam James
2022-04-12 2:00 Sam James
2022-04-12 2:00 Sam James
2022-04-10 17:20 Sam James
2022-04-05 4:33 Sam James
2019-11-03 20:15 Zac Medico
2019-11-03 20:15 Zac Medico
2019-11-03 20:02 Zac Medico
2019-11-03 19:45 Zac Medico
2019-05-20 5:01 Zac Medico
2019-05-20 4:41 Zac Medico
2018-10-06 1:15 Zac Medico
2018-09-04 21:16 Michał Górny
2018-08-07 18:49 Zac Medico
2018-08-04 19:36 Zac Medico
2018-07-28 6:41 Zac Medico
2018-01-26 6:40 Michał Górny
2017-10-16 17:21 Zac Medico
2017-08-02 7:24 Zac Medico
2016-06-02 6:12 Zac Medico
2016-06-02 1:40 Zac Medico
2016-05-12 22:09 Mike Frysinger
2016-05-12 21:36 Mike Frysinger
2016-05-11 17:55 Mike Frysinger
2015-11-11 0:56 Mike Frysinger
2015-05-26 3:46 Mike Frysinger
2015-05-04 5:09 Zac Medico
2015-04-20 5:36 Michał Górny
2014-12-02 18:44 Brian Dolbec
2014-11-19 23:26 Michał Górny
2014-10-27 19:28 Zac Medico
2014-10-27 19:28 Zac Medico
2014-10-19 21:11 Brian Dolbec
2014-09-26 2:17 Brian Dolbec
2014-09-26 2:17 Brian Dolbec
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1533667166.807ac3d9d6eecead73f59d399b30559e5c731587.zmedico@gentoo \
--to=zmedico@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox