Proc macro sandboxing
Proc macro sandboxing
Proc macro sandboxing
we’re working on a third party solution for this. Should have some updates that sandbox cargo builds shortly.
https://github.com/phylum-dev/birdcage
It’s a cross-platform sandbox that works on Linux via Landlock and macOS via Seatbelt. We’ve rolled this into our CLI (https://github.com/phylum-dev/cli) so you can do thinks like:
undefined
phylum
For example for npm, which currently uses the sandbox:
undefined
phylum npm install
We’re adding this to cargo to similarly sandbox crate installations. Would love feedback and thoughts on our sandbox!
I don't get it.
A Rust procedural macro (proc macro) is a metaprogramming feature in Rust that allows you to define custom syntax extensions and code transformations. They operate on the abstract syntax tree (AST) of Rust code during compilation and can generate or modify code based on annotations or custom syntax.
Sandboxing a Rust proc macro refers to restricting the capabilities of the macro to improve security and prevent potentially harmful code execution. There are several reasons why someone might want to sandbox a proc macro:
Sandboxing a Rust proc macro typically involves using crates like sandbox
or cap-std
to restrict the macro's capabilities and limit its access to the system. This ensures that the macro operates within a controlled environment, enhancing the overall safety of code compilation and execution.
-GPT
I didn't get it either.
Seems to me if your code will be this unpredictable, you should only run it on an air gapped machine
It’s just compile time code execution.
The difference between those macros („procedural macros“) and regular macros is that while regular macros are pretty much only templated code that is unfolded, proc macros contain code that is run at compile time, so they are more powerful but also more dangerous from a security perspective as you would expect just compiling a program to be safe.
Also: is copy pasting ChatGPT answers a thing now even when you, as you said, don’t even know what it means??
I'm pretty sure they operate on tokens not AST.
But now you do? I don't understand what the image has to do with any of this.
What happened to the White Gold Tower?
You would have to ask Roxanne Meadows
What's that
This looks kind of like the Imperial City from Oblivion, which has a huge tower in the middle called White Gold Tower.
I think the bigger problem is that they are hard to write and sometimes break tooling.
Why would they need to be?
[This comment has been deleted by an automated system]
I don't think this is a problem with proc macros or package managers. This is just a regular supply chain attack, no?
The way I understand it, sandboxing would be detrimental to code performance. Imagine coding a messaging system with a serve struct, only for serde code to be much slower due to sandboxing. For release version it could be suggested to disable sandboxingy but then we would have gained practically nothing.
In security terms, being prepared for incidents is most often better than trying to prevent them. I think this applies here too, and cargo helps here. It can automatically update your packages, which can be used to patch attacks like this out.
If you think I'm wrong, please don't hesitate to tell me!
I personally don't think they do, but an argument can certainly be made. Rust proc macros can run arbitrary code at compile time. Build scripts can also do this.
This means, adding a dependency in Cargo.toml is often enough for that dependency to run arbitrary code (as rust-analyzer will likely immediately compile it).
In practice, I don't think this is much worse than a dependency being able to run arbitrary code at runtime, but some people clearly do.
I don't know if it is a huge issue but it is definitely a nice to have. There are a few examples I can think of:
I'm sure there are more. For me personally it isn't a huge priority or concern but I would definitely appreciate it. If people are surprised that building a project can compromise their machine than they will likely build things assuming that it won't. Sure, in an ideal world everyone would do their research but in general the safer things are the better.