favicon here hometagsblogmicrobio cvtech cvgpg keys

Reproducible Builds Does Not Prevent Threats

#security

Soc Virnyl Estela | 2026-02-06 | reading time: ~6min

Disclaimer: I am not a security researcher or a cybersecurity expert. I am sharing my stance based on my understanding and limited research on the topic.

I remembered in my project obs-service-cargo that there were some opened issues #64 and #72. These two issues told that the project does not produce idempotent or deterministic build outputs yet it passed audits.

Honestly, at that time, I don't know much about reproducible builds but I do know that it is an attempt to build a project from different builder sources and hopefully, it matches the checksum of their build outputs.

PR #78 actually "fixed" the bug. But I still have doubts. And after learning it from William Brown, aka, firstyear, from his blog and from Taviso's blog, I realised that reproducible builds does not take account the social engineering in risk modelling when it comes to human behaviour.

You might wonder if Taviso has changed his stance since it is on web archive (or wayback machine) now but I did email him and he replied that he didn't change his stance on the matter. taviso email

Yes, this post was overdue and was supposed to be written 3 years ago but I can't sleep and I am bored so while I still have this in mind, why not write a new post?

An example of an upstream and downstream build§

This might not be the best excalidraw + mermaid diagram but I hope it shows an overview of how a downstream and upstream builds their own sources. Let's call this project, Project UWU.

vanilla build

As you can see here, if we take this literally like how the flowchart looks like, under no circumstances that sources and built sources from both upstream and downstream contains any malicious intent (well... there is no mention of it yet). But that's from an ideal world, and we are living in one where there are also evil people (I am one of them 😈).

Joking aside, let's assume that the sources from upstream built the same checksum following reproducible build principles.

source has checksum 'abcd'
built source has checksum 'uwuwu'

Of course, the downstream one has a different checksum for its built sources than the upstream one. But both will have the checksum for the unbuilt sources themselves, usually a tarball or zip archive.

source has checksum 'abcd'
built source after patches has checksum 'notuwuenough'

The benefit of this is that if let's say a distribution have to rebuilt its sources since other packages have updated but the underlying compiler tool necessary to build Project UWU still has unchanged version and is the same across all updated machines. Therefore, we can skip building the downstream variant of Project UWU.

Do not ever forget the evil people§

Remember what I said about social engineering and evil people? Yes, they exist. What can you even do about them? Nothing. They can do whatever the hell they want.

The keyword we should talk about here is Trust, (not the Filipino brand).

Let's update our flowchart again so you can see what I mean.

threatened build

As you can see from the flowchart above (please zoom or open it in a new tab huhu), IT ONLY TAKES 1 CHANGE OF MAINTAINER FOR UPSTREAM TO ACTUALLY BECOME A THREAT. The same thing could be said to the downstream maintainer.

In the case of the upstream, this would affect the whole supply chain since

  1. Downstream relies on it
  2. It's the only thing that exists
  3. Because there is no other person or persons to maintain this so YOLO?

In the case of the downstream, this would affect the partial (and sometimes whole) supply chain since

  1. They can provide "innocent" patches to both downstream and upstream
  2. Consumers are using it on the downstream distribution because they trust the downstream maintainer

Yeah, Project UWU can un-cute itself because of evil people 😝

So how can reproducible builds not protect us§

What I can see from here is that reproducible builds cannot protect us from these kinds of threats because

  1. It only takes 1 evil person to fuck up the supply chain
  2. Trusting is hard and in this kind of scenario, your only option is to trust that the maintainer/contributor is not a psychopath.
  3. The checksums do not matter when you are already compromised. However, you can keep a record of the checksum of a malicious source.

The only way reproducible builds can mitigate threats, from what I can understand, is after the threats has happened. But it does not protect us from any present event a compromised source/build has happened until it is noticed.

But what about being reproducible?§

Well, it does help with build times, but eh... that's the only benefit it can give—to save energy and compute.

Conclusion§

I know I know I am repeating words, I haven't even looked at the blog posts just to see if I can remember what I understand about why reproducible builds cannot protect us from present threats. I am not a cybersecurity expert either. But I have a big imagination.

The only benefit I can imagine from reproducible builds is a record of checksums of malicious sources as well as the record of checksums of malicious built sources.

But it is a fact that many are passionate in building infrastructure around it just to prove that it works. However, it still fails to address the social engineering which is a big factor in security.

Anyway, goodnight. I think it's 2AM now around my timezone. I need to fix my sleep schedule.

Articles from blogs I follow around the net

Recently

ListeningDie In Love by Greet DeathVia David Crespo, I got into Greet Death, a band that's been hustling since 2011. It's great in a simultaneously familiar and innovative way. The album has a great amount of variety: Small Town Cemetery is a really effect…

via macwright.comFebruary 03, 2026

