Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

What's your plan if fixing a vulnerability requires changing the size of a struct?


> What's your plan if fixing a vulnerability requires changing the size of a struct?

Do you actually have an answer any of the points I presented you, or are you going to continue desperately trying to put up strawmen?

If any of your magical static lib promises had at bearing in the real world, you wouldn't have such a hard time trying to come up with any technical justification for them.


The argument that you seem to be making is that under dynamic linking, there is never any reason to need to recompile an application, and thus the fact that static linking forces you to recompile applications makes it non-viable from a security perspective.

Unfortunately, this is very far from being true in the real world.

And even if all libraries did maintain 100% ABI compatibility forever, and even if there were never any compiler or processor bugs that needed to be mitigated by recompiling applications, dynamic linking would still add runtime complexity and thus surface area for security vulnerabilities.

> Are you tracking each and every dependency that directly or indirectly consumes the vulnerable library? Are you hoping to have access to their source code, regardless of where they came from, and rebuild all libraries and applications?

Yes? I mean, are you just throwing random untrusted binaries onto your servers, not keeping track of what their dependencies are, and hoping to God that you will never ever need to recompile them? (And if your explanation for that is "I use proprietary software from vendors who refuse to share source code", have you chosen incompetent vendors who cannot respond to security vulnerabilities in a timely fashion?)


What is your plan?


Four-part plan is this:

1. For each application and library in the system, maintain a copy of the source code and the scripts necessary to rebuild it.

2. Keep track of the dependency tree of each application and library in the system.

3. If there's a problem with a dependency, update it and rebuild all dependent applications.

4. If I'm using binaries from a vendor (whether that's a Linux distribution or a proprietary software company), the vendor needs to be responsible for (1) to (3).

In practice, your package manager will generally implement almost all of (1) to (3) for you. (Newfangled systems like NPM or Cargo usually do it using lockfiles and automated tools like Dependabot.)

If you're using dynamic linking, guess what? You still have to do these four things, because even with dynamic linking, there are still problems that can only be solved by recompiling your software. Even if you think reasons like ABI incompatibility or processor bugs aren't compelling, there might be, y'know, bugs in the applications themselves that you've gotta patch.


> If I'm using binaries from a vendor (whether that's a Linux distribution or a proprietary software company), the vendor needs to be responsible for (..)

I'm not even going to bother pointing how unfeasible all your other points are. I'm just going to point this Fack: you do understand this does not work and never worked at any point in time, don't you?

Do you understand the explicit reference to perpetually vulnerable systems? Do you realize where it cames from?

You only have the power to rebuild the packages you own personally, and even so static libs offer zero ways to keep track of which version went into which build.

Once your fantastic panacea starts to rely on your idea to force third parties to follow your personal orders to make new releases under your own personal terms, you should be very aware that you will not get your wish. You'll instead just keep on using the same vulnerability-riddled release.

Do you understand the importance and value of static libs? You do not need four-point authoritarian and deeply impractical and unfeasible plans to keep your system safe. With shared libraries you just patch the one lib, and all your system is safe.

And again what tradeoff do you want to achieve for this? Nothing?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: