Thoughts on Open Source Takeovers This past month saw one of the most well-planned open source software supply chain attacks in history. A program called xz Utils, which provides lossless data compression for most Linux distributions, was found to have a backdoor that affected sshd. As Ars Technica reported, “Anyone in possession of a predetermined encryption key could stash any code of their choice in an SSH login certificate, upload it, and execute it on the backdoored device.” There are no reports of the backdoor being used, but the story behind how the backdoor landed is something straight out of a spy novel. The story starts in 2021 when a GitHub user named JiaT75 is created. Later that year, they successfully landed a commit to libarchive (a C library for reading and writing archive files) that replaces a call to safe_fprintf() with one to fprint(). Even though this was a bit suspicious, it was merged without comment. Later comments seem to agree that the change is benign, but also pointless. This appears to be a trial run to see how difficult it would be to land code in a widely-used project. JiaT75’s first contribution to xz Utils happens in February 2022 by submitting a patch to the mailing list. Someone named Jigar Kumar then joins the mailing list and accuses Lasse Collin, the xz Utils maintainer, of not properly maintaining the project. He urges Collin to merge the patch quickly. Several others also joined the mailing list around the same time to agree with Jigar. All of this was with the intention of putting pressure on Collin to have someone help maintain xz Utils. In January of 2023, JiaT75 landed their first pull request without outside review, indicating that they now have gained the trust of Collin and have commit access. From that point on, JiaT75 makes a series of contributions to further cement control of the project. The first is a pull request to oss-fuzz changing the contact email address from Collin to JiaT75, which is followed up with other changes to oss-fuzz designed specifically to avoid detecting the backdoor code when it is introduced. Once the backdoor landed and the new releases were published, Jiat75 went out about pressuring Linux distros to upgrade their version of xz Utils to the malicious versions. Many did. It was only through accident that the backdoor was discovered before it could be exploited. Right now, I don’t have an answer for what needs to change. I just know that something does. Key Takeaways
More on Open Source Takeovers📝 Open Source Security (OpenSSF) and OpenJS Foundations Issue Alert for Social Engineering Takeovers of Open Source Projects by Robin Ginn and Omkhar Arasaratnam 📝 Everything I know about the XZ backdoor by Evan Boehs 🎬 Linux got wrecked by backdoor attack by Fireship Stuff I've Enjoyed this Month📚 Coaching for Performance by Sir John Whitmore 📚 How to Grow Your Small Business by Donald Miller 🎬 Bun 1.1: Bundows is here by Bun 📝 Paying Maintainers: The How-To by Luis Villa 📝 How We Built JSR by Luca Casonato What I'm Working On🏠 Real Estate: There was a lot of rain around my properties, and so the basement of one house flooded. This was surprising because I do have a sump pump in the basement, but it was attached to a GFCI outlet that tripped and the pump never went on. A bit of a mess but thankfully there was no significant damage. We replaced the outlet and pumped the water of the basement. Just another fun landlord story! Follow my Instagram for real estate photos. 📝 Writing: I wrote a blog post explaining how I use a Synology NAS to back up my whole life. If you use a public cloud as your only source of data (i.e., Google Drive), you'll want to read this. 💻 Standards: I put together a proposal to change the JavaScript const declaration so it is write-once instead of requiring initialization. At this point, I'm just waiting to hear back from a TC39 member to see if there's any chance they'd accept this proposal. I've received good feedback so far so I'm hopeful. 💻 Open Source: I submitted my first pull request to Undici, which is the package that powers the Node.js native fetch() function. I had spent an hour trying to track down an obscure error and decided to submit a pull request to make the error message more easily understandable. 💻 ESLint: After a lot of work by a lot of people, ESLint v9.0.0 has been officially released! This is very exciting because it lays the groundwork for a lot of future plans. |
A once-per-month newsletter discussing topics important to senior-level software engineers, with a particular focus on frontend technology and leadership.
Deno: What happened? When Ryan Dahl introduced Deno at JSConf EU 2018, it generated significant interest in the JavaScript community. As the creator of Node.js, Dahl presented a compelling vision: a new runtime that would address the common pain points developers face. Deno (a palindrome of "node") promised a fresh approach with new core APIs, ESM-only modules, familiar web APIs, independence from npm, and security by default. Who better to reimagine the JavaScript runtime than the person who...
Getting Buy-In You’re a tech lead with an idea for a large project, one that would make your life easier. But to make it happen, you'll need help. The project requires additional developers and possibly some cross-team collaboration. That means getting it on the roadmap and securing resources. Whether this is your first proposal or not, there’s a clear path you can follow to get your project approved. Start by clearly defining the problem. To build a strong case for your project, you need to...
Agents and MCP Last month, Visual Studio Code officially launched agent mode. While similar features existed in VS Code forks like Cursor and Windsurf, this release put agents into the hands of the wider developer community. The result? A surge of interest in agents, and in MCP, as developers began experimenting at scale. It may be the most important milestone since GitHub Copilot first arrived, marking a real leap forward in how we build software. So, what is an AI agent? It's a program...