Vive La Vulnérabilité: French Kubernetes Cluster Hunts Your Webhook Endpoints

Most webhook scanning campaigns run from throwaway VPS instances. This one came from a full Kubernetes cluster with Envoy service mesh. Censys data showed consistent infrastructure across all source IPs—container orchestration, not opportunistic scanning. …

via GreyNoise LabsFebruary 03, 2026

The role of the Software Engineer in the age of AI

Introduction For the last year or so, I’ve started using AI tools like ChatGPT and GitHub Copilot to help me with my software engineering tasks. For most of the time, these tools have been a great help. GitHub Copilot has helped me automate boilerplate…

via Christian Visintin BlogFebruary 01, 2026

The cults of TDD and GenAI

I’ve gotten a lot of flack throughout my career over my disdain towards test-driven development (TDD). I have met a lot of people who swear by it! And, I have also met a lot of people who insisted that I adopt it, too, often with the implied threat of appe…

via Drew DeVault's blogJanuary 29, 2026

2025 in review

Come along with me as I review the past year. Heh, I often start these kinds of posts right at the start of the year, but it takes a few weeks longer than I ever expect to think them through.1 Two years of being independent After a second year of operati…

via seanmonstarJanuary 27, 2026

The Birthday Paradox, simulated

I'm a fan of simulating counterintuitive statistics. I recently did this with the Monty Hall problem and I really enjoyed how it turned out. A similarly interesting statistical puzzle is the birthday paradox: you only need to get 23 people in a room a room…

via pcloadletterJanuary 23, 2026

Status update, January 2026

Hi! Last week I’ve released Goguma v0.9! This new version brings a lot of niceties, see the release notes for more details. New since last month are audio previews implemented by delthas, images for users, channels & networks, and usage hints when typing a…

via emersionJanuary 21, 2026

The Only Two Markup Languages

There are only two families of proper arbitrary markup languages: TeX and SGML I would normally link to official thing as reference but it's behind the "wonderful" ISO paywall: ISO 8879:1986.. By arbitrary, I mean the grammar specifically, and how it can …

via gingerBill - ArticlesJanuary 19, 2026

Software Assurance & That Warm and Fuzzy Feeling

If I were to recommend you use a piece of cryptography-relevant software that I created, how would you actually know if it was any good? Trust is, first and foremost, a social problem. If I told you a furry designed a core piece of Internet infrastructure,…

via Dhole MomentsJanuary 15, 2026

Gbyte leaks gigabytes of data - #FuckStalkerware pt. 8

plus an MMO boosting service, fully remote Android spying and patented ToS violations

via maia blogJanuary 06, 2026

Whiplash and the ideas of success

Some ideas about success and analysis of some of the concepts of the film Whiplash

via Ishan WritesJanuary 04, 2026

Merry Christmas, Ya Filthy Animals (2025)

It’s my last day of writing for the year, so I’m going to try keep this one quick – it was knocked out over three hours, so I hope you can forgive me if it’s a bit clumsier than my usual writing. For some strange reason, one of the few clear memories I hav…

via LudicityDecember 27, 2025

Are people migrating away from GitHub?

I noticed some people migrating away from GitHub recently. I was curious to understand the rationale. Is it a blip or is it a sign of prolonged exodus?

via Rob O'Leary | BlogDecember 22, 2025

Yep, Passkeys Still Have Problems

It's now late into 2025, and just over a year since I wrote my last post on Passkeys. The prevailing dialogue that I see from thought leaders is "addressing common misconceptions" around Passkeys, the implication being that "you just don't understand it co…

via Firstyear's blog-a-logDecember 17, 2025

Testing multiple versions of Python in parallel

Daniel Roy Greenfeld wrote about how to test your code for multiple versions of Python using `uv`. I follow up with a small improvement to the Makefile.

via Technically PersonalJuly 21, 2025

LLDB's TypeSystems Part 2: PDB

In my previous post, I described implementing PDB parsing as a can of worms. That might have been a bit of an understatement. PDB has been one "oh, it's gonna be twice as much work as I thought" after another. Implementing it has revealed many of the same …

via Cracking the ShellJuly 07, 2025

#Rx Writing Challenge 2025

This is a short reflection on my experience of the recent writing challenge I took part in. Over the past two weeks, I have participated in the #RxWritingChallenge 1—a daily, 30-minute writing group starting at 9 AM every morning. Surrounded by fellow doct…

via Ul-lingaApril 05, 2025

My coffee workflow

My coffee workflow by Clement Delafargue on April 1, 2025 Tagged as: coffee, espresso, flair58, v60. It is my first April cools’ and I guess I could start by talking about coffee. If you’ve seen me in person, it won’t be a surprise, I guess. This po…

via Clément Delafargue - RSS feedApril 01, 2025

Generated by openring-rs

favicon here hometagsblogmicrobio cvtech cvgpg keys