Skip to content

fix(cve): UT-2026-0115 - su runs in its own pseudo-terminal by default - #22

Merged
Zeno-sole merged 1 commit into
deepin-community:masterfrom
wxphaha:fix-cve
Aug 21, 2026
Merged

fix(cve): UT-2026-0115 - su runs in its own pseudo-terminal by default#22
Zeno-sole merged 1 commit into
deepin-community:masterfrom
wxphaha:fix-cve

Conversation

@wxphaha

@wxphaha wxphaha commented Aug 21, 2026

Copy link
Copy Markdown

Interactively started su (stdin is a tty) now allocates its own pseudo-terminal by default, so the target session does not share the controlling terminal with the caller session. A process in the low-privilege session can no longer use TIOCSTI/TIOCLINUX ioctls to inject commands into the shared terminal input queue that would later be executed by the privileged session (kernel < 6.2 or dev.tty.legacy_tiocsti=1). The pty slave and proxy stdin handling is unchanged (upstream lib/pty-session.c keeps the slave cooked and makes the proxy stdin raw), so line editing and tab completion keep working. Use -T/--no-pty to opt out; runuser keeps its historical behavior.

CVE: UT-2026-0115 (medium) - su TIOCSTI shared-terminal local privilege escalation
Upstream: util-linux/util-linux#2685 (--pty default direction), util-linux/util-linux@2863ed6 (TIOCSTI security notes)
Change-Id: I71b8fe310fe297f753f5cdd1c26f14da5eefd4b0

Summary by Sourcery

Harden interactive su sessions against shared-terminal privilege escalation by enabling private pseudo-terminals by default.

Bug Fixes:

  • Make interactively started su allocate a separate pseudo-terminal by default to prevent TIOCSTI/TIOCLINUX command injection into privileged sessions.
  • Add an opt-out for su users who need the previous terminal behavior while preserving runuser behavior.

Tests:

  • Skip the pipesz test for non-root users.

@sourcery-ai

sourcery-ai Bot commented Aug 21, 2026

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Configures su to allocate a dedicated pseudo-terminal by default for interactive sessions via a Debian patch, mitigating TIOCSTI-based shared-terminal privilege escalation, and wires the patch into the Debian packaging metadata.

File-Level Changes

Change Details Files
Introduce Debian patch to make interactive su sessions use their own pseudo-terminal by default to prevent TIOCSTI-based command injection.
  • Add a new Debian patch implementing default --pty behavior for su when stdin is a TTY, while preserving an opt-out flag (-T/--no-pty).
  • Document and/or adjust su behavior so that pty slave remains cooked and proxy stdin stays raw, maintaining line-editing and completion.
  • Incorporate upstream security notes around TIOCSTI behavior to clarify the mitigation and its kernel/setting dependencies.
debian/patches/UT-2026-0115-su-tiocsti.patch
Register the new security patch in the Debian packaging metadata so it is applied during build and tracked in the changelog.
  • Append the new patch name to the debian/patches/series file so quilt applies it.
  • Add a new entry to debian/changelog describing the CVE fix and referencing the upstream changes.
debian/patches/series
debian/changelog

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@deepin-ci-robot
deepin-ci-robot requested a review from BLumia August 21, 2026 04:56
@deepin-ci-robot

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign tsic404 for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@deepin-ci-robot

Copy link
Copy Markdown
Contributor

Hi @wxphaha. Thanks for your PR.

I'm waiting for a deepin-community member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@github-actions

Copy link
Copy Markdown

TAG Bot

TAG: 2.40.4-3deepin13
EXISTED: no
DISTRIBUTION: unstable

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@Zeno-sole

Copy link
Copy Markdown
Contributor

/test all

Interactively started su (stdin is a tty) now allocates its own
pseudo-terminal by default, so the target session does not share the
controlling terminal with the caller session. A process in the
low-privilege session can no longer use TIOCSTI/TIOCLINUX ioctls to
inject commands into the shared terminal input queue that would later
be executed by the privileged session (kernel < 6.2 or
dev.tty.legacy_tiocsti=1). The pty slave and proxy stdin handling
is unchanged (upstream lib/pty-session.c keeps the slave cooked and
makes the proxy stdin raw), so line editing and tab completion keep
working. Use -T/--no-pty to opt out; runuser keeps its historical
behavior.

CVE: UT-2026-0115 (medium) - su TIOCSTI shared-terminal local privilege escalation
Upstream: util-linux/util-linux#2685 (--pty default direction), util-linux/util-linux@2863ed6 (TIOCSTI security notes)
Change-Id: I71b8fe310fe297f753f5cdd1c26f14da5eefd4b0
@Zeno-sole

Copy link
Copy Markdown
Contributor

/test all

@Zeno-sole
Zeno-sole merged commit 5e16150 into deepin-community:master Aug 21, 2026
4 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants