this post was submitted on 18 Aug 2023
91 points (98.9% liked)
Rust
5979 readers
96 users here now
Welcome to the Rust community! This is a place to discuss about the Rust programming language.
Wormhole
Credits
- The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
That seems like it could be an issue, but not the issue being raised by the post. The original post was talking about executing binary code on a user's machine without consent. The thing is, this is how a lot of Rust packages work. Any package can have a
build.rs
that runs arbitrary code on a developer's machine (that gets compiled into a binary automatically by Cargo). Any proc macro is arbitrary code that gets compiled into a binary and executed on a developer's machine. In fact, any library, regardless of if there's abuild.rs
or if it's a proc macro, can have malicious code in it that gets executed when a developer calls a specific method.None of this is new. When done maliciously, it's called a supply-chain attack. All packages can do this. This is part of why there's been interest in executing some of this code in WASM runtimes within the compiler, so that developers can explicitly control the level of impact those packages can have on a developer's machine. That being said, WASM doesn't solve the fact that any package can just have malicious code in it that gets executed during runtime. This is why people should vet their packages themselves (when it's important, at least) to ensure that this won't happen to them.
If the executable were easily reproducible from the source code, then yes, downloading a precompiled binary would be akin to executing code in
build.rs
or a proc macro. The fact that it's not makes these very different, because it makes your suggestion of "vet[ting] their packages themselves" impossible.Maybe I'm missing something, but I'm not seeing where in serde we're downloading a precompiled binary. I see a script we can execute ourselves in the repository and an alternative serde_derive that uses that executable (after we compile it), but not where the actual published package has the executable.
It's possible I'm missing something here though.
Edit: Ogh, using
ᐸ
which is a replacement character because Lemmy escapes the real one. This is annoying.There, you will see that this file exists:
Yes, that's a pre-built binary in the crate source release. It's that bad.
Looks like I missed that, I was checking locally but I must have been checking an outdated version of the package. I'd feel better about it if it compiled on the user's machine, which is the impression I was getting.