Security advisory for Nix and Lix - October 2026

Summary

Nix and Lix are affected by a set of issues that can be combined to achieve
root privilege escalation. These issues are identified as:

  • CVE-2026-110449 — an
    unsigned integer overflow when allocating Nix lists, leading to a heap
    out-of-bounds write during evaluation of untrusted expressions.
  • CVE-2026-110450 —
    unprivileged repair operations could destroy and replace a legitimate
    store path before its contents were verified, leading to local privilege
    escalation.
  • CVE-2026-110451 — a
    Seatbelt sandbox escape on macOS: an unqualified (allow …) form could be
    generated when the sandbox profile crossed an internal size threshold at a
    missing optional path, leaving the build unconfined.

This is a coordinated disclosure between the Nix and Lix projects, with the
NixOS security team coordinating the MITRE paperwork. The Lix side has been in
contact with the Nix team since the first report. Guix is not affected.

Additionally, there are several Nix-specific issues that are fixed in this security
release but do not affect Lix:

  • GHSA-hf6w-2rg9-v84g,
    CVE_2026-110452 — a bug in
    the multi-user installer.
    The script left the store contents (not the store directory itself) owned by the invoking user and not root.
  • GHSA-92x5-h528-wrmw,
    CVE_2026-110453 — improper authorisation
    of Nix daemon clients. macOS and FreeBSD unsandboxed configurations failed to reject connections
    from build users, exacerbating the impact of unprivileged repair exploit.

Am I affected?

All systems that build untrusted derivations are impacted.

  • The list-allocation overflow affects any evaluation of untrusted Nix code:
    nix eval, builds, and anything else that evaluates expressions from
    untrusted sources.
    Impact of the bug in Nix depends on the particular optimisations
    performed by the compiler used to build Nix.
  • The repair privilege escalation affect multi-user daemon installations where
    unprivileged users can talk to the daemon, on both Linux and macOS.
  • The Seatbelt escape affects macOS only, and only when sandbox = true or
    sandbox = relaxed is configured. sandbox defaults to false on macOS,
    so installations that never opted in are not affected. The escape can be
    triggered deliberately, and in some configurations by accident.

Nix:

  • Installer permission issue affects fresh installations that used https://nixos.org/nix/install
    multi-user installation (with --daemon flag explicitly, or by default on macOS).
    NixOS installations are not affected.
    The bad ownership affects only the initial bootstrap closure, so if you have upgraded nix (via nix upgrade-nix)
    and performed garbage collection on the initial generation, you are likely not affected.
    Users are advised to check for bad ownership manually by following the instructions in the Github Security Advisory.

Patches

The following versions contain the fixes. Versions older than the listed ones
must be considered impacted.

Nix

  • Affected versions: ≤ 2.35.2, ≤ 2.34.8, ≤ 2.31.5, ≤ 2.30.5, ≤ 2.28.7
  • Fixed versions: 2.35.3, 2.34.9, 2.31.6, 2.30.6, 2.28.8
  • Older versions are impacted to varying degrees and should be assumed vulnerable.
    2.29.x, 2.32.x and 2.33.x lineages are no longer supported by the Nix team and will
    not receive these fixes.

If you have installed Nix via https://nixos.org/nix/install,
you can upgrade via:

nix upgrade-nix --upgrade-nix-store-path-url https://releases.nixos.org/nix/nix-<version>/fallback-paths.nix

Where <version> corresponds to the fixed patch version of the minor release of Nix that you currently have installed.

Lix

  • Affected versions: ≤ 2.94.2, ≤ 2.95.3
  • Fixed versions: 2.94.3, 2.95.4, 2.96.0
  • Older branches (2.93 and older) are also impacted, but are no longer
    maintained and will not receive fixes.

Lix 2.95.4 can be upgraded with the helper script:

curl -sSf -L "https://git.lix.systems/lix-project/lix/raw/tag/2.95.4/misc/upgrade-lix.sh" \
  | sudo --preserve-env=PATH bash -s -- 2.95.4

Lix 2.94.3 can be upgraded with nix upgrade-nix.

nixpkgs

The issues have been fixed in the following nixpkgs PRs. Each PR has a
progress tracker at Making sure you're not a bot! <number>.

Acknowledgement

We would like to thank:

References

45 Likes

Important safety tip: running just nix upgrade-nix with no additional arguments does not work with an overlay install of Lix 2.95.x. It will uninstall the old version before installing the new version, and then crash because there’s no longer a Nix daemon available to install the new version with.

# nix upgrade-nix
uninstalling 'lix-2.95.2'
building '/nix/store/hbn1w6wsa0b5kgwc84ya5p5xq327qbw4-user-environment.drv'...
warning: Ignoring setting 'bash-prompt-prefix' because experimental feature 'nix-command' is not enabled
installing 'lix-2.95.4'
error: cannot open connection to remote store 'daemon': error: read failed: Connection reset by peer
error: program '/nix/store/vp8af34wgdp0yci449aaifqihvc1g9pz-lix-2.95.4/bin/nix-env' failed with exit code 1

The upgrade-lix.sh script looks like it was coded to avoid this, but I can’t be sure about that from code inspection, and it doesn’t work if there is no longer an older version of Lix available on the system. If you try to run it with the nix in the path being plain Nix, it’ll fail with an error like

error: directory '/nix/store/jzr6nih9li5qxygjwrglcdb9c3q0g5r9-nix-2.34.8/bin' does not have a compatible profile manifest; was it created by Nix?
4 Likes

Can we assume 2.96.0 is unaffected?

2 Likes

That is correct and this is why we did the release in 2 steps.

5 Likes

How can Lix 2.95.3 upgraded instead?

The blog post mentions multiple paths depending on your OS and the provenance of your Lix, if it’s nixpkgs, nixpkgs have the updated version. If not, you can use:

curl -sSf -L "https://git.lix.systems/lix-project/lix/raw/tag/2.95.4/misc/upgrade-lix.sh" \
  | sudo --preserve-env=PATH bash -s -- 2.95.4

to achieve it.

1 Like

Apologies, I missed the blog post link. Will have a read. Thank you :heart:

1 Like