GNU IFUNC is the real culprit behind CVE-2024-3094

· security · Source ↗

TLDR

  • The xz-utils backdoor succeeded not because of xz itself, but because GNU IFUNC and OpenSSH-SystemD patches created an exploitable dynamic linking path into sshd.

Key Takeaways

  • Attack chain: Debian/Fedora patched OpenSSH to depend on libsystemd, which depends on xz-utils, which used GNU IFUNC, landing xz code in sshd’s address space.
  • GNU IFUNC lets arbitrary code run before main while the Global Offset Table is still writable, bypassing RELRO protections entirely.
  • The SystemD-OpenSSH patches never merged into Portable OpenSSH or upstream; siloed maintainer teams created the gap attackers exploited.
  • Alternatives to IFUNC exist: global function pointers with mprotect, LD_PRELOAD switching, or separate per-feature binaries – all simpler and harder to weaponize.
  • Even GCC developers have called IFUNC a mistake and considered adding compiler warnings; Apple similarly regrets its Mach-O .symbol_resolver equivalent.

Hacker News Comment Review

  • One commenter initially pushed back hard on the framing that OpenBSD developers don’t support Linux, but a reply clarified the article actually agrees: Portable OpenSSH maintainers explicitly rejected the libsystemd dependency.
  • Discussion is thin; the technical substance is mostly in the article itself rather than the thread.

Original | Discuss on HN