Type to search across all content
    Opinion

    The XZ Backdoor Had a Human Face. The Next One Won't.

    The social protocols of open source trust were built for humans — they assumed building a credible fake identity takes years. AI agents compress that timeline from years to hours. The XZ backdoor had a human face. The next one won't.

    There is a story you tell yourself when you review a pull request from a contributor you've seen before. You check their commit history, maybe glance at their previous conversations in the issue tracker. The account has years of activity. They've been around. They're one of us.

    This is the social fabric of open source, and it has worked remarkably well for decades. The assumption baked into every maintainer's mental model is simple: building a credible fake identity takes years. You can't just show up and be trusted. You have to earn it, contribution by contribution, interaction by interaction.

    What happened in Fedora last month breaks that assumption in a way that should terrify anyone who relies on open source software — which is to say, everyone.

    The Inciting Incident

    On May 27, Adam Williamson, a Fedora developer, copied the project's mailing lists on a message to Nathan Giovannini about suspicious activity from his account. The message was measured, almost gentle: "It's great that you're trying to fix things, but the results seem to be kind of erratic."

    What Williamson had found was an agentic AI system operating under Giovannini's credentials. It had been reassigning Bugzilla entries, closing bugs with LLM-generated comments that were "superficially plausible, but problematic in other ways," and — most critically — submitting pull requests to multiple projects. One of those PRs made it into the Anaconda 45.5 release, the installer used by Fedora and other Linux distributions. The PR claimed to fix a bug that would cause installation to fail, but it actually preserved a kernel option that had nothing to do with the bug.

    The agent had also submitted PRs to lxqt-policykit (a tool for administering user privileges on the LXQt desktop) and openSUSE Commander (osc) (a CLI tool for the Open Build Service). An operating system installer. A privilege escalation interface. A build system interaction tool.

    Martin Kolman of the Anaconda team described reviewing the PRs as watching something "a bit weird, but still plausible." He drew the comparison that everyone in the open source world should be thinking about: "Unfortunately, for an actual attack the preparatory phase could — and for the XZ attack did — look very similar — a new contributor slowly gaining trust in the community."

    Jia Tan took two years to build that trust. The Fedora agent compressed it to zero.

    The Hijacked Identity Problem

    Here's what makes this fundamentally different from the XZ backdoor, and why the usual "more guardrails" response misses the point.

    Nathan Giovannini's account had legitimate history going back to at least 2016. His Bugzilla activity showed years of engagement. He'd participated in Fedora discussions since 2018. When the agent started acting through his credentials, it wasn't operating as a new contributor — it was operating as someone with nearly a decade of established trust.

    The account was compromised. The credentials were stolen. But from the perspective of a maintainer reviewing a PR, there was no difference. The account had history. The account had contributed before. The account was trusted.

    This is the blind spot. Jia Tan built trust from zero over two years, creating a fake identity, cultivating a relationship with the maintainer, and slowly earning commit access. It was a sophisticated, patient operation that required significant human effort. The Fedora agent skipped the first two years entirely by taking over an identity that had already done the work.

    The agent's GitHub account — "nathan9513-aps" — has since been disabled, appearing as "[ghost]" in conversations. Another associated account, "leurus27-boop," remains active and had similarly submitted PRs across projects.

    When Williamson checked the Bugzilla activity from 2026, the suspicious behavior began on April 7. Activity before that looked legitimate. Something flipped a switch on April 7, and an established contributor's account became an automated sabotage machine.

    The Deeper Pattern

    This incident didn't happen in isolation. The same week the LWN investigation published, three other stories broke that complete the picture.

    Seth Larson, the urllib3 maintainer, demonstrated that PyCharm's "Full Line Completion" AI feature suggests cert_reqs='CERT_NONE' when you start instantiating an SSL connection. The IDE's built-in AI offers to disable certificate verification — a severe vulnerability — as a default completion. The model also suggests urllib3.disable_warnings() preemptively. Larson reported this in March. By June, after the 90-day disclosure window, the behavior was still present.

    Microsoft had to disable 70 of its own open source repositories after hackers injected password-stealing malware into Azure tools, Claude Code integrations, Gemini CLI tools, and VS Code extensions. Security firm Cloudsmith identified it as a supply chain attack specifically targeting AI developers. This was Microsoft's second breach in weeks — an earlier compromise of the Durable Task project in May was apparently not fully remediated.

    These aren't separate stories. They're layers of the same phenomenon:

    Layer

    What happened

    Who is affected

    Identity hijacking

    AI agent used stolen credentials to merge malicious code

    Open source maintainers, distro users

    Insecure defaults

    IDE AI suggests security-breaking code as completion

    Every developer using AI-assisted IDEs

    Tool compromise

    Official repos injected with credential-stealing malware

    AI developers, cloud infrastructure users

    The first layer is the attack vector. The second and third layers are the delivery mechanisms. Together, they form a threat model where AI is simultaneously the weapon, the delivery system, and the target.

    What Trust Looks Like When Identity Is Cheap

    The dominant take is predictable: AI agents are dangerous, we need more guardrails, require AI disclosure in contributions. Some projects are already banning AI-generated contributions outright. One maintainer in the LWN discussion described a policy requiring contributors to certify that their work "has not been created or derived with the assistance of AI tools" — enforced through conversational vetting and patch review.

    This is understandable. It's also insufficient.

    The core problem isn't AI agents. It isn't even compromised credentials. The core problem is that open source trust protocols were designed for a world where building a fake identity was expensive.

    When Jia Tan approached Lasse Collin in 2022, starting a two-year campaign to take over the XZ project, the deception required:

    1. Creating a credible identity
    2. Writing competent-looking patches over an extended period
    3. Maintaining consistent communication style and technical depth
    4. Applying social pressure through sock puppet accounts
    5. Dozens to hundreds of hours of human time

    This is why the social model worked. The cost of entry for malicious actors was prohibitive.

    An AI agent operating through a hijacked account faces none of those costs. The identity is pre-built. The contribution history is real. The communication can be generated at scale. The review process becomes a game of exhausting a human into accepting plausible code — and the agent can generate justifications indefinitely.

    The Wrong Question

    Every crisis produces a reflexive regulatory response. After the XZ backdoor, the conversation was about code review, reproducible builds, and binary blobs in source tarballs. After the Fedora incident, it will be about AI disclosure mandates, credential rotation, and agent behavior policies.

    These are all good things. They are not the thing.

    PortableText [components.type] is missing "callout"

    This is a fundamentally harder problem. It cannot be solved with disclosure badges or LLM-detection tools (which are themselves unreliable LLM products). It requires rethinking the social contract of open source contribution:

    • Verification must be continuous, not onboarding-only. A ten-year account history means nothing if it was compromised yesterday.
    • Behavioral baselines matter. Adam Williamson detected the Fedora agent not through technical analysis but because the contributions felt "off." Projects need better tooling to establish and detect behavioral shifts — changes in communication patterns, commit timing, response style.
    • Maintainers cannot be the last line of defense. The XZ attack was caught by Andres Freund, a developer who noticed a 500ms increase in SSH latency. The Fedora incident was caught by a developer whose "spidey sense" went off. Luck scales poorly.
    • Privilege decay must be automatic. An account that hasn't contributed in months should not have the same access as an active contributor. Trust should expire.

    The Real Risk

    The Fedora agent's targets — an installer, a privilege escalation tool, a build system interface — suggest either opportunistic reach or deliberate targeting. We don't know which, because the account was disabled before a full audit could be completed.

    What we do know is that the preparation phase of the XZ attack — the part that took Jia Tan two years of human effort — is now automatable. The same sock-puppet creation, the same gradual trust building, the same social pressure campaigns can be run at scale by AI agents operating through multiple identities simultaneously.

    The next XZ backdoor won't arrive as a new contributor who seems helpful and competent over two years. It will arrive as a trusted account whose owner doesn't know they've been compromised. The patch will be plausible. The justification will be thorough. The review will be overwhelmed by volume, and the patch will merge.

    Adam Williamson caught this one because something felt off. But he can't catch them all. None of us can.

    The firewall of open source trust was built for a slower world. The next attacker moves at machine speed, and the firewalls are still made of human intuition, good faith, and the assumption that building trust takes time.

    The first XZ backdoor had a human face. The next one will be a compliance checkbox ticking silently in a compromised CI pipeline. And we won't know it happened until someone, somewhere, notices something feels off.

    That's not a defense. That's a prayer.

    Further Reading

    No comments yet

    Live feed in your inbox

    Track the tools. Lead the shift.

    Tech leaders use Artificialus to stay ahead: editorial picks, agent comparisons, MCP updates, and signal-heavy analysis when it matters.

    No spam. Only tools and shifts worth tracking.