From 1012c6ce76ce10772ece1c51b997b53b848054f5 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Wed, 25 Feb 2026 00:21:17 +0000 Subject: [PATCH] userdbd: avoid sending gshadow hash to unprivileged callers via varlink Reported on yeswehack as YWH-PGM9780-59 Follow-up for d093b62c941ebd6cf16ef9dd6430841eb361ed92 --- src/userdb/userwork.c | 2 +- test/units/TEST-74-AUX-UTILS.varlinkctl.sh | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/userdb/userwork.c b/src/userdb/userwork.c index a57447ca85..6abb8795e6 100644 --- a/src/userdb/userwork.c +++ b/src/userdb/userwork.c @@ -270,7 +270,7 @@ static int build_group_json(sd_varlink *link, GroupRecord *gr, sd_json_variant * (FLAGS_SET(gr->mask, USER_RECORD_PRIVILEGED) && !FLAGS_SET(stripped->mask, USER_RECORD_PRIVILEGED)); - v = sd_json_variant_ref(gr->json); + v = sd_json_variant_ref(stripped->json); r = add_nss_service(&v); if (r < 0) return r; diff --git a/test/units/TEST-74-AUX-UTILS.varlinkctl.sh b/test/units/TEST-74-AUX-UTILS.varlinkctl.sh index 4308092240..dc5f952e59 100755 --- a/test/units/TEST-74-AUX-UTILS.varlinkctl.sh +++ b/test/units/TEST-74-AUX-UTILS.varlinkctl.sh @@ -52,6 +52,19 @@ if command -v userdbctl >/dev/null; then varlinkctl call --more -j /run/systemd/userdb/io.systemd.Multiplexer io.systemd.UserDatabase.GetMemberships '{ "service" : "io.systemd.Multiplexer" }' --graceful=io.systemd.UserDatabase.NoRecordFound | jq --seq . varlinkctl call --oneway /run/systemd/userdb/io.systemd.Multiplexer io.systemd.UserDatabase.GetMemberships '{ "service" : "io.systemd.Multiplexer" }' (! varlinkctl call --oneway /run/systemd/userdb/io.systemd.Multiplexer io.systemd.UserDatabase.GetMemberships '{ "service" : "io.systemd.Multiplexer" }' | grep .) + + if command -v openssl >/dev/null && command -v groupadd >/dev/null; then + group=haldo + salt=waldo + getent group "$group" >/dev/null 2>&1 || groupadd "$group" + HASH="$(openssl passwd -6 -salt "$salt" baldo)" + groupmod -p "$HASH" "$group" + + (! run0 -u testuser varlinkctl call --json=pretty \ + /run/systemd/userdb/io.systemd.Multiplexer \ + io.systemd.UserDatabase.GetGroupRecord \ + '{"groupName":"haldo","service":"io.systemd.NameServiceSwitch"}' | grep waldo) + fi fi IDL_FILE="$(mktemp)